做过微信支付的请进,签名错误的问题!

liujiduo 发布于 2015/03/20 13:35
阅读 56K+
收藏 2

最近在做微信支付,调用微信的统一下单支付接口http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1时,老是返回“签名错误”,偶尔可以成功,不知道是怎么回事。我在日志中打印出生成的字符串和签名,然后用相同的数据在微信支付提供的在线支付调试工具生成签名,发现生成的签名结果一样!生成的最终xml也一样,但接口就是返回

<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
</xml>
请问这种问题该怎么解决啊?急!!!

以下是问题补充:

@liujiduo:用的支付方式是JSAPI,后台用的Java,生成签名相关的工具类用的都是微信扫码支付demo里的。 (2015/03/20 13:38)
加载中
1
喜欢夜空的人
API KEY用的商户那个密钥,不是APP SECRETE
tss0823
tss0823
确实是问题所在,多谢。
0
liujiduo
liujiduo
今天看了一下微信支付官网的在线签名工具,发现引用的js文件里的实现居然做了调整,签名的结果也和之前不一样了!而且我用它签名生成的xml数据提交给统一下单接口,还是提示签名错误??现在这不知道微信提供的这个签名工具到底是不是和它后台的实现一致了……
0
1的10次方
1的10次方
我只是路过一下
0
不是simaguo
不是simaguo
我只是顶一下
0
david_huang
david_huang

我也遇到同样的问题,你的问题解决了吗?我发了贴子,如果解决了可以回复一下.感谢!

开源中国:www.oschina.net/question/2340686_234452

csdn:http://ask.csdn.net/questions/179076

phpChina:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=301503

lege123
lege123
回复 @liujiduo : 我的签名用微信支付接口签名校验工具 可以通过 就是支付的时候签名错误?换一个下秘钥就可以了吗?
liujiduo
liujiduo
如果确定签名方式没问题,就把密钥重新设置一下,我当时一直以为签名有问题,后来把密钥重新设置跟之前一样,再试发现解决了,不清楚是不是微信支付的问题
0
烤焦红薯
烤焦红薯
/**
     * MD5编码
     * @param origin 原始字符串
     * @return 经过MD5加密之后的结果
     */
    public static String MD5Encode(String origin) {
        String resultString = null;
        try {
            resultString = origin;
            MessageDigest md = MessageDigest.getInstance("MD5");
            //resultString = byteArrayToHexString(md.digest(resultString.getBytes())); ///深坑啊,赶紧注释掉,用UTF-8
            resultString = byteArrayToHexString(md.digest(resultString.getBytes("utf-8")));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }



微信官方给的签名方法中MD5编码有问题,要转为utf-8


记忆旳流年
记忆旳流年
非常感谢,开发用的ubuntu系统,在本地测试统一下单通过,打包到测试服务器(为centos)死活报签名错误(错在哪里也没有提示,真的坑),找了两个下午,排除签名不通过各种情况,硬是不知道错误出在哪里,war包放在阿里云主机也正常,翻了好久终于翻到这里,问题解决!再次感谢!
0
ada_young
ada_young
HttpRequest httpRequest = HttpRequest.post("https://api.mch.weixin.qq.com/pay/unifiedorder");
		String x = xstream.toXML(data);
		httpRequest.body( StringUtil.convertCharset(x, "UTF-8", "ISO-8859-1"));
		HttpResponse response = httpRequest.send();
		String body = response.body();
		body = StringUtil.convertCharset(body, "ISO-8859-1", "UTF-8");


StringUtil.convertCharset(x, "UTF-8", "ISO-8859-1")

给微信传递的时候把UTF-8 转换成 ISO-8859-1

梁鹏
梁鹏
回复 @塔拉夏 : 深深的赞同。。 先不说弄3个平台(公众、开放、商户),设置各种复杂,凌乱。。 手册也写的不明了。
塔拉夏
同意你的做法,并且测试通过了。另外,本来没有账号,因为开发遇到相同问题,看到这个回复,特意注册一个账号来骂微信,脑残。当然新账号注册1个小时内不允许操作,但我愣是在这里等了一个小时,就是要骂微信,脑残!!!不是说它的api水平有多烂,但你至少说明白一点啊,每次看微信api都头痛。比阿里差的不是一个数量级的。调阿里api都是,优雅、简单、舒服,效率高。调微信api的感觉是,愤怒、头痛、恶心,想打人。
0
初学者121
初学者121
同骂微信,卡在了签名这里。
lege123
lege123
回复 @快乐的鱼摆摆 : 你是怎么解决的
百变茄
百变茄
回复 @快乐的鱼摆摆 : 你设置的attach是不是中文,后来我改成英文就可以了
快乐的鱼摆摆
我也遇到同样的问题,微信深坑啊!签名和官方测试生成的一样样的,就是验签不过。
0
a
aITRookie

金额一定为整型,望后来人别卡在这里。如果实在找不出原因,可以将值暂时替换成写死的,因为它不是所有参数都验证,有些参数如果传错了也是会提示签名错误。

0
小哥屠龙
小哥屠龙

这货的设置的api密钥里头不能有大写字母,不然死活不过

返回顶部
顶部