一、前置条件
在使用uniapp实现支付宝支付功能之前,需要满足以下条件:
1. 注册支付宝开发者账户
在支付宝开放平台注册一个开发者账户,注册完成后需要进行实名认证,开通支付宝商家服务。
2. 获取支付宝应用的app_id与私钥
在支付宝开放平台创建应用,获得应用app_id。并且生成RSA私钥,私钥是进行二次签名的必须成分。
3. 配置uniapp项目
在uniapp项目中需要安装uni-alipay插件,并且进行相关配置。
{
"compilerOptions": {
...
},
"condition": {
...
},
"appid": "APID",
"ali": {
"appId": 'YOUR_APPID',
"rsaPrivate": 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
},
...
}
二、发起支付宝支付请求
在前置条件满足后,开发者可以通过uni-alipay插件中的APD接口发起支付宝支付请求。
// 查看接口文档
import uniAlipay from '@dcloudio/uni-alipay'
uniAlipay.pay({
orderStr: '从后端请求的订单信息',// 订单信息
}, function(ret) {
console.log('success')
console.log(JSON.stringify(ret))
}, function(ret) {
console.log('fail')
console.log(JSON.stringify(ret))
})
在以上代码中,uniAlipay.pay()
方法是发起支付宝支付请求的接口,其执行流程如下:
前端请求后端获取订单实体。
调用uniAlipay.pay()
方法,传入订单信息及成功、失败处理回调函数。
对订单实体进行字符串化处理(详情见下文)。
调用支付宝支付sdk进行支付。
三、订单信息加签方式
在请求支付宝sdk支付时需要将订单实体进行字符串化及加签,步骤如下:
1. 订单信息json化
根据支付宝开放平台要求,订单信息应包含商户订单号、订单总金额、商品名称、商品详情等字段信息,同时需要将json对象转化为字符串,这样才能放置到支付宝sdk中进行处理。
{
"out_trade_no": "商户订单号",
"total_amount": "0.01",
"subject": "测试商品",
"body": "测试商品描述",
"timeout_express": "30m",
"product_code": "QUICK_MSECURITY_PAY"
}
2. 订单信息字符串化
将订单信息进行字符串化,即将json字符串中每个字段按照key=value的形式拼接成一个字符串,保留原值中所有的空格。
out_trade_no=商户订单号&total_amount=0.01&subject=测试商品&body=测试商品描述&timeout_express=30m&product_code=QUICK_MSECURITY_PAY
3. 订单信息签名
将字符串化的订单信息进行RSA256加签,私钥为之前开发者在开放平台中申请的RSA私钥。
4. 将签名后的信息放入到支付宝支付sdk请求体中
将签名后的订单信息放入orderStr
字段中,通过调用uniAlipay.pay()
接口发起支付宝支付请求。
总结
通过本文我们了解了uniapp如何实现支付宝支付的功能,并且深入了解了订单实体的加签及字符串化方式。开发者可以根据以上原理,在自己项目中进行支付宝支付功能的实现。