微信支付-支付验证签名失败

调试微信支付,按照文档,调用预下单接口,生成prepay_id,前端js拉起支付。

弹框提示“支付验证签名失败”

签名生成规则:
根据key值字典排序,用=拼接,再拼接api密钥,加密并转大写。

检查paySign的签名参数没有问题。

后排查找到原因:prepay_id生成时的签名类型和paySign生成的签名类型不同。后修改成一致,调起支付成功。

根据已有引用,目前没有明确提及微信支付返回结果为 -1 的具体原因。不过从引用[1]可知,返回 -1 和 debug 与 release 版本关系不大,且支付的成功与失败和缓存也没有多少关联。 在实际情况中,微信支付返回 -1 通常表示支付失败,可能的原因有以下几种: 1. **签名错误**:支付参数的签名计算错误,导致服务器验证签名不通过。 2. **参数错误**:传入的支付信息(如 appid、noncestr、package 等)有误或不完整。例如在 H5 + 接口调用时,`plus.payment.request` 传入的支付信息字符串格式错误[^2]。 3. **网络问题**:网络不稳定或中断,导致支付请求无法正常发送或接收服务器响应。 4. **商户配置问题**:商户号、密钥等配置信息不正确。 5. **支付订单状态异常**:订单已支付、已关闭或已过期等情况。 ### 示例代码检查签名是否正确 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.*; public class WXPaySignUtil { public static String createSign(SortedMap<String, String> parameters, String key) { StringBuffer sb = new StringBuffer(); Set es = parameters.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); String v = (String) entry.getValue(); if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } sb.append("key=" + key); String sign = getMD5(sb.toString()).toUpperCase(); return sign; } public static String getMD5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(str.getBytes()); StringBuilder result = new StringBuilder(); for (byte b : bytes) { String temp = Integer.toHexString(b & 0xff); if (temp.length() == 1) { temp = "0" + temp; } result.append(temp); } return result.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } public static void main(String[] args) { SortedMap<String, String> parameters = new TreeMap<>(); parameters.put("appid", "wx0411fa6a39d61297"); parameters.put("noncestr", "71maVjWiEAvU85Wk"); parameters.put("package", "Sign=WXPay"); // 其他参数... String key = "your_key"; String sign = createSign(parameters, key); System.out.println("生成的签名: " + sign); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值