3***@qq.com
3***@qq.com
  • 发布:2017-11-29 14:01
  • 更新:2021-12-23 18:18
  • 阅读:45034

微信支付提示支付验证签名失败

分类:HTML5+
   最近在做微信支付,目前已经能从APP跳转到微信,说明获取通道已经成功,但request方法不成功,但是微信提示“支付验证签名失败”,如下图1所示。  

签名我用官网校验工具校验得没问题,但是不知道为什么一直提示错误,前端代码如下  

this.$axios.get(url).then((res) => {
w.close();
w = null;
// 请求支付操作
var result = res.data;
var statement = {
appid: result.appid,
noncestr: result.nonce_str,
package: 'Sign=WXPay',
partnerid: result.mch_id,
prepayid: result.prepay_id,
timestamp: Number(result.timestamp),
sign: result.sign
};
window.plus.payment.request(key, statement, (result) => {
alert('支付成功');
}, (error) => {
alert('支付失败' + JSON.stringify(error));
});
})

2017-11-29 14:01 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com (作者)

当我写完这个提问的时候,我们后端找到了答案。为了方便以后有人遇到这样的问题,我还是贴出解决方法:
原因是后端的签名要加签,即需要二次签名。如果你只签名一次,官网也提示成功,这很神奇

  • skysowe

    你们当时做了沙箱验收吗?这是必须的还是可选的,我用沙箱能获得数据,直接用正式api密钥返回的数据是空


    2018-05-07 20:34

skysowe

skysowe

最近也在做微信支付的验收,请问验收的签名,是需要单独写一端代码来获取然后在整个验收期间都不变,还是需要在支付代码里每次都动态获取,直到验收完成,再换成自己的原来的API密钥???这里实在不明白,网上搜了好久也没有相关信息。

我自己写了个小的程序用curl来模拟post行为,始终获取失败

<?php  
  
	$xml = '<xml><appid>开放平台的AppID</appid><mch_id>商户号</mch_id><nonce_str>32位随机数</nonce_str><sign>微信支付API的密钥</sign></xml>';  
	$url = 'https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey';  
	$header[] = "Content-type: text/xml;charset=UTF-8";  
  
	$ch = curl_init();  
	curl_setopt($ch, CURLOPT_URL, $url);  
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
	curl_setopt($ch, CURLOPT_POST, true);  
	curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  
  
	$a = curl_exec($ch);  
	echo $a;  
  
	curl_close($ch);    
	  
?>  

<xml>  
  <return_code><!--[CDATA[FAIL]]--></return_code>  
  <return_msg><!--[CDATA[获取沙箱密钥失败,确认交易密钥是否正确]]--></return_msg>  
</xml>

以下是官网的资料:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1 这里看到了获取的说明,但是没说是怎么获取???

获取验签秘钥API:
请求Url https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey
是否需要证书 否
请求方式 POST

请求参数:
字段名 字段 必填 示例值 类型 说明
商户号 mch_id 是 1305638280 String(32) 微信支付分配的微信商户号
随机字符串 nonce_str 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
签名 sign 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 签名值


  • skysowe

    自己搞定了,https://segmentfault.com/q/1010000014739221


    2018-05-07 08:36

1***@qq.com

1***@qq.com

遇到相同的问题,请问已经解决了吗

1***@qq.com

1***@qq.com

t同样问题 解决了么

冰点运动

冰点运动

二次签名是后端完成还是前端 完成

8***@qq.com

8***@qq.com

调用微信app支付,提示"支付验证签名失败”"。微信支付接口签名校验工具,校验通过。这种是啥情况。。

  • 沧海一声笑

    大佬,问题怎么解决的,遇到类似问题


    2020-08-28 13:02

8***@qq.com

8***@qq.com

拿到后台创建与支付订单的信息,前端包装成如下格式,调取微信app支付,控制台输出 fail:{"errMsg":"requestPayment:fail errors"}。。。。

let orderInfo = {
"appId": res.data.appId,
"nonceStr": res.data.appId,
"package": res.data.packageValue, // 固定值,以微信支付文档为主
"partnerId": res.data.partnerId,
"prepayId": res.data.prepayId,
"timeStamp": res.data.timeStamp,
"sign": res.data.sign // 根据签名算法生成签名
}

8***@qq.com

8***@qq.com

咋也不知道咋也不敢问,微信官方提供的大小写还不一样。。

ShopWind小程序

ShopWind小程序 - ShopWind是一款专注用户体验的开源电商小程序、APP软件

如果是微信v3版本,直接sign="123" 就能解决

该问题目前已经被锁定, 无法添加新回复