本文主要是介绍支付宝当面付,报验签失败code:40002,msg:Invalid Arguments解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这几天在调试支付宝相应的接口,支付宝的加密使用了证书,调用网站支付时可以正常跳转支付页面,调试当面付接口时发现报了
{“alipay_trade_precreate_response”:{“code”:“40002”,“msg”:“Invalid Arguments”,“sub_code”:“isv.invalid-signature”,“sub_msg”:“验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:alipay_root_cert_sn=6bc29aa3b4d406c43483ffea81e08d22&alipay_sdk=alipay-sdk-java-4.8.10.ALL&app_id=2016101200665312&biz_content={“body”:“好的商品”,“out_trade_no”:“20191017105011111112011ddd”,“product_code”:“FACE_TO_FACE_PAYMENT”,“subject”:“2222”,“timeout_express”:“10m”,“total_amount”:“58888”}&charset=utf-8&format=json&method=alipay.trade.precreate&sign_type=RSA2×tamp=2019-10-18 17:49:24&version=1.0”},“sign”:“G+qYsFyUb4+n5e65lZjOFX7Bje6rXc7ykpsN3BK+bnoz/ATT1+7/aiBNznSo72zAmn+722uT9fZ8zjDxaBlgBfHD2rPpNtJVLq4sfUWgJt+Tsq328f7FsESVBEJMQ9MTkxbMpVndmZQDkL2yNH1Ke+4Lrpbv6oocMeWrnSiwaPMmhGZ1JOjFghVX9rNKZN1Qf1ZMGFlMu4wKzfRDqu1H8ipEW3IquJYNaiQuy6PNbsfplT84tsoOsfSF3xAsAlg853FPnig6aaYI35/hyYsm00GwPNdLraEwyMR+P5sbPGamyBIohJhTQFU2lGWTY8R9+SdWh2csvo6eXDohMS8pkg==”}
这个错误。
我们看看官方对这个错误的解释
然后看看我写的两个接口
/*** 通过跳转支付页面支付的方法* @param alipay* @return* @throws AlipayApiException*/public static String aliPayBypage(Alipay alipay) throws AlipayApiException {Logger logger = LoggerFactory.getLogger(AlipayUtil.class);logger.info("开始请求支付页面");//构造client,设置公共请求参数DefaultAlipayClient alipayClient = new DefaultAlipayClient(AlipayUtil.setCertAlipayRequest());//发送API请求AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();//页面跳转同步通知页面路径request.setReturnUrl(StringUtils.trimToNull(Configure.getString("return_url")));// 服务器异步通知页面路径request.setNotifyUrl(StringUtils.trimToNull(Configure.getString("notify_url")));//封装参数request.setBizContent(JSON.toJSONString(alipay));//3、请求支付宝进行付款,并获取支付结果String form = "";try {form = alipayClient.pageExecute(request).getBody();}catch (AlipayApiException e){e.printStackTrace();}//返回付款信息logger.info(form);return form;}/*** 获取支付二维码* @param alipay* @return* @throws AlipayApiException*/public static String aliPayByQrCode(Alipay alipay) throws AlipayApiException {Logger logger = LoggerFactory.getLogger(AlipayUtil.class);logger.info("开始请求支付二维码参数");//构造client,设置公共请求参数AlipayClient alipayClient = new DefaultAlipayClient(AlipayUtil.setCertAlipayRequest());//发送API请求AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类//封装参数alipay.setProduct_code("FACE_TO_FACE_PAYMENT");request.setBizContent(JSON.toJSONString(alipay));//3、请求支付宝进行付款,并获取支付结果String form = "";//certificateExecutetry {form = alipayClient.execute(request).getBody();}catch (AlipayApiException e){e.printStackTrace();}//返回付款信息logger.info(form);return form;}
可以看到两个接口只有API请求的接口使用不同,其他的完全一样,所以上面的问题都可以排除,我也百度了这个问题发现没有跟我一样的情况,最后问了开放平台的技术支持
最后得知密钥的当面付接口调用 alipayClient.execute()
证书的当面付接口调用 alipayClient.certificateExecute()
而我的代码参考的官方文档写的,官方文档现在默认使用密钥方式下单,还未区分密钥和证书的方法
所以把当面付接口换成alipayClient.certificateExecute() 可以正确拿到支付二维码。
这篇关于支付宝当面付,报验签失败code:40002,msg:Invalid Arguments解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!