支付中签约
一、支付后签约流程图
二、示例代码
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", "you are appid",
"private key", "json", "utf-8", "public key", "RSA2");
//验签请求request
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//封装参数
Map<String, String> keyValues = new HashMap<String, String>();
keyValues.put("app_id", "you are appid");
JSONObject jsonObject = new JSONObject();
//商品参数
jsonObject.put("total_amount","100");//商品价格
jsonObject.put("product_code","CYCLE_PAY_AUTH");//周期扣款产品码,固定值
jsonObject.put("body","body");//商品body
jsonObject.put("subject","subject");//商品subject
jsonObject.put("out_trade_no","202201020102121");//商户订单号,保证唯一
jsonObject.put("goods_type","0");//商品类型
JSONObject agreementSignParams = new JSONObject();
//周期扣款管控参数
agreementSignParams.put("personal_product_code","CYCLE_PAY_AUTH_P");//固定值
agreementSignParams.put("sign_scene","INDUSTRY|APPSTORE");//场景值
agreementSignParams.put("external_agreement_no","221138193812831");//商户签约协议编号,保证唯一!
agreementSignParams.put("sign_notify_url","sign_notify_url");//签约结果回调地址
JSONObject accessParams = new JSONObject();
accessParams.put("channel","ALIPAYAPP");//接入方式
JSONObject periodRule = new JSONObject();
//扣款周期参数
periodRule.put("period","10");//扣款周期
periodRule.put("period_type","DAY");//周期类型
periodRule.put("single_amount","10.0");//扣款金额
periodRule.put("execute_time","2022-03-29");//首次扣款时间
agreementSignParams.put("period_rule_params",periodRule);
agreementSignParams.put("access_params",accessParams);
jsonObject.put("agreement_sign_params",agreementSignParams);
keyValues.put("biz_content",jsonObject.toString());
request.setBizContent(keyValues.get("biz_content"));
request.setNotifyUrl("notify_url");//支付结果回调地址
request.setApiVersion("1.0");//api版本
//请求验签
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
//获取唤起参数
String body = response.getBody();
三、支付中签约常见问题
1.调用支付宝签名失败,报ISV 权限不足错误。
ISV 权限不足(isv.insufficient-isv-permissions)是指开发者在调用接口前,由于没有添加能力、签约或配置网关、密钥等关键信息,无相关接口的调用权限而导致的报错。
解决方案:详见:ISV权限不足解决方案
2.唤起支付宝界面失败,报系统繁忙。
一般情况下该问题原因为:支付宝验签失败
解决方案:
1.检查组装唤起支付宝页面参数是否正确
2.建议用支付宝生成签名的api,详见上方demo
3.支付成功但是签约失败
支付后签约场景分为支付业务参数和签约业务参数,该问题由于签约业务参数错误导致。
解决方案:
1.检查周期管控参数是否错误。
2.扣款周期类型period_type参数为DAY时,扣款周期period参数不得小于7。
3.具体可参考上方demo
总结
首次支付并签约所产生的问题大多都是请求参数有误,要注意周期相关参数的层级与格式。大家开发时可参考支付宝技术文档