☞:官方文檔
☞:調用接口
alipay.trade.create(統一收單交易創建接口)
首先創建應用 步驟:螞蟻金服開放平台-->開發中心-->第三方應用
開發配置
添加功能(當面付,獲取會員信息,第三方應用授權)
首先:讓簽約商戶對第三方應用授權
API接口:https://docs.open.alipay.com/20160728150111277227/intro
授權成功之后拿到商戶ID 和 授權token
也可以調用接口換取:https://docs.open.alipay.com/api_9/alipay.open.auth.token.app/
支付步驟:
1.獲取支付寶用戶的唯一userId
2.獲取支付寶交易號
const AlipaySdk = require('alipay-sdk').default; const AlipayFormData = require('alipay-sdk/lib/form').default; // 支付寶支付 async aliPay(ctx) { let privateKey = path.join(this.config.baseDir, 'app/alipayKey', 'private.pem'); let publicKey = path.join(this.config.baseDir, 'app/alipayKey','public.pem'); const alipaySdk = new AlipaySdk({ appId: zfbServiceAppId.par_content, privateKey: fs.readFileSync(privateKey, 'ascii'), // 私鑰 alipayPublicKey: fs.readFileSync(publicKey, 'ascii'), // 支付寶公鑰 signType: 'RSA2', charset: 'utf-8' }) const formData = new AlipayFormData(); formData.setMethod('get'); formData.addField('notifyUrl', url+ '/api/h5/zfbPay/callBack'); formData.addField('appAuthToken', shop.sho_zfb_authToken); // 商戶授權token formData.addField('bizContent', { outTradeNo: out_trade_no, // 訂單號 totalAmount: money, // 支付金額 subject: '支付到賬', body: 'rhmzf', buyerId: buyer_id, // 支付用戶 userId extend_params: { sys_service_provider_id: shop.sho_zfb_pid // 商戶ID } }); try { const result = await alipaySdk.exec( 'alipay.trade.create', {}, { formData: formData, validateSign: true }, ); /** * 獲取支付寶交易號 */ var oauth2Result = await ctx.curl(result, { method: 'GET', dataType: 'json', }); params = oauth2Result; } catch (err) { console.log('報錯了 ' + JSON.stringify(err)) } }
3.引入支付寶jsAPI (支付寶H5開發文檔)
通過支付寶交易號喚起支付
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script> </head> <body> <h1>點擊以下按鈕喚起收銀台支付</h1> <!-- 引入 --> <!-- 按鈕 --> <button id="J_btn" class="btn btn-default">支付</button> <script> // 觸發事件 var btn = document.querySelector('#J_btn'); btn.addEventListener('click', function () { ap.tradePay({ tradeNO: "<%-tradeNO%>" // 支付寶交易號 }, function (res) { ap.alert(res.resultCode); // 你支付成功后要處理的邏輯 }); }); </script> </body> </html>