当前位置:   article > 正文

PHP实现微信支付签名算法(MD5版本及HMAC-SHA256版本)_php怎么正确生成虚拟支付用户态签名

php怎么正确生成虚拟支付用户态签名

整理了自己在开发微信支付相关接口时,根据官方文档实现的签名算法供大家参考,欢迎提出改进优化建议!

 

MD5版本基本步骤及实现

  1. 使用ksort()函数对参数数组按照数组键名进行升序排序
  2. 使用array_filter()函数过滤掉不符合签名条件的数组值
  3. 使用http_build_query()函数将数组键名与键值组合成URL字符串
  4. 对字符串进行MD5编码
  5. 最后使用strtoupper()函数将字符串转换为大写即可
  1. /**
  2. * Create the wechat pay sign with MD5
  3. * Document https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3
  4. * @param $data
  5. * @param $mach_key
  6. * @return string
  7. */
  8. private function createWechatPaySignWithMd5 ($data, $mach_key) {
  9. ksort($data);
  10. $data = array_filter($data, function ($v, $k) {
  11. if ($k == "sign" && $v == '' && is_array($v)) {
  12. return false;
  13. }
  14. return true;
  15. }, ARRAY_FILTER_USE_BOTH);
  16. $str = http_build_query($data)."&key=".$mach_key;
  17. return strtoupper(md5($str));
  18. }

HMAC-SHA256版本实现步骤

使用HMAC-SHA256与MD5的主要差别就在于编码这一步,其它步骤一致:

  1. 使用ksort()函数对参数数组按照数组键名进行升序排序
  2. 使用array_filter()函数过滤掉不符合签名条件的数组值
  3. 使用http_build_query()函数将数组键名与键值组合成URL字符串
  4. 对字符串进行HMAC-SHA256编码
  5. 最后使用strtoupper()函数将字符串转换为大写即可
  1. /**
  2. * Create the wechat pay sign with hmac-sha256
  3. * Document https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3
  4. * @param $data
  5. * @param $mach_key
  6. * @return string
  7. */
  8. private function createWechatPaySignWithHash ($data, $mach_key) {
  9. ksort($data);
  10. $data = array_filter($data, function ($v, $k) {
  11. if ($k == "sign" && $v == '' && is_array($v)) {
  12. return false;
  13. }
  14. return true;
  15. }, ARRAY_FILTER_USE_BOTH);
  16. $str = http_build_query($data)."&key=".$mach_key;
  17. return strtoupper(hash_hmac("sha256", $str, $mach_key));
  18. }

参考链接:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/191263
推荐阅读
相关标签
  

闽ICP备14008679号