目录
支付是小程序生态中的重要一环,但支付宝给出的文档确不够详细,大大增加了小程序的开发难度,本文旨在说明支付宝小程序唤起支付的详细过程,用以降低开发文档的阅读难度。
支付需要配置能力列表中的小程序支付能力和获取会员基础信息的能力。
my.tradePay
根据小程序API文档给出的说明,my.tradePay是用于发起支付的 API,实例代码如下:
// .js
my.tradePay({
// 调用统一收单交易创建接口(alipay.trade.create),获得返回字段支付宝交易号trade_no
tradeNO: '201711152100110410533667792',
success: (res) => {
my.alert({
content: JSON.stringify(res),
});
},
fail: (res) => {
my.alert({
content: JSON.stringify(res),
});
}
});
但其中tradeNO参数需要调用统一收单交易创建接口(alipay.trade.create)来获得,需要注意:
- alipay.trade.create 接口在小程序场景中 buyer_id 参数必填,且入参的 buyer_id(用户 user_id,2088 开头)必须和前端唤起支付的支付宝账号一致。
alipay.trade.create
所以调用alipay.trade.create接口需要以下参数:
公共请求参数
参数 | 必填 | 描述 | 示例值 |
---|---|---|---|
app_id | 是 | 支付宝分配给开发者的应用ID | 2014072300007148 |
method | 是 | 接口名称 | alipay.trade.create |
format | 否 | 仅支持JSON | JSON |
charset | 是 | 请求使用的编码格式,如utf-8,gbk,gb2312等 | utf-8 |
sign_type | 是 | 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 | RSA2 |
sign | 是 | 商户请求参数的签名串,详见签名 | 详见示例 |
timestamp | 是 | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" | 2014-07-24 03:07:50 |
version | 是 | 调用的接口版本,固定为:1.0 | 1.0 |
notify_url | 否 | 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 | http://api.test.alipay.net/atinterface/receive_notify.htm |
app_auth_token | 否 | 详见应用授权概述 | |
biz_content | 是 | 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档 |
请求参数
参数 | 必填 | 描述 | 示例值 |
---|---|---|---|
out_trade_no | 必选 | 商户订单号。 由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 | 20150320010101001 |
total_amount | 必选 | 订单总金额。 单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。 | 88.88 |
subject | 必选 | 订单标题。 注意:不可使用特殊字符,如 /,=,& 等。 | Iphone6 16G |
buyer_id | 特殊可选 | 买家支付宝用户ID。 2088开头的16位纯数字,小程序场景下获取用户ID请参考:用户授权; 其它场景下获取用户ID请参考:网页授权获取用户信息; 注:交易的买家与卖家不能相同。 | 2088102146225135 |
timeout_express | 可选 | 订单相对超时时间。从交易创建时间开始计算。 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 当面付场景默认值为3h。 注:time_expire和timeout_express两者只需传入一个或者都不传,如果两者都传,优先使用time_expire。 | 90m |
sign由上面的参数与私钥计算而来,详情参见签名。
user_id即用户ID,需要通过alipay.system.oauth.token接口获得。
alipay.system.oauth.token
调用接口需要以下参数:
公共请求参数
参数 | 必填 | 描述 | 示例值 |
---|---|---|---|
app_id | 是 | 支付宝分配给开发者的应用ID | 2014072300007148 |
method | 是 | 接口名称 | alipay.system.oauth.token |
format | 否 | 仅支持JSON | JSON |
charset | 是 | 请求使用的编码格式,如utf-8,gbk,gb2312等 | utf-8 |
sign_type | 是 | 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 | RSA2 |
sign | 是 | 商户请求参数的签名串,详见签名 | 详见示例 |
timestamp | 是 | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" | 2014-07-24 03:07:50 |
version | 是 | 调用的接口版本,固定为:1.0 | 1.0 |
app_auth_token | 否 | 详见应用授权概述 |
请求参数
参数 | 必填 | 描述 | 示例值 |
---|---|---|---|
grant_type | 必选 | 授权方式。支持: 1.authorization_code,表示换取使用用户授权码code换取授权令牌access_token。 2.refresh_token,表示使用refresh_token刷新获取新授权令牌。 | authorization_code |
code | 可选 | 授权码,用户对应用授权后得到。本参数在 grant_type 为 authorization_code 时必填;为 refresh_token 时不填。 | 4b203fe6c11548bcabd8da5bb087a83b |
refresh_token | 可选 | 刷新令牌,上次换取访问令牌时得到。本参数在 grant_type 为 authorization_code 时不填;为 refresh_token 时必填,且该值来源于此接口的返回值 app_refresh_token(即至少需要通过 grant_type=authorization_code 调用此接口一次才能获取)。 | 201208134b203fe6c11548bcabd8da5bb087a83b |
需要注意的是,auth_code是用户授权码,需要通过my.getAuthCodeAPI获取。
my.getAuthCode
实例如下:
my.getAuthCode({
scopes: 'auth_user',
success: (res) => {
my.alert({
content: res.authCode,
});
},
});
综上所述,支付宝小程序唤起支付以下步骤进行:
1、调用my.getAuthCodeAPI获取用户授权码authCode。
2、调用alipay.system.oauth.token接口,传入authCode以及其他必选参数获得user_id。
3、调用alipay.trade.create接口,传入user_id及其他必选参数获取tradeNO。
4、调用my.tradePayAPI发起支付,从而唤起支付宝支付功能。
开通会员以解锁全部内容
博客作者 也无风雨丶
前往答题