参考资料
练习题 icon lost
交流讨论
我的笔记
专栏课程

目录

my.tradePay

alipay.trade.create

公共请求参数

请求参数

alipay.system.oauth.token

公共请求参数

请求参数

my.getAuthCode


支付是小程序生态中的重要一环,但支付宝给出的文档确不够详细,大大增加了小程序的开发难度,本文旨在说明支付宝小程序唤起支付的详细过程,用以降低开发文档的阅读难度。

支付需要配置能力列表中的小程序支付能力和获取会员基础信息的能力。

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支付宝分配给开发者的应用ID2014072300007148
method接口名称alipay.trade.create
format仅支持JSONJSON
charset请求使用的编码格式,如utf-8,gbk,gb2312等utf-8
sign_type商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2RSA2
sign商户请求参数的签名串,详见签名详见示例
timestamp发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"2014-07-24 03:07:50
version调用的接口版本,固定为:1.01.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支付宝分配给开发者的应用ID2014072300007148
method接口名称alipay.system.oauth.token
format仅支持JSONJSON
charset请求使用的编码格式,如utf-8,gbk,gb2312等utf-8
sign_type商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2RSA2
sign商户请求参数的签名串,详见签名详见示例
timestamp发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"2014-07-24 03:07:50
version调用的接口版本,固定为:1.01.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发起支付,从而唤起支付宝支付功能。

资料来源 支付宝小程序唤起支付
博客作者 也无风雨丶
前往答题
发布见解