• 下载
  • 社区

小程序支付

产品介绍


在商家开发的小程序中,用户也可以唤起支付宝收银台进行支付。小程序支付和 APP 支付的支付流程与体验基本一致,小程序支付也支持核销口碑券和口碑商户优惠功能。已签约小程序支付或在口碑开店的商户建议接入小程序支付。

系统服务商可以通过代签约接口 alipay.open.agent.facetoface.sign 代替商家签约小程序支付。

小程序支付在小程序内不能通过扫码、条码、声波付等方式支付,只能唤起收银台进行支付;目前小程序支付还不支持免密支付。


小程序支付的使用流程如下:

  1. 用户在小程序中选择商品下单并确认购买,进入支付环节,用户点击确认支付;
  2. 进入到支付宝页面后,小程序唤起支付宝支付,出现支付界面;
  3. 用户确认收款方和金额,点击 立即付款 后进行支付;
  4. 输入正确支付密码后,显示支付成功页;

小程序支付.png


点击支付成功页右上角 完成 按钮,可跳转到自定义页面,开发者可根据付款结果个性化展示订单处理结果,如下图所示。(支持跳转到生活号页面,但仅允许跳转至与该小程序关联的生活号页面,更多跳转方式信息请参见 生活号客户端跳转链接。)


准入条件


  • 申请者必须拥有经过实名认证的支付宝账户;
  • 企业或个体工商户均可申请;
  • 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致;
  • 网站能正常访问且页面显示完整,网站需要明确经营内容且有完整的商品信息;
  • 网站必须通过 ICP 备案。如为个体工商户,网站备案主体需要与支付宝账户主体名称一致;如为个体工商户,则团购不开放,且古玩、珠宝等奢侈品、投资类行业无法申请本产品。


计费模式


费率按单笔计算。 一般行业费率:0.6%;特殊行业费率:1.2%,特殊行业范围包括:手机、通讯设备销售;家用电器;数码产品及配件;休闲游戏;网络游戏点卡、渠道代理;游戏系统商;网游周边服务、交易平台;网游运营商(含网页游戏)。


接入指引

第一步:创建小程序


要在您的小程序内使用小程序支付功能,您需要首先完成开发者入驻创建小程序


第二步:添加功能


小程序创建完成后,开发者在 功能列表 部分可以点击 添加功能 来给创建的小程序添加功能,如下图所示;开发者勾选 小程序支付 功能后,点击右下角 确定 即完成添加功能。



注意

第三方应用如果需要添加小程序支付功能,需要首先完成签约当面付功能。


第三步:签约功能


小程序支付需要签约才能生效,在小程序上线后,请点击功能列表右侧对应功能的 签约 链接;签约成功后,需要 1 个工作日左右的审批时间(审批结果会以短信和邮件形式告知),审批成功后,功能状态会变为“已生效”,即可调用小程序支付功能。


第四步:集成并配置 SDK


服务端 SDK 需要商户集成在自己的服务端系统中,用于后续的服务端接口调用。

下载服务端 SDK

为了帮助开发者调用开放接口,我们提供了开放平台服务端 SDK,包含 JAVA、PHP、NodeJS、Python 和 .NET 五种语言,封装了签名 & 验签、HTTP 接口请求等基础功能。请先下载对应语言版本的 SDK 并引入您的开发工程。

接口调用配置

在 SDK 调用前需要进行初始化,以 JAVA 代码为例:


AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);


关键参数说明:

配置参数示例值解释获取方式/示例值
URL支付宝网关(固定) https://openapi.alipay.com/gateway.do 
APPIDAPPID 即创建应用后生成获取见创建应用
APP_PRIVATE_KEY开发者私钥,由开发者自己生成获取见配置密钥
FORMAT参数返回格式,只支持 jsonjson(固定)
CHARSET编码集,支持 GBK/UTF-8开发者根据实际工程编码配置
ALIPAY_PUBLIC_KEY支付宝公钥,由支付宝生成获取详见配置密钥
SIGN_TYPE商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2RSA2


接下来,就可以用 alipayClient 来调用具体的 API 了。alipayClient 只需要初始化一次,后续调用不同的 API 都可以使用同一个 alipayClient 对象。


注意:

ISV /开发者可以通过第三方应用授权得到商户授权令牌(app_auth_token)作为请求参数传入,实现代商户发起请求的能力。


如果您在调用 API 时出现报错,您可以:

  • 公共错误码 中根据错误码的类型,查找相关错误码及解决方案;
  • 在 小蚂哥 问答页面直接输入您遇到的错误码;
  • 在技术支持 帮助中心 搜索相关错误码,找到解决方案。


第五步:调用接口


小程序支付调用流程如下图所示:

22.png


1.在小程序端调用 my.request 接口,连接到商户服务端。


my.request({
  url: '商户服务端地址',//须加httpRequest域白名单
  method: 'POST',
  data: {//data里的key、value是开发者自定义的
    from: '支付宝',
    order: 'XXXXX',//订单信息
  },
  dataType: 'json',
  success: function(res) {
    my.alert({content: 'success'});
  },
  fail: function(res) {
    my.alert({content: 'fail'});
  },
  complete: function(res) {
    my.hideLoading();
    my.alert({content: 'complete'});
  }
});


2.在服务端调用 alipay.trade.create (统一收单交易创建接口),获得支付宝交易号 tradeNO(以 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\"," +//可以随机生成订单号:String outTradeNo = UUID.randomUUID().toString().replace("-", "");
        "\"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();
}

buyer_id 是支付宝小程序授权登录成功后获取到的支付宝 user_id,获取方法可以参考 用户授权文档https://opendocs.alipay.com/mini/introduce/authcode

注意

在小程序场景内 alipay.trade.create 接口中的“buyer_id”为必填项,若未传入调式时会出现报错。推荐使用开放平台提供的服务端 SDK,并参考代码示例编写;点击下载开放平台服务端 SDK。具体业务参数请参考 API 文档。


3.在小程序端使用 tradeNO,调用 my.tradePay 接口唤起支付收银台。


my.tradePay({
        tradeNO: '2017111521001104105336677922',  
        success: function(res) {
            my.alert(res.resultCode);
        },
        fail: function(res) {
          my.alert(res.resultCode);
       },
    });


接入花呗分期说明


小程序支付目前支持花呗分期的付款方式。要在小程序支付中使用花呗分期付款,只需要开发者在 alipay.trade.create (统一收单交易创建接口接口)中传入对应的参数即可。小程序支持以下两种模式接入花呗分期。


标准收银台模式

支付宝标准收银台展示花呗分期渠道(仅支持用户承担手续费),无需额外签约花呗分期,且无需进行额外的花呗分期参数的透传开发工作,可以直接在支付宝标准收银台中展示出花呗分期渠道


单通道模式

商家可以根据需要,将花呗分期资金渠道前置或者与其他付款方式并列,实现花呗分期单通道模式该方式下,如果当前花呗分期渠道无法支付成功,则可以继续使用其他支付渠道进行付款。


开发者需要将花呗分期参数传入到 extend_params 中,格式如下:


"extend_params":{"hb_fq_num":"3","hb_fq_seller_percent":"100"}


  • hb_fq_num 代表花呗分期数,仅支持传入 3、6、12,其他期数暂不支持,传入会报错;
  • hb_fq_seller_percent 代表卖家承担收费比例,商家承担手续费传入 100,用户承担手续费传入 0,仅支持传入 100、0 两种,其他比例暂不支持,传入会报错。


API 列表


接口名称

接口中文名称

alipay.trade.create

统一收单交易创建接口

my.tradePay

小程序唤起支付

my.request

向指定服务器发起一个跨域 http 请求

alipay.open.agent.facetoface.sign

代签约当面付接口(也适用于服务商代替商户签约小程序支付)


如果您在调用 API 时出现报错,您可以:

  • 公共错误码 中根据错误码的类型,查找相关错误码及解决方案;
  • 在 小蚂哥 问答页面直接输入您遇到的错误码;
  • 在技术支持 帮助中心 搜索相关错误码,找到解决方案。


异步通知


订单支付成功时,商户可以通过在 alipay.trade.create 接口中设置异步通知(notify_url)来获得支付宝服务端返回的支付结果,有关异步通知的问题可以参考 服务器异步通知参数说明


补充说明



常见问题


Q:在 IDE 上调用 my.tradePay 报错 “error2: 无效的 API入参”,如何处理?

A:my.tradePay 无法在 IDE 模拟器进行测试,只能在真机上测试,请以真机调试结果为准。


Q:小程序支付无法调起支付,如何处理?

A:可能原因如下:

  • 服务端回传的 tradeNO 出错,导致传入 my.tradePay 的  tradeNO 参数错误。
  • 小程序支付无法在 IDE 模拟器中进行测试。

解决方案:

1、在服务端调用  alipay.trade.create (统一收单交易创建接口),获得支付宝交易号 tradeNO(以 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 中(设置为固定值),并在真机上进行测试。