无论是在手机端还是小程序端、或是 H5 端,支付功功能都是非常常见的功能了,实际上在 uniapp 框架下实现整个支付流程并不复杂。
微信开放平台中申请开通支付功能后,在项目中的 manifest.json 文件配置好支付的部分,按照不同的端进行实现,就可以使用支付功能了。
支付的过程可以拆分为三个步骤:
-
- 支付前:
- 在 manifest.json 文件中的App模块配置设置支付权限
- 获取用户的 openid(需要先授权登录,再进行获取,获取到的 openid 作为下一步中后端接口传入的参数)
- 调用后端接口,获取支付所需的参数
-
- 支付:调用 uniapp 的支付 API :uni.requestPayment
-
- 支付后,
- 支付成功:更新用户信息、优惠券数据等等
- 支付失败:进行用户提示,重新进行支付流程
一、配置 manifest.json
在 manifest.json 的 【App模块配置】 中勾选 payment(支付),选择需要开通支付权限的平台
注:微信支付需要输入对应的 AppID(在微信开发者中心可以查询到)
二、获取用户 openid
uniapp 中的 uni.login API(授权登录)可以获取到 code 值(loginRes 中可以直接渠取到),再使用 code 请求接口获取 openid
实现代码如下:
uni.login({
provider: 'weixin',
success: function (loginRes) {
// 获取 code、openid
}
})
-后台通过code、appid、AppSecret等获取openid和session_key
uni.requestPayment
uniapp 为我们提供了支付相关的 API :uni.requestPayment,它统一了各平台的客户端支付 API,支持小程序和App。
参数:
- provider:
- wxpay:微信
- alipay:支付宝
- orderInfo:
- 订单数据,需要先请求后端接口获取后传入
- 一般会包含 appid、noncestr(随机字符串)、timestamp(时间戳)、sign(签名,比如MD5)等等
实现代码如下:
uni.requestPayment({
provider: 'wxpay',
orderInfo: orderData,
success: function(res) {
uni.showToast({title: '支付成功'})
},
fail: function(err) {
uni.showToast({title: '支付失败'})
},
})
进一步封装
在实际开发中,可能会有适配不同端的情况,这时候就需要进行进一步的封装:
- 如果是 App 或者小程序端,按照上述步骤使用 uni.requestPayment 进行支付处理即可,
- 如果是 H5 端,需要通过 引入 jweixin (或是使用对应的 SDK)进行操作:
const jweixin = require("jweixin-module");
jweixin.config( ... )
jweixin.ready( ... )