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

2020-09-16 15:50 更新

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,只要交易号合法,既可以 。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号