开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
基础 api
开放能力 api
支付
用户授权
会员
周期扣款
商家会员卡
消息
模板配置
支付宝卡包
交易组件
小程序商品
开发 > api > 开放能力 api > 支付 > my.tradepay
评论 (9)
收藏
我的文档
设置

my.tradepay(object object)

已接入此 api 的开发者请注意:如果接入时绑定的产品是 当面付支付宝预授权,需参照 升级指南 尽快完成升级。自 2024 年 3 月 1 日起,未升级到新的支付产品(jsapi 支付预授权支付)的小程序相关发版、收款等功能将受到影响,且无法享受专为小程序制定的新增激励政策和公域推广等权益,详见 。

主体: 企业支付宝小程序

发起支付。

可用于 jsapi 支付预授权支付

  • jsapi 支付:唤起收银台进行支付,目前支持花呗分期支付,不支持扫码、条码、声波付等方式支付。
  • 预授权支付:冻结用户一定资金作为押金,后续按实际消费金额从用户冻结资金中扣除给商家,剩余金额解冻最终再返还给用户。

效果示例

jsapi 支付 预授权支付 效果示例

默认标题0

默认标题1

jsapi 支付

为了确保准确接入“jsapi 支付”的能力, 需要按照 开发设置 > 产品开通 > 绑定商家账号 > 获取交易号 > 唤起收银台 > 判断支付是否成功 的流程接入。
1
开发设置 开放平台
2
产品开通 商家平台
3
绑定商家账号 开放平台
4
获取交易号 服务端
5
唤起收银台 小程序
6
判断支付是否成功 服务端

是否必须: 是。

使用 主账号 登录 ,选择当前开发的小程序,根据下面的说明进行相关开发配置:

  • 接口加签方式:必填;

  • 应用网关:必填;

  • 支付宝网关:必填;

  • 接口内容加密方式:选填,建议配置;

  • 服务器 ip 白名单:选填,涉及到敏感操作时建议配置;

具体可参考文档 开发设置

是否必须: 是。

需要在 列表中,为当前小程序开通 jsapi 支付 产品。具体可参考文档 接入准备

是否必须: 是。

需要将应用和支付宝商家平台账号绑定,应用才可调用需要商家开通的产品,具体步骤可查看 绑定应用

是否必须: 是。

需要调用服务端接口 统一收单交易创建接口(alipay.trade.create),获取支付宝交易号,具体如何引用参考下方步骤:

  1. 下载服务端 sdk,请下载对应语言版本的最新版 服务端 sdk 并引入开发工程。

  2. 在 sdk 调用具体的接口前需要进行 alipayclient 对象初始化。alipayclient 对象只需要初始化一次,后续调用不同的接口都可以使用同一个 alipayclient 对象。具体可参考文档 接口调用配置

  3. 通过服务端调用 统一收单交易创建接口(alipay.trade.create)获取 trade_no,此值即作为 tradeno 的取值,具体可参考文档 创建交易订单

是否必须: 是。

将上一步调用服务端接口获取到的 交易号(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 不作为支付成功的可靠判断依据。

预授权支付

为了确保准确接入“预授权支付”的能力, 需要按照 开发设置 > 产品开通 > 绑定商家账号 > 生成资金冻结订单 > 唤起冻结页 > 冻结转支付/冻结转解冻 的流程接入。
1
开发设置 开放平台
2
产品开通 商家平台
3
绑定商家账号 开放平台
4
生成资金冻结订单 服务端
5
唤起冻结页 小程序 服务端
6
冻结转支付/冻结转解冻 服务端

是否必须: 是。

使用 主账号 登录 ,选择当前开发的小程序,根据下面的说明进行相关开发配置:

  • 接口加签方式:必填;

  • 应用网关:必填;

  • 支付宝网关:必填;

  • 接口内容加密方式:选填,建议配置;

  • 服务器 ip 白名单:选填,涉及到敏感操作时建议配置;

具体可参考文档 开发设置

是否必须: 是。

描述: 需要在 列表中,为当前小程序开通 预授权支付 产品。具体可参考文档 接入准备

是否必须: 是。

需要将应用和支付宝商家平台账号绑定,应用才可调用需要商家开通的产品,具体步骤可查看 绑定应用

是否必须: 是。

需要调用服务端接口 线上资金授权冻结接口(alipay.fund.auth.order.app.freeze) 生成资金冻结订单,具体如何引用参考下方步骤:

  1. 下载服务端 sdk,请下载对应语言版本的最新版 服务端 sdk 并引入开发工程。

  2. 在 sdk 调用具体的接口前需要进行 alipayclient 对象初始化。alipayclient 对象只需要初始化一次,后续调用不同的接口都可以使用同一个 alipayclient 对象。具体可参考文档 接口调用配置

  3. 通过服务端调用 线上资金授权冻结接口(alipay.fund.auth.order.app.freeze)获取 orderstr,具体可参考文档 生成资金冻结订单

是否必须: 是。

唤起预授权冻结流程。将上一步调用服务端接口获取到的 预授权参数 传递给前端,作为入参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 -

支付宝交易号,注意 参数有大小写区分
接入 jsapi 支付 时传入此参数,且必须传入,如何获取交易号参考本文接入流程 jsapi 支付 中第四步骤

orderstr string -

预授权参数,完整的支付参数拼接成的字符串。
接入 预授权支付 时传入此参数,且必须传入,如何获取预授权参数参考本文接入流程 预授权支付 中第四步骤

success function -

调用成功的回调函数

fail function -

调用失败的回调函数

complete function -

调用结束的回调函数(调用成功、失败都会执行)

success 回调函数

参数

object res

属性 类型 描述
resultcode string

支付结果码

枚举值 描述 兼容性
4

无权限调用(n22104)。
凯发app官方网站的解决方案::个人小程序应用没有开放 jsapi 支付能力,更换为企业小程序

-
4000

订单处理失败。
凯发app官方网站的解决方案:接入 jsapi 支付 tradeno 时必填,接入 预授权支付产品时 orderstr 必填,二选一。建议从以下几个方面进行排查:
jsapi 支付:

  • 检查入参字段 tradeno 是否编写正确,'no' 都是大写
  • tradeno 的入参数据是 alipay.trade.create(统一收单交易创建接口)返回的 'trade_no',不是 'out_trade_no'
预授权支付:
  • orderstr 是否有传入。
  • alipay.fund.auth.order.app.freeze(线上资金授权冻结接口)的参数有误,导致通过 response.sdkexecute(request) 方法获取到的 orderstr 参数有问题,检查入参字段和数据是否符合接口要求,建议只传必传参数测试,避免其它参数干扰
-
6001

支付未完成。
凯发app官方网站的解决方案:

  • 用户中途取消签约 / 支付,请用户重新签约 / 支付。
  • 检查 tradeno 的值是否正常,此值为 alipay.trade.create(统一收单交易创建接口)返回的 trade_no参数值
  • alipay.trade.create(统一收单交易创建接口)在小程序场景中 buyer_id (2088 开头)参数为必填,且此参数值必须和前端唤起支付的支付宝 uid 账号一致
-
6002

网络连接出错。
凯发app官方网站的解决方案:检查网络连接后重试

-
6004

处理结果未知(有可能已经成功)。
凯发app官方网站的解决方案:可调用 alipay.trade.query(统一收单交易查询接口),通过商家网站唯一订单号 out_trade_no 或支付宝交易号 trade_no 查询商户订单列表中订单的支付状态,以查询接口实际返回的支付状态为准

-
8000

正在处理中。支付结果未知(有可能已经支付成功)。
凯发app官方网站的解决方案:可调用 alipay.trade.query(统一收单交易查询接口),通过商家网站唯一订单号 out_trade_no 或支付宝交易号 trade_no 查询商户订单列表中订单的支付状态,以查询接口实际返回的支付状态为准

-
9000

订单处理成功。
凯发app官方网站的解决方案:不建议根据 my.tradepay 接口同步返回判断是否支付成功,9000不能判定就是支付成功。可以通过在调用 alipay.trade.create(统一收单交易创建接口)接口时设置 异步通知 notify_url 来获得支付宝服务端返回的支付结果,当异步通知中返回的 trade_status(交易状态)为 trade_success 时,表示支付成功,以此结果为准

-
jsapi 支付
预授权支付
tradeno 参数示例
orderstr 参数示例
支付成功结果
支付失败结果
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 页面拉起支付吗?

a:

不支持外跳。可考虑使用 web-view 展示 h5 页面,在 h5 页面中使用 my.tradepay 来实现调起支付功能,参考 此文档

q:小程序唤起支付可以支付其它 appid 或者 pid 的订单吗?

a:

小程序 my.tradepay 接口不会限制创建 tradeno 交易号参数的应用 appid,只要交易号合法即可。

内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图