SDK支付流程

1、普通支付流程

2、代理流程

 

 

易接、U8SDK

转载于:https://www.cnblogs.com/MrZivChu/p/sdk.html

  • 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、付费专栏及课程。

余额充值