关于如何允许客户使用他们的 Metamask 钱包进行支付的分步指南。2 n2 [( n) G& j2 w( t3 O" J
: l( e! L, l0 ^! E; `/ q7 a( `
+ P, w8 E H. I因此,假设您有一家在线商店,并希望允许您的客户使用加密货币进行购买。 在本文中,我们将完成使用 Javascript 和 Metamask 实现简单的加密货币支付流程的步骤。
; F/ r& T# t& g/ F; G5 L; ~9 W整个流程将如下所示:
3 i& I- V4 @/ d* l3 G! V
: f( }/ d6 K/ ]- C$ }
4 C- q7 s1 ]. Z4 X* r支付流程
7 f: L* P) e4 B3 T) L执行支付的流程如下:
. q) w: [3 ]! c- j: M1 @0 G+ A( T" o
- 应用程序加载并自动检查 Metamask 钱包是否已连接。 如果没有,请显示连接按钮。6 {4 U; t0 @0 K9 v0 B
- 如果用户未连接,他按下连接按钮并签署消息以连接到应用程序。
$ { ?/ X8 |! `! M - 用户查看并确认付款。
5 o# q6 M3 ?2 X E) F) m' H - 创建一个 Metamask 交易请求,并显示一个弹出窗口供用户确认交易。8 J1 y) {+ ^* {( v7 F! G3 \
- 用户确认交易,生成一个 Eherscan url,用户和应用程序都收到付款确认。
/ H3 Y. K _$ b: x$ Y% T 9 |3 {; n9 ]2 h' a5 B7 ~
4 K9 k5 ]: ~! E0 G. W8 N% r/ [
检查用户是否登录" e# E: t I/ p/ }/ ^+ k' h8 n
首先,当页面第一次加载时,我们要检查用户是否已经将钱包连接到应用程序。 为此,我们只需使用“eth_accounts”方法获取用户的帐户。 如果未返回任何帐户,则表示用户未连接。 这是执行此操作的代码:
' F0 c0 [( _1 @* s: T% t% Mfunction checkIfWalletConnected() { if (window.ethereum.request({ method: 'eth_accounts' }).then(function (accounts) { if (accounts.length > 0) { connected = true; buyerAddress = accounts[0]; } else { connected = false; } }) ) { connected = true; } else { connected = false; }}如果用户已登录,我们会显示结帐菜单,如果没有,我们会显示一个连接按钮。# M1 D% ?. m: c$ k0 A* z
( q+ e2 _+ n+ n8 d0 ^6 }
! |2 n' V7 |0 [1 ]: F, s: U
将用户连接到应用程序% X: ^# H; _, P1 j6 t& g4 g! V
如果用户未连接,我们需要为连接按钮分配一个功能,以将钱包连接到应用程序。 这可以通过使用“eth_requestAccounts”方法来实现。 此方法将创建一个 Metamask 弹出窗口,供用户签署消息并确认他想要连接到应用程序。; K' M2 a' i) b' ]/ q1 O+ ^8 g
这是此类功能的代码:
% `6 @ _0 C& P9 @! @2 f. Ofunction connectWallet() { if (window.ethereum) { console.log('MetaMask is installed'); window.web3 = new Web3(window.ethereum); window.ethereum.send('eth_requestAccounts').then(function() { // Get account address window.ethereum.request({ method: 'eth_accounts' }) .then(function(accounts) { if (accounts.length > 0) { buyerAddress = accounts[0]; } else { connected = false; } }); }); } else if (window.web3) { window.web3 = new Web3(window.web3.currentProvider); connected = true; } else { connected = false; }}用户现在将连接到网站并能够进行结帐。# r4 i/ |5 a# b5 }% o# ]- {* v
7 G+ ~, E7 C \/ i8 k# q$ j
0 ], \# d# |$ `. c A5 W
处理付款
% o5 A/ x" b7 g& n对于最后一部分,我们希望提示用户通过 Metamask 确认交易。 这可以通过“eth_sendTransaction”方法来实现:
. b; R, m% o4 `" o; R9 vfunction makePaymentRequest(buyerAddress, sellerAddress, itemPriceInWei) { // Start wallet payment process window.ethereum.request({ method: 'eth_sendTransaction', params: [{ from: buyerAddress, to: sellerAddress, value: itemPriceInWei }] }) .then(response => { console.log(response); return true; }) .catch(error => { console.log(error); return false; });}
$ \# Q4 u6 d$ T' E+ x; s2 p% n) D: Y W8 N! L
完整的代码片段
$ L: g Q+ {) }此代码的完整工作版本可以在下面的链接中看到。 该片段使用 Vue.js 和 Tailwindcss 来实现本文开头所示的接口。
% n: P) M& a9 A( p3 L4 m( z: J; B" o4 w$ B8 p9 b( |
% E# m+ ~) N) W& |1 G+ g8 f结论
: A1 t* E7 ?$ u8 V" b" `( g本文是使用 Metamask 快速实施基本区块链支付系统的简短实用指南。, u. @* A& G" p7 J
这是最简单的实现,但如果您想跟踪客户和订单,不建议这样做。 如果您有兴趣学习如何创建一个更强大的架构来处理订单跟踪和更强大的流程,请关注我,因为我将很快发布一篇关于我如何使用无服务器云功能创建全栈实现的文章。
7 E0 u2 I+ O0 S4 m* y* q' B快乐编码! |