说明:
验签只需要使用到支付宝公钥
错误原因:
1.支付宝公钥使用错误导致
2.验签方法使用错误
3.参数错误导致,例如乱码,带自定义参数,编码格式。
自查流程(按照推荐流程检查)
第一步(重点检查):支付宝公钥使用是否错误参考这个帖子自查:[url]https://openclub.alipay.com/read.php?tid=1495&fid=25[/url]
第二步:验签方法错误(请使用下方的demo中的地址接收异步通知进行验签测试)
说明:
正常接口使用 AlipaySignature.rsaCheckV1,sign_type不参与签名
特殊说明:AlipaySignature.rsaCheckV2方法生活号异步通知需要使用,会保留sign_type参数参与验签。
异步demo分享(适用于所有支付类接口异步验签)
java,php,.NET验签demo下载地址:[url]https://docs.open.alipay.com/203/105910[/url]
注意:请大家使用手机网站demo进行验签测试即可,使用文件中的notify_url相关的文件和方法
自行实现验签参考:[url]https://doc.open.alipay.com/docs/doc.htm?docType=1&articleId=106120[/url]
第三步:异步通知返回参数检查
说明:
1.支付返回的通知不会乱码,一般java语言可能会在接收以后出现中文乱码,这个需要自己处理,demo中也给了一个方案(notify_url.jsp页面中。如果出现乱码就开启再测试):
//获取支付宝POST过来反馈信息Map params = new HashMap();Map requestParams = request.getParameterMap();for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //乱码解决,这段代码在出现乱码时使用 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr);}
2.代码中开启debug(调试模式) 导致验签失败(这个问题可能比较少)。
如果大家根据自查还是没有解决,欢迎在帖子下面进行追问,按照下面格式进行提问(信息不全不回复,谢谢配合)
正确提问方式:使用环境(沙箱还是正式环境)+接口名称(中文+英文)+验签失败的交易号+返回的参数(提供&符号连接的格式)
如果解决了大家的问题,欢迎点赞评论支持一下