支付宝当面付,报验签失败code:40002,msg:Invalid Arguments解决方案

本文主要是介绍支付宝当面付,报验签失败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&timestamp=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解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197499

相关文章

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi