分享一下uniapp 使用zfb支fu【zfb小程序版】
前提:收款的zfb商户:appId、mchId、应用公钥/秘钥、zfb公钥
流程图:
具体关键实现:
一、初始化:
1.0 获取authCode
由于小程序支fu是需要user_id,所以需要授权获取user_id才可以完成支fu。
uniapp小程序代码:
- my.getAuthCode({
- scopes: 'auth_user',
- success: (res) => {
- this.authCode = res.authCode
- console.log(this.authCode)
- this.oauthToken();
- },
- });
复制代码1.1 换取授权访问令牌 请求后端服务,通过后端服务换取token
服务端代码(nodeJS): - //使用了alipay-sdk
- const result = await alipaySdk.exec('alipay.system.oauth.token', {
- grantType: 'authorization_code',
- code: authCode
- }).catch(error => {return error});
- //返回user_id、access_token
复制代码二、支fu流程:
2.0 点击支fu,请求后端生成交易单
alipay.trade.pay(统一收单交易支fu接口)
服务端代码(nodeJS): - const result = await alipaySdk.exec('alipay.trade.create', {
- notifyUrl: config.TRADE_CREATE_NOTIFY_URL,
- bizContent:{
- out_trade_no: outTradeNo,
- total_amount: totalAmount,
- buyer_id:userId,
- subject:subject
- }
- }).catch(error => {return error});
- //返回tradeNo、outTradeNo
复制代码 2.1 使用交易单号(tradeNo)唤起支fu- my.tradePay({
- tradeNO: tradeNo,
- success: function(res) {
- console.log("付款成功,严谨一点应该需要请求后端服务再次确认:",res)
- },
- fail: function(res) {
- console.log("付款失败,严谨一点应该需要请求后端服务再次确认:",res)
- },
- });
复制代码 三、支fu结果:
3.0 :支fu成功后zfb服务器会同步主动调用回调url,这里可以同步更新订单的支fu状态。
3.1:在2.1中“my.tradePay”返回的是唤起结果,不是支fu结果,支fu结果还是需要请求后端服务确认(zfb同步回调支fu结果)。
基本就是这样完成了小程序的支fu功能。
除了uniapp开发外,还需要一个可以访问的后端服务来做交互和加解密校验等功能。
|