常见问题
Q:“当面付”和“JSAPI支付”有什么区别?

Q:我的小程序已接入过当面付,如何快速切换到JSAPI支付?
序号 | 接入流程 | 使用的接口 | 当面付 | JSAPI支付 |
---|---|---|---|---|
1 | 发送订单信息 | my.request | - | 无变化 |
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 入参”,如何处理?

Q:小程序支付无法调起支付,如何处理?
1.
package com.java.sdk.demo;
import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipayTradeApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipayTradeApiCreate {
public static void main(String[] args) throws ApiException {
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 初始化alipay参数(全局设置一次)
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
defaultClient.setAlipayConfig(alipayConfig);
AlipayTradeApi api = new AlipayTradeApi();
AlipayTradeCreateModel data = new AlipayTradeCreateModel();
ExtendParams extendParams = new ExtendParams();
extendParams.setTradeComponentOrderId("2023060801502300000008810000005657");
extendParams.setSysServiceProviderId("2088511833207846");
extendParams.setSpecifiedSellerName("XXX的跨境小铺");
extendParams.setRoyaltyFreeze("true");
extendParams.setCardType("S0JP0000");
data.setExtendParams(extendParams);
data.setBuyerId("2088102146225135");
BusinessParams businessParams = new BusinessParams();
businessParams.setMcCreateTradeIp("127.0.0.1");
businessParams.setEnterprisePayInfo("{\"category_list\":[{\"price\":\"10.24\",\"name\":\"餐饮服务\",\"category\":\"3070401000000000000\"}]}");
businessParams.setEnterprisePayAmount("10.00");
businessParams.setTinyAppMerchantBizType("KX_SHOPPING");
businessParams.setCampusCard("0000306634");
businessParams.setActualOrderTime("2019-05-14 09:18:55");
businessParams.setCardType("T0HK0000");
businessParams.setGoodTaxes("10.00");
data.setBusinessParams(businessParams);
data.setOutTradeNo("20150320010101001");
data.setProductCode("FACE_TO_FACE_PAYMENT");
LogisticsDetail logisticsDetail = new LogisticsDetail();
logisticsDetail.setLogisticsType("EXPRESS");
data.setLogisticsDetail(logisticsDetail);
data.setUndiscountableAmount("8.88");
data.setDiscountableAmount("80.00");
data.setOperatorId("Yx_001");
BkAgentReqInfo bkagentReqInfo = new BkAgentReqInfo();
bkagentReqInfo.setMerchCode("123412341234");
bkagentReqInfo.setLocation("+37.28/-121.268");
bkagentReqInfo.setDeviceType("02");
bkagentReqInfo.setAcqCode("12345678901234");
bkagentReqInfo.setSerialNum("123123123123");
data.setBkagentReqInfo(bkagentReqInfo);
data.setOpAppId("2014072300007148");
List<GoodsDetail> goodsDetail = new ArrayList<GoodsDetail>();
GoodsDetail goodsDetail0 = new GoodsDetail();
goodsDetail0.setQuantity(1);
goodsDetail0.setPrice("2000");
goodsDetail0.setGoodsCategory("34543238");
goodsDetail0.setCategoriesTree("124868003|126232002|126252004");
goodsDetail0.setGoodsId("apple-01");
goodsDetail0.setShowUrl("http://www.alipay.com/xxx.jpg");
goodsDetail0.setGoodsName("ipad");
goodsDetail0.setOutItemId("outItem_01");
goodsDetail0.setOutSkuId("outSku_01");
goodsDetail.add(goodsDetail0);
data.setGoodsDetail(goodsDetail);
data.setTerminalId("NJ_T_001");
ReceiverAddressInfo receiverAddressInfo = new ReceiverAddressInfo();
receiverAddressInfo.setDivisionCode("310115");
receiverAddressInfo.setMobile("13120180615");
receiverAddressInfo.setAddress("上海市浦东新区陆家嘴银城中路501号");
receiverAddressInfo.setName("张三");
receiverAddressInfo.setZip("200120");
data.setReceiverAddressInfo(receiverAddressInfo);
List<String> queryOptions = new ArrayList<String>();
queryOptions.add("enterprise_pay_info");
queryOptions.add("hyb_amount");
data.setQueryOptions(queryOptions);
SettleInfo settleInfo = new SettleInfo();
List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>();
SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo();
settleDetailInfos0.setTransInType("cardAliasNo");
settleDetailInfos0.setAmount("0.1");
settleDetailInfos0.setTransIn("A0001");
settleDetailInfos0.setActualAmount("0.1");
settleDetailInfos0.setSummaryDimension("A0001");
settleDetailInfos0.setSettleEntityType("SecondMerchant");
settleDetailInfos0.setSettleEntityId("2088xxxxx;ST_0001");
settleDetailInfos.add(settleDetailInfos0);
settleInfo.setSettleDetailInfos(settleDetailInfos);
settleInfo.setSettlePeriodTime("7d");
data.setSettleInfo(settleInfo);
SignParams agreementSignParams = new SignParams();
agreementSignParams.setSignScene("INDUSTRY|DIGITAL_MEDIA");
agreementSignParams.setExternalLogonId("13888888888");
agreementSignParams.setPersonalProductCode("CYCLE_PAY_AUTH_P");
AccessParams accessParams = new AccessParams();
accessParams.setChannel("ALIPAYAPP");
agreementSignParams.setAccessParams(accessParams);
SignMerchantParams subMerchant = new SignMerchantParams();
subMerchant.setSubMerchantServiceName("滴滴出行免密支付");
subMerchant.setSubMerchantServiceDescription("免密付车费,单次最高500");
subMerchant.setSubMerchantName("滴滴出行");
subMerchant.setSubMerchantId("2088123412341234");
agreementSignParams.setSubMerchant(subMerchant);
agreementSignParams.setSignNotifyUrl("http://www.merchant.com/receiveSignNotify");
agreementSignParams.setExternalAgreementNo("test20190701");
agreementSignParams.setAllowHuazhiDegrade(false);
List<OpenApiSpecifiedChannelParamsPojo> recommendSortChannelParams = new ArrayList<OpenApiSpecifiedChannelParamsPojo>();
OpenApiSpecifiedChannelParamsPojo recommendSortChannelParams0 = new OpenApiSpecifiedChannelParamsPojo();
recommendSortChannelParams0.setAssetTypeCode("ALICREDIT");
recommendSortChannelParams0.setInstId("INST_ALIPAY");
recommendSortChannelParams.add(recommendSortChannelParams0);
agreementSignParams.setRecommendSortChannelParams(recommendSortChannelParams);
PeriodRuleParams periodRuleParams = new PeriodRuleParams();
periodRuleParams.setPeriodType("DAY");
periodRuleParams.setPeriod(3);
periodRuleParams.setTotalPayments(12);
periodRuleParams.setExecuteTime("2019-01-23");
periodRuleParams.setSingleAmount("10.99");
periodRuleParams.setTotalAmount("600");
agreementSignParams.setPeriodRuleParams(periodRuleParams);
agreementSignParams.setProductCode("GENERAL_WITHHOLDING");
data.setAgreementSignParams(agreementSignParams);
data.setSellerId("2088102146225135");
data.setBody("Iphone6 16G");
data.setSubject("Iphone6 16G");
data.setTimeExpire("2021-12-31 10:05:00");
data.setTimeoutExpress("90m");
data.setTotalAmount("88.88");
data.setStoreId("NJ_001");
try {
AlipayTradeCreateResponseModel response = api.create(data);
} catch (ApiException e) {
AlipayTradeCreateDefaultResponse errorObject = (AlipayTradeCreateDefaultResponse) e.getErrorObject();
System.out.println("调用失败:" + errorObject);
}
}
}