my.tradepay(object object)
已接入此 api 的开发者请注意:如果接入时绑定的产品是 当面付
或 支付宝预授权
,需参照 升级指南 尽快完成升级。自 2024 年 3 月 1 日起,未升级到新的支付产品(jsapi 支付、预授权支付)的小程序相关发版、收款等功能将受到影响,且无法享受专为小程序制定的新增激励政策和公域推广等权益,详见 。
主体: 企业支付宝小程序
相关文档: jsapi 支付 、 预授权支付 、 jsapi 支付 常见问题 、 预授权支付 常见问题
发起支付。
效果示例
默认标题0
默认标题1
jsapi 支付
是否必须: 是。
使用 主账号 登录 ,选择当前开发的小程序,根据下面的说明进行相关开发配置:
-
接口加签方式:必填;
-
应用网关:必填;
-
支付宝网关:必填;
-
接口内容加密方式:选填,建议配置;
-
服务器 ip 白名单:选填,涉及到敏感操作时建议配置;
具体可参考文档 开发设置。
是否必须: 是。
需要在 列表中,为当前小程序开通 jsapi 支付 产品。具体可参考文档 接入准备。
是否必须: 是。
需要将应用和支付宝商家平台账号绑定,应用才可调用需要商家开通的产品,具体步骤可查看 绑定应用。
是否必须: 是。
需要调用服务端接口 统一收单交易创建接口(alipay.trade.create),获取支付宝交易号,具体如何引用参考下方步骤:
是否必须: 是。
将上一步调用服务端接口获取到的 交易号(trade_no)传递给前端,作为入参tradeno
的值,调用 my.tradepay
接口唤起收银台进行支付。
是否必须: 否。
可以通过在服务端接收异步通知或者接口查询订单状态判断支付是否成功,具体如何操作如下:
-
接收异步通知:商家服务端在调用 alipay.trade.create 接口时设置异步通知(notify_url)来获得支付宝服务端返回的支付结果,当异步通知中返回的 trade_status(交易状态)为 trade_success 时,表示支付成功,可参考 此文档。
-
接口查询订单状态:可调用 alipay.trade.query(统一收单交易查询接口),通过商家网站唯一订单号 out_trade_no 或支付宝交易号 trade_no 查询商户订单列表中订单的支付状态。
注意:my.tradepay 回调中的结果码 9000 不作为支付成功的可靠判断依据。
预授权支付
是否必须: 是。
使用 主账号 登录 ,选择当前开发的小程序,根据下面的说明进行相关开发配置:
-
接口加签方式:必填;
-
应用网关:必填;
-
支付宝网关:必填;
-
接口内容加密方式:选填,建议配置;
-
服务器 ip 白名单:选填,涉及到敏感操作时建议配置;
具体可参考文档 开发设置。
是否必须: 是。
描述: 需要在 列表中,为当前小程序开通 预授权支付 产品。具体可参考文档 接入准备。
是否必须: 是。
需要将应用和支付宝商家平台账号绑定,应用才可调用需要商家开通的产品,具体步骤可查看 绑定应用。
是否必须: 是。
需要调用服务端接口 线上资金授权冻结接口(alipay.fund.auth.order.app.freeze) 生成资金冻结订单,具体如何引用参考下方步骤:
是否必须: 是。
唤起预授权冻结流程。将上一步调用服务端接口获取到的 预授权参数 传递给前端,作为入参orderstr
的值,在小程序中调用 my.tradepay
接口唤起支付宝收银台,等待用户授权。
查询用户授权状态有以下两种方法:
-
服务端通过在调用 alipay.fund.auth.order.app.freeze(线上资金授权冻结接口)时传入的 notify_url 主动以 post 的方式推送给商户,具体参考 授权异步通知。
-
如果没有收到异步通知,也可以通过服务端调用 alipay.fund.auth.operation.detail.query(资金授权操作查询接口)每隔 5 秒钟查询一次授权冻结的状态,如依然是用户授权中,则再等待 5 秒钟继续使用查询接口查询,直至 1 分钟后超时(推荐每隔 5 秒查询一次,共进行 12 次查询,具体根据商家业务情况决定),具体参考 唤起冻结注意事项。
是否必须: 是。
当商家获得用户授权完成 线上资金冻结场景 操作后:
-
如果业务场景需要用户进行支付,而并不只是冻结押金,服务结束后,则需要调用 alipay.trade.pay(统一收单交易支付接口)完成扣款操作,具体参考 资金冻结转支付场景。
-
如果业务场景不需要用户进行支付,服务结束后:
-
商户主动进行资金解冻。商家可通过 alipay.fund.auth.order.unfreeze(资金授权解冻接口)将授权资金进行解冻,支付宝将在收到解冻请求并验证成功后,按解冻规则将冻结资金按原路进行解冻并返回,具体请参考 资金授权解冻;
-
也可以等待系统协议约定到期,系统会自动进行资金解冻。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 描述 |
---|---|---|---|---|
tradeno | string | - | 否 | 支付宝交易号,注意 参数有大小写区分。 |
orderstr | string | - | 否 | 预授权参数,完整的支付参数拼接成的字符串。 |
success | function | - | 否 | 调用成功的回调函数 |
fail | function | - | 否 | 调用失败的回调函数 |
complete | function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
success 回调函数
参数
object res
属性 | 类型 | 描述 | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
resultcode | string | 支付结果码 |
|||||||||||||||||||||||||
|
my.tradepay ({
// 调用统一收单交易创建接口(alipay.trade.create),获得返回字段支付宝交易号 trade_no
tradeno: '201711152100110410533667792',
success: res => {
my.alert ({
content: json.stringify (res),
});
},
fail: error => {
console.error('调用 my.tradepay 失败: ', json.stringify(error));
},
});
my.tradepay ({
// 调用资金冻结接口(alipay.fund.auth.order.app.freeze),获取支付宝预授权参数
orderstr: 'alipay_sdk=alipay-sdk-java-3.0.118.dev&app_id=2018112803019836&biz_content={"amount":"0.02","extra_param":"{\"category\":\"charge_pile_car\"}","order_title":"֧����Ԥ��ȩ","out_order_no":"zmoutordernoappfreeze2018052915543415090975","out_request_no":"zmoutreqnoappfreeze20180529155434581875858","pay_timeout":"2d","payee_user_id":"2088202224929664","product_code":"pre_auth_online"}&charset=gbk&format=json&method=alipay.fund.auth.order.app.freeze&sign=l4wk/nkcbjoo3n6q5qbpzn0jusvzlk4jr7ixnghudr0zewjmmenc71qibsqfiz45n+5itd0nq5ik581xi2xcshtcikaywnqcdma+jf+rrdkcdqcmlfcz+z37c+6zxax3e81/8hr29lw4vpffhkp9fmmwkw/gknfv5zlwoh7utn8=&sign_type=rsa×tamp=2018-05-29 15:54:35&version=1.0',
success: res => {
my.alert ({
content: json.stringify (res),
});
},
fail: res => {
console.error('调用 my.tradepay 失败: ', json.stringify(error));
},
});
{
"tradeno": "201711152100110410533667792"
}
{
"orderstr": "alipay_sdk=alipay-sdk-java-3.0.118.dev&app_id=2018112803019836&biz_content={"amount":"0.02","extra_param":"{\"category\":\"charge_pile_car\"}","order_title":"֧����Ԥ��ȩ","out_order_no":"zmoutordernoappfreeze2018052915543415090975","out_request_no":"zmoutreqnoappfreeze20180529155434581875858","pay_timeout":"2d","payee_user_id":"2088202224929664","product_code":"pre_auth_online"}&charset=gbk&format=json&method=alipay.fund.auth.order.app.freeze&sign=l4wk/nkcbjoo3n6q5qbpzn0jusvzlk4jr7ixnghudr0zewjmmenc71qibsqfiz45n+5itd0nq5ik581xi2xcshtcikaywnqcdma+jf+rrdkcdqcmlfcz+z37c+6zxax3e81/8hr29lw4vpffhkp9fmmwkw/gknfv5zlwoh7utn8=&sign_type=rsa×tamp=2018-05-29 15:54:35&version=1.0"
}
{
"tradeno": "2023062622001487971409984441",
"result": "partner=\"\"&biz_type=\"\"&biz_sub_type=\"\"&trade_no=\"2023062622001487971409984441\"&app_name=\"alipay\"&display_pay_result=\"true\"&appenv=\"appid=alipay^system=ios^version=10.3.80.6000\"&success=\"true\"",
"resultcode": "9000"
}
{
"resultcode": "6001",
"result": "",
"extendinfo": {},
"memo": "", // 此字段为非正式返回信息,建议使用 resultcode 处理提示信息。
"callbackurl": ""
}
q:小程序支持外跳 h5 页面拉起支付吗?
不支持外跳。可考虑使用 web-view 展示 h5 页面,在 h5 页面中使用 my.tradepay 来实现调起支付功能,参考 此文档。
q:小程序唤起支付可以支付其它 appid 或者 pid 的订单吗?
小程序 my.tradepay 接口不会限制创建 tradeno 交易号参数的应用 appid,只要交易号合法即可。