支付宝2.0-系统繁忙,请稍后重试。(ALI40247)

集成支付宝2.0的时候遇到了ALI40247这个问题,经过查找,发现是支付宝demo中提供的bizContent写法有问题

一、先上个调试链接

    联调日志排查:https://openmonitor.alipay.com/acceptance/cloudparse.htm (需登录对应的支付宝账户)

经过此链接工具的调试,结果如下


二、发现了两个错误:一个是签名类型,一个是biz_content格式错误;

    1. 签名类型错误

    进入蚂蚁金服开放平台(https://openhome.alipay.com/platform/home.htm),依次选择 开发者中心 -> 网页&移动应用 -> 在对应的应用右边点击查看 -> 应用信息 -> 查看应用公钥 - 修改(点击“如何生成秘钥”页面中点击下载工具,进行生成,选择java-2048,生成好之后再修改应用公钥)

    2.biz_content格式错误

    官方给的demo中的代码(android在OrderInfoUtils2_0.class中的buildOrderParamMap(String app_id,boolean rsa2)方法内)如下:

keyValues.put("biz_content", "{\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\"0.01\",\"subject\":\"1\",\"body\":\"我是测试数据\",\"out_trade_no\":\"" + getOutTradeNo() +  "\"}");

此种写法直接进行的硬拼接,我将其修改为了使用gson进行转换

a.先创建类AlipayBizContent.class

    public class AlipayBizContent{

        private String body;

        private String out_trade_no;

        private String product_code;

        private String subject;

        private String timeout_express;

        private String total_amount;

        //get、set方法此处省略

    }

    b.在OrderInfoUtils2_0.class中的buildOrderParamMap(String app_id,boolean rsa2)方法bizContent的添加方式修改如下:



截图方便大家理解修改过程,下面是文本代码:

AlipayBizContent bizContent=new AlipayBizContent();
bizContent.setTimeout_express("30m");
bizContent.setProduct_code("jackting-180510-"+new Random().nextInt(100000));
bizContent.setBody("test data");
bizContent.setOut_trade_no(getOutTradeNo());
bizContent.setTotal_amount("0.01");
bizContent.setSubject("0000001");
Gson gson=new Gson();
keyValues.put("biz_content",gson.toJson(bizContent));

    如果上述修改仍无法解决问题,可以尝试进行以下检查:

    1.查看是否签约(移动支付针对于支付宝1.0,app支付针对于支付宝2.0)

    2.检查应用是否上限

    3.签名类型是否不匹配

    4.实际使用编码和请求参数中的编码是否不匹配

    5.上述均无法解决,可以联系支付宝在线技术支持:https://cschannel.alipay.com/newPortal.htm?scene=mt_zczx&token=&pointId=&enterurl=https%3A%2F%2Fsupport.open.alipay.com%2Falipay%2Fsupport%2Findex.htm

猜你喜欢

转载自blog.csdn.net/qq_23081779/article/details/80265259
今日推荐