codecamp

支付宝小程序API 小程序唤起支付

my.tradePay

发起支付。

相关问题请参见下文 小程序支付 / 资金授权 FAQ 。

注意:此 API 暂仅支持企业支付宝账户使用。

扫码体验

小程序唤起支付.jpeg

示例代码

小程序支付

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 回调。

image

资金授权冻结接口无法调起支付,如何处理?

可能原因:

  • 服务端回传的 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,只要交易号合法,既可以 。

支付宝小程序API 用户授权
支付宝小程序API 周期扣款
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

支付宝小程序开发文档

支付宝小程序 快速示例

支付宝小程序 小程序快速示例

支付宝小程序 框架

支付宝小程序 组件

支付宝小程序组件 基础组件

支付宝小程序组件 无障碍访问

支付宝小程序 扩展组件

支付宝小程序扩展组件 UI组件

支付宝小程序 API

支付宝小程序 开发工具

支付宝小程序 云服务

支付宝小程序 Serverless

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }