支付宝小程序API 小程序唤起支付
my.tradePay
发起支付。
相关问题请参见下文 小程序支付 / 资金授权 FAQ 。
注意:此 API 暂仅支持企业支付宝账户使用。
扫码体验
示例代码
小程序支付
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),
});
}
});
资金授权
my.tradePay({
// 调用资金冻结接口(alipay.fund.auth.order.app.freeze),获取资金授权参数
orderStr: 'alipay_sdk=alipay-sdk-java-3.0.118.DEV&app_id=2018112803019836&biz_content=%7B%22amount%22%3A%220.02%22%2C%22extra_param%22%3A%22%7B\%22category\%22%3A\%22CHARGE_PILE_CAR\%22%7D%22%2C%22order_title%22%3A%22%D6%A7%B8%B6%B1%A6%D4%A4%CA%DA%C8%A8%22%2C%22out_order_no%22%3A%22ZMOutOrderNoAppFreeze2018052915543415090975%22%2C%22out_request_no%22%3A%22ZMOutReqNoAppFreeze20180529155434581875858%22%2C%22pay_timeout%22%3A%222d%22%2C%22payee_user_id%22%3A%222088202224929664%22%2C%22product_code%22%3A%22PRE_AUTH_ONLINE%22%7D&charset=GBK&format=json&method=alipay.fund.auth.order.app.freeze&sign=L4wk%2FNKcbJOo3n6Q5qbPzn0jUsvZlK4jr7iXnghudR0zeWJMmeNC71qIBSQfIz45n%2B5iTd0NQ5IK581xI2xCShTCiKAywnQcDmA%2Bjf%2BrRdKCDQCMLfCz%2BZ37C%2B6zxAX3e81%2F8Hr29lw4VPFfHkp9FmMwKw%2FGkNfV5ZlWoh7UtN8%3D&sign_type=RSA×tamp=2018-05-29+15%3A54%3A35&version=1.0',
success: (res) => {
my.alert({
content: JSON.stringify(res),
});
},
fail: (res) => {
my.alert({
content: JSON.stringify(res),
});
}
});
入参
Object 类型,属性如下:
属性 | 类型 | 必填 | 描述 |
---|---|---|---|
tradeNO | String | 否(调用小程序支付 时必填) | 接入小程序支付时传入此参数。此参数为支付宝交易号,注意参数有大小写区分。 |
orderStr | String | 否(调用资金授权 时必填) | 完整的支付参数拼接成的字符串,从服务端获取。 |
success | Function | 否 | 调用成功的回调函数。 |
fail | Function | 否 | 调用失败的回调函数。 |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行)。 |
success 回调函数
入参为 String 类型,属性如下:
属性 | 类型 | 描述 |
---|---|---|
resultCode | String | 支付结果码,详见下表。 |
结果码
结果码 | 描述 | 解决方案 |
---|---|---|
4 | 无权限调用(N22104)。 | 个人小程序应用没有开放小程序支付能力。 |
9000 | 订单处理成功。 | 不建议根据 my.tradePay 接口同步返回判断是否支付成功,9000 不能判定就是支付成功,请以异步通知(notify_url)返回的 trade_status(交易状态)为 TRADE_SUCCESS + alipay.trade.query 接口查询订单是否支付成功实际返回的支付状态为准。 |
8000 | 正在处理中。支付结果未知(有可能已经支付成功)。 | 请调用 alipay.trade.query 接口查询商户订单列表中订单的支付状态,以查询接口实际返回的支付状态为准。 |
4000 | 订单处理失败。 | tradeNO 调用小程序支付时必填,orderStr 调用资金授权时必填,二选一。根据具体接入开放能力选择参数。小程序支付时:检查入参字段 tradeNO 是否编写正确,"NO"都是大写。tradeNO 的入参数据是 alipay.trade.create 接口返回的 “trade_no”,不是 “out_trade_no”。资金授权时:orderStr 必填。alipay.fund.auth.order.app.freeze 接口的参数有误,导致通过 response.sdkExcute(request) 方法获取到的orderStr 参数有问题,检查入参字段和数据是否符合接口要求,建议只传必传参数测试,避免其他参数干扰。 |
6001 | 用户中途取消。 | 请用户重新签约 / 支付。检查 tradeNO 的入参是否为正常入参,参数数据为 alipay.trade.create 接口返回的“trade_no”alipay.trade.create 接口在小程序场景中buyer_id 参数必填,且入参的 buyer_id(用户 user_id,2088 开头)必须和前端唤起支付的支付宝账号一致。 |
6002 | 网络连接出错。 | 检查网络连接后重试。 |
6004 | 处理结果未知(有可能已经成功)。 | 请调用 alipay.trade.query 接口查询商户订单列表中订单的支付状态,以查询接口实际返回的支付状态为准。 |
小程序支付 / 资金授权 FAQ
资金授权场景下,在 IDE 上调用 my.tradePay 报错 “error 2:无效API入参”,如何处理?
IDE 模拟器调用 my.tradePay 后会生成一个支付二维码(有效时间10分钟),开发者在支付宝客户端扫码支付,支付结果会同步 my.tradePay 回调。
资金授权冻结接口无法调起支付,如何处理?
可能原因:
- 服务端回传的 tradeNO 出错,导致传入 my.tradePay 的 tradeNO 参数错误。
- 资金授权无法在 IDE 模拟器中进行测试。
解决方案:
\1. 请参考资金授权文档 接入指引 > 第五步:调用接口 > 线上资金预授权冻结,获取用于小程序支付的 orderStr 参数。
\2. 将获得的 orderStr 参数传入 my.tradePay 中(设置为固定值),并在真机上进行测试。
资金授权时,支付宝预授权报错”订单异常 ALIN42683”,如何处理?
报错原因:
OutOrderNo 和 OutRequestNo 重复请求。(OutOrderNo 和 OutRequestNo)
解决方案:
\1. 确保 OutOrderNo 和 OutRequestNo 入参在商家系统中唯一 (只传入OutOrderNo 或只传入 OutRequestNo)。
\2. 检查参数是否按照线上资金授权冻结要求设置,建议只传必传参数测试,避免其他参数干扰。
小程序支付无法调起支付,如何处理?
可能原因:
- 传入 my.tradePay 的 tradeNO 参数错误,导致服务端回传的 tradeNO 出错。
- 小程序支付无法在 IDE 模拟器中进行测试。
解决方案:
\1. 在服务端调用 alipay.trade.create (统一收单交易创建接口),获得支付宝交易号 tradeNO。
注意:
在小程序场景内 alipay.trade.create 接口中的 buyer_id 为必填项,若未传入,则调试报错。推荐使用开放平台提供的 服务端 SDK ,并参考以下示例代码(以 Java 代码为例)进行编写。
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.create.
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。
request.setBizContent("{" +
"\"out_trade_no\":\"20171115010101001\"," +
"\"total_amount\":0.01," +
"\"subject\":\"Iphone616G\"," +
"\"buyer_id\":\"用户pid\"" +
"}");
try {
//使用的是execute
AlipayTradeCreateResponse response = alipayClient.execute(request);
String trade_no = response.getTradeNo();//获取返回的tradeNO。
} catch (AlipayApiException e) {
e.printStackTrace();
}
\2. 将获得的 tradeNO 参数传入 my.tradePay 中(设置为固定值),并在真机上进行测试。
小程序唤起支付可以支付其他 APPID 或者 PID 的订单吗?
小程序 my.tradePay 接口不会限制创建 tradeNO 交易号参数的应用 APPID,只要交易号合法,既可以 。