### Q:小程序支付如何实现多商家收款?
A:详情可查看 [小程序支付如何实现多商家收款](https://ideservice.alipay.com/cms/site/01rb0i)。
### Q:**JSAPI支付提示额度为 0 元?或提示收款额度受限?**
A:开通 JSAPI 支付时,若小程序未上架,收款额度将受到限制(单笔收款<=2000 元,单日收款<=20000 元),商家可通过完善开通页面对应信息解除限制,详情可查看 [如何进行支付产品资质补全以提升额度](https://ideservice.alipay.com/cms/site/06fioz?pathHash=6443a545)。
### Q:**JSAPI支付 开通审核时效?**
A:提交开通或补齐资料申请后 1 个工作日内返回审核结果。
### Q:“当面付”和“JSAPI支付”有什么区别?
A:**当面付** 是一款可以在多个场景收款的产品,**JSAPI支付** 是专门用于小程序场景收款的产品,两者关系如下:

### Q:我的小程序已接入过当面付,如何快速切换到JSAPI支付?
A:小程序场景中,**JSAPI支付** 使用的接口,和当面付使用的接口一样,区别在于两点:
- 区别一:**JSAPI支付** 使用的产品码不一样,需要注意更换 product_code 的参数,从 FACE_TO_FACE_PAYMENT 变更为 JSAPI_PAY。
- 区别二:**JSAPI支付** 增加了一个必传字段,op_app_id。该字段指商户在小程序中,拉起收银台支付时的小程序应用的 APPID。开通 **JSAPI支付** 产品后,需在 **商家平台** > **产品中心** > **支付产品** >[JSAPI支付 产品详情页面](https://b.alipay.com/page/product-mall/product-detail/I1080300001000060370) 关联对应的小程序 APPID,否则下单会失败。
- 区别三:当商家需要在 [商家平台](http://b.alipay.com) > **数据中心**(入口1:**数据中心 **>** 交易中心 **>** 小程序交易**;入口2:**数据中心 **> **小程序分析 **>** 交易**)中查看对应业务场景下的数据明细时,可以通过 business_params 对象的 tiny_app_merchant_biz_type 指定业务场景值,支持传入的值详见:[小程序细分业务场景](https://ideservice.alipay.com/cms/site/08by8k?pathHash=96e03412)。
**注意**:请勿修改 **当面付 **产品的其它接口,仅需修改 alipay.trade.create(统一收单交易创建接口),即可升级为 **JSAPI支付**。
| **序号** | **接入流程** | **使用的接口** | **当面付** | **JSAPI支付** |
| --- | --- | --- | --- | --- |
| 1 | 发送订单信息 | [my.request](https://ideservice.alipay.com/cms/site/039t0k) | - | 无变化 |
| 2 | 创建交易订单 | alipay.trade.create(统一收单交易创建接口) | product_code:FACE_TO_FACE_PAYMENT |
- product_code:JSAPI_PAY
- 新增字段:op_app_id(小程序支付中,商户实际经营主体的小程序应用的 APPID,指在小程序中,拉起收银台支付时的小程序应用的 APPID)
|
| 3 | 唤起收银台支付 | my.tradePay(发起支付) | 无限制 | 必须调用 my.tradePay(发起支付)接口才能唤起收银台 |
| 4 | 异步通知 | 在 alipay.trade.create(统一收单交易创建接口) 设置异步通知(notify_url) | - | 无变化 |
| 5 | 交易辅助(查询、退款、撤销、关闭) | alipay.trade.query(统一收单交易查询接口)
alipay.trade.refund(统一收单交易退款接口)
alipay.trade.cancel(统一收单交易撤销接口)
alipay.trade.close(统一收单交易关闭接口) | - | 无变化 |
### Q:在 IDE 上调用 my.tradePay 报错 “error2: 无效的 API 入参”,如何处理?
A:目前 IDE 模拟器调用 my.tradePay 后会生成一个支付二维码(有效时间 10 分钟),开发者在支付宝客户端扫码支付,支付结果会同步 my.tradePay 回调。

### Q:小程序支付无法调起支付,如何处理?
A:
**可能原因**
- 服务端回传的 tradeNO 出错,导致传入 my.tradePay 的 tradeNO 参数错误。
- 小程序支付无法在 IDE 模拟器中进行测试。
**解决方案**
1. 在服务端调用 alipay.trade.create(统一收单交易创建接口),获得支付宝交易号 tradeNO(以 Java 代码为例)。
```java
package com.java.sdk.demo;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.response.AlipayTradeCreateResponse;
import com.alipay.api.domain.SignParams;
import com.alipay.api.domain.PeriodRuleParams;
import com.alipay.api.domain.ReceiverAddressInfo;
import com.alipay.api.domain.AccessParams;
import com.alipay.api.request.AlipayTradeCreateRequest;
import com.alipay.api.domain.SignMerchantParams;
import com.alipay.api.domain.SettleInfo;
import com.alipay.api.domain.LogisticsDetail;
import com.alipay.api.domain.ExtendParams;
import com.alipay.api.domain.GoodsDetail;
import com.alipay.api.domain.BusinessParams;
import com.alipay.api.domain.SceneRuleParams;
import com.alipay.api.domain.OpenApiSpecifiedChannelParamsPojo;
import com.alipay.api.domain.SettleDetailInfo;
import com.alipay.api.domain.AlipayTradeCreateModel;
import com.alipay.api.domain.BkAgentReqInfo;
import com.alipay.api.FileItem;
import java.util.Base64;
import java.util.ArrayList;
import java.util.List;
public class AlipayTradeCreate {
public static void main(String[] args) throws AlipayApiException {
// 初始化SDK
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
// 构造请求参数以调用接口
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
AlipayTradeCreateModel model = new AlipayTradeCreateModel();
// 设置商户订单号
model.setOutTradeNo("20150320010101001");
// 设置订单总金额
model.setTotalAmount("88.88");
// 设置订单标题
model.setSubject("Iphone6 16G");
// 设置产品码
model.setProductCode("FACE_TO_FACE_PAYMENT");
// 设置卖家支付宝用户ID
model.setSellerId("2088102146225135");
// uid参数未来计划废弃,存量商户可继续使用,新商户请使用openid。请根据应用-开发配置-openid配置选择支持的字段。
// model.setBuyerId("2088102146225135");
// 设置买家支付宝用户唯一标识
model.setBuyerOpenId("074a1CcTG1LelxKe4xQC0zgNdId0nxi95b5lsNpazWYoCo5");
// 设置小程序支付中
model.setOpAppId("2014072300007148");
// 设置订单附加信息
model.setBody("Iphone6 16G");
// 设置订单包含的商品列表信息
List goodsDetail = new ArrayList();
GoodsDetail goodsDetail0 = new GoodsDetail();
goodsDetail0.setOutSkuId("outSku_01");
goodsDetail0.setGoodsName("ipad");
goodsDetail0.setQuantity(1L);
goodsDetail0.setPrice("2000");
goodsDetail0.setOutItemId("outItem_01");
goodsDetail0.setGoodsId("apple-01");
goodsDetail0.setGoodsCategory("34543238");
goodsDetail0.setCategoriesTree("124868003|126232002|126252004");
goodsDetail0.setShowUrl("http://www.alipay.com/xxx.jpg");
goodsDetail.add(goodsDetail0);
model.setGoodsDetail(goodsDetail);
// 设置订单绝对超时时间
model.setTimeExpire("2021-12-31 10:05:00");
// 设置订单相对超时时间
model.setTimeoutExpress("90m");
// 设置描述结算信息
SettleInfo settleInfo = new SettleInfo();
settleInfo.setSettlePeriodTime("7d");
List settleDetailInfos = new ArrayList();
SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo();
settleDetailInfos0.setAmount("0.1");
settleDetailInfos0.setTransIn("A0001");
settleDetailInfos0.setSettleEntityType("SecondMerchant");
settleDetailInfos0.setSummaryDimension("A0001");
settleDetailInfos0.setActualAmount("0.1");
settleDetailInfos0.setSettleEntityId("2088xxxxx;ST_0001");
settleDetailInfos0.setTransInType("cardAliasNo");
settleDetailInfos.add(settleDetailInfos0);
settleInfo.setSettleDetailInfos(settleDetailInfos);
model.setSettleInfo(settleInfo);
// 设置业务扩展参数
ExtendParams extendParams = new ExtendParams();
extendParams.setSysServiceProviderId("2088511833207846");
extendParams.setTcInstallmentOrderId("2015042321001004720200028594");
extendParams.setSpecifiedSellerName("XXX的跨境小铺");
extendParams.setRoyaltyFreeze("true");
extendParams.setCardType("S0JP0000");
extendParams.setCreditExtInfo("{\"category\":\"CHARGE_PILE_CAR\",\"serviceId\":\"2020042800000000000001450466\"}");
extendParams.setTradeComponentOrderId("2023060801502300000008810000005657");
model.setExtendParams(extendParams);
// 设置商户传入业务信息
BusinessParams businessParams = new BusinessParams();
businessParams.setGoodTaxes("10.00");
businessParams.setEnterprisePayInfo("{\"category_list\":[{\"price\":\"10.24\",\"name\":\"餐饮服务\",\"category\":\"3070401000000000000\"}]}");
businessParams.setActualOrderTime("2019-05-14 09:18:55");
businessParams.setPriorityUnfreezeAsset("CREDIT_ASSET");
businessParams.setCampusCard("0000306634");
businessParams.setCardType("T0HK0000");
businessParams.setEnterprisePayAmount("10.00");
businessParams.setTinyAppMerchantBizType("KX_SHOPPING");
businessParams.setMcCreateTradeIp("127.0.0.1");
model.setBusinessParams(businessParams);
// 设置可打折金额
model.setDiscountableAmount("80.00");
// 设置不可打折金额
model.setUndiscountableAmount("8.88");
// 设置商户门店编号
model.setStoreId("NJ_001");
// 设置商户操作员编号
model.setOperatorId("Yx_001");
// 设置商户机具终端编号
model.setTerminalId("NJ_T_001");
// 设置物流信息
LogisticsDetail logisticsDetail = new LogisticsDetail();
logisticsDetail.setLogisticsType("EXPRESS");
model.setLogisticsDetail(logisticsDetail);
// 设置收货人及地址信息
ReceiverAddressInfo receiverAddressInfo = new ReceiverAddressInfo();
receiverAddressInfo.setZip("200120");
receiverAddressInfo.setAddress("上海市浦东新区陆家嘴银城中路501号");
receiverAddressInfo.setName("张三");
receiverAddressInfo.setMobile("13120180615");
receiverAddressInfo.setDivisionCode("310115");
model.setReceiverAddressInfo(receiverAddressInfo);
// 设置返回参数选项
List queryOptions = new ArrayList();
queryOptions.add("enterprise_pay_info");
queryOptions.add("hyb_amount");
model.setQueryOptions(queryOptions);
// 设置间联交易下
BkAgentReqInfo bkagentReqInfo = new BkAgentReqInfo();
bkagentReqInfo.setMerchCode("123412341234");
bkagentReqInfo.setAcqCode("12345678901234");
bkagentReqInfo.setDeviceType("02");
bkagentReqInfo.setLocation("+37.28/-121.268");
bkagentReqInfo.setSerialNum("123123123123");
model.setBkagentReqInfo(bkagentReqInfo);
// 设置签约参数
SignParams agreementSignParams = new SignParams();
SignMerchantParams subMerchant = new SignMerchantParams();
subMerchant.setSubMerchantName("滴滴出行");
subMerchant.setSubMerchantServiceName("滴滴出行免密支付");
subMerchant.setSubMerchantServiceDescription("免密付车费,单次最高500");
subMerchant.setSubMerchantId("2088123412341234");
agreementSignParams.setSubMerchant(subMerchant);
AccessParams accessParams = new AccessParams();
accessParams.setChannel("ALIPAYAPP");
agreementSignParams.setAccessParams(accessParams);
PeriodRuleParams periodRuleParams = new PeriodRuleParams();
periodRuleParams.setPeriod(3L);
periodRuleParams.setTotalAmount("600.00");
periodRuleParams.setExecuteTime("2019-01-23");
periodRuleParams.setSingleAmount("10.99");
periodRuleParams.setTotalPayments(12L);
SceneRuleParams sceneRuleParams = new SceneRuleParams();
sceneRuleParams.setDiscountPeriod("1");
sceneRuleParams.setLowPricePeriod("2");
periodRuleParams.setSceneRuleParams(sceneRuleParams);
periodRuleParams.setPeriodType("DAY");
agreementSignParams.setPeriodRuleParams(periodRuleParams);
agreementSignParams.setSignNotifyUrl("http://www.merchant.com/receiveSignNotify");
List recommendSortChannelParams = new ArrayList();
OpenApiSpecifiedChannelParamsPojo recommendSortChannelParams0 = new OpenApiSpecifiedChannelParamsPojo();
recommendSortChannelParams0.setAssetTypeCode("ALICREDIT");
recommendSortChannelParams0.setInstId("INST_ALIPAY");
recommendSortChannelParams.add(recommendSortChannelParams0);
agreementSignParams.setRecommendSortChannelParams(recommendSortChannelParams);
agreementSignParams.setExternalLogonId("13888888888");
agreementSignParams.setPersonalProductCode("CYCLE_PAY_AUTH_P");
agreementSignParams.setExternalAgreementNo("test20190701");
agreementSignParams.setProductCode("GENERAL_WITHHOLDING");
agreementSignParams.setAllowHuazhiDegrade(false);
agreementSignParams.setSignScene("INDUSTRY|DIGITAL_MEDIA");
agreementSignParams.setEffectTime("600");
model.setAgreementSignParams(agreementSignParams);
// 设置买家支付宝用户唯一标识(商户实际经营主体的小程序应用关联的买家open_id)
model.setOpBuyerOpenId("074a1CcTG1LelxKe4xQC0zgNdId0nxi95b5lsNpazWYoCo5");
request.setBizModel(model);
// 第三方代调用模式下请设置app_auth_token
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
AlipayTradeCreateResponse response = alipayClient.execute(request);
System.out.println(response.getBody());
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
// System.out.println(diagnosisUrl);
}
}
private static AlipayConfig getAlipayConfig() {
String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->";
String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->";
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey(privateKey);
alipayConfig.setFormat("json");
alipayConfig.setAlipayPublicKey(alipayPublicKey);
alipayConfig.setCharset("UTF-8");
alipayConfig.setSignType("RSA2");
return alipayConfig;
}
}
```
### Q:**拉起收银台报错“指定小程序主体未完成关联绑定”,如何处理?**
A:需要前往前往:商家平台 → 产品管理 → JSAPI支付 → 关联绑定 将该小程序与JSAPI支付产品相绑定。