小编给大家分享一下微信支付验证或签名失败的原因有哪些,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
,,,,,,,,,,,,,,,,,,,,,,,,,,,iOS,微信统一支付验证失败是怎么回事?签名失败一直付不了款确实很着急,主要是身体中文问题,解决起来很麻烦,百度了好多,都找不到彻底解决的文章,总之各种麻烦。这里就不多做赘述了,切入正题:
因为公司的项目要用微信支付,部署时候发现总是报签名错,经过排查,原来是编码问题,那么找到原因了就来解决问题吧,本文详细介绍了三种解决方案,如果时间有限没空看完的话,那就直接奔第三种方案吧,希望能帮助到大家。
第一种解决方案:设置tomcat编码为utf - 8
tomcat在窗口环境默认编码是gbk,所以要设置tomcat编码为utf - 8。
第一步:在卡特琳娜。蝙蝠里面的头部第二行添加
set JAVA_OPTS=-Xms128m -Xmx512m - xx: MaxPermSize=256 m -Dfile.encoding=utf-8 -Dsun.jnu。utf - 8编码=
让java环境使用utf - 8编码
第二步:在server.xml添加
URIEncoding=癠TF-8"useBodyEncodingForURI=皌rue",使tomcat发送的请求使用utf - 8,如下面代码
- <李>
<代码> & lt;连接器端口=?081”;协议=癏TTP/1.1“代码>
connectionTimeout=?0000“
redirectPort=?443”;URIEncoding=癠TF-8"useBodyEncodingForURI=皌rue"/在
控制台可能会有乱码,但是改成gbk就没的事,但是微信签名失败
第二种解决方案:进行身体转码
字符串的身体,=新的字符串(“身体中文字段值“.toString () .getBytes (“ISO8859-1"),“UTF-8");
但是:微信返回的商品名会出现乱码
<人力资源/>
第三种解决方案:修改签名MD5编码(<强>这个解决方案才是王道强>)
tomcat在窗口环境默认编码是gbk,所以在进行MD5签名的时候设置编码,为utf - 8就可以了。
这个是我用的MD5签名工具类:
public class MD5Util { private static  String byteArrayToHexString (byte b []), { StringBuffer resultSb =, new StringBuffer (); for (int 小姐:=,0;,小姐:& lt;, b.length;,我+ +) [我]resultSb.append (byteToHexString (b)); return resultSb.toString (); } private static  String byteToHexString (byte b), { int n =, b; if (n & lt;, 0) +=n 256; int d1 =, n /, 16; int d2 =, n %, 16; return hexDigits (d1), +, hexDigits (d2); } public static  String MD5Encode (String 起源,String charsetname), { String resultString =,空; try { 时间=resultString new 字符串(起源); MessageDigest md =, MessageDigest.getInstance (“MD5"); if (charsetname ==, null | |,““.equals (charsetname)) 时间=resultString byteArrayToHexString (md.digest (resultString .getBytes ())); 其他的 时间=resultString byteArrayToHexString (md.digest (resultString .getBytes (charsetname))); },catch (Exception 例外),{ } return resultString; } private static  final String  hexDigits [],=, {,“0”,“1“,,, 2,,,, 3,,,“4”,,“5“, “6”,“7”,,“8”,,“9“,“a",,“b",,“c",,“d",,“e",,“f",}; }
看完了这篇文章,相信你对“微信支付验证或签名失败的原因有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!