支付验签模拟

验签可以模拟,不必等支付平台的回调

商户端直接把支付请求发送给回调地址,验签证书改为商户公钥证书,可以直接测试验签程序。

如果用密钥而不是证书加密,如支付宝,更简单,不用切换商户端验签证书,使用商户密钥即可验签。


支付验签模拟流程图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信支付 SDK 的基本流程如下: 1. 从微信支付服务器获取支付结果通知(XML 格式)。 2. 将 XML 格式的支付结果通知转换成 Map 对象。 3. 对 Map 对象中的参数按照 key 值进行字典序排序。 4. 将排序后的参数拼接成一个字符串,格式为 key1=value1&key2=value2&...&keyn=valuen。 5. 将拼接后的字符串与商户密钥进行拼接,得到一个新的字符串。 6. 对新的字符串进行 MD5 名,得到一个名值。 7. 将名值与支付结果通知中的 sign 字段进行比较,如果一致则代表通过。 以下是一个 Java 实现的示例代码: ```java import java.util.*; import java.security.*; import javax.xml.bind.DatatypeConverter; public class WxPay { // 商户密钥 private static final String KEY = "your_key_here"; // 证微信支付通知 public static boolean verify(Map<String, String> params) { // 将参数按照 key 值进行字典序排序 List<String> keys = new ArrayList<String>(params.keySet()); Collections.sort(keys); // 拼接参数字符串 String paramStr = ""; for (String key : keys) { String value = params.get(key); if (!value.isEmpty() && !key.equals("sign")) { paramStr += key + "=" + value + "&"; } } paramStr += "key=" + KEY; // 对参数字符串进行 MD5 名 String sign = null; try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(paramStr.getBytes("UTF-8")); sign = DatatypeConverter.printHexBinary(bytes).toLowerCase(); } catch (Exception e) { return false; } // 比较名值 return sign.equals(params.get("sign")); } } ``` 调用示例: ```java // 获取支付结果通知 Map<String, String> params = ...; // 支付通知 if (WxPay.verify(params)) { // 通过,处理支付结果 } else { // 失败,忽略该支付通知 } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值