PHP实现微信支付签名算法(MD5版本及HMAC-SHA256版本)

简介: PHP实现微信支付签名算法(MD5版本及HMAC-SHA256版本)

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

MD5版本基本步骤及实现


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

HMAC-SHA256版本实现步骤


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

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

参考链接:

目录
相关文章
|
5天前
|
PHP 开发工具
php免费用免认证的微信支付宝支付
php免费用免认证的微信支付宝支付
13 5
|
5天前
|
PHP
php使用curl新增微信临时素材(上传图片)
php使用curl新增微信临时素材(上传图片)
16 4
|
5天前
|
算法 PHP 数据中心
基于php雪花算法工具类Snowflake -来自chatGPT
基于php雪花算法工具类Snowflake -来自chatGPT
12 2
|
16天前
|
PHP
PHP微信公众号投票活动系统源码
PHP微信公众号投票活动系统源码
57 11
|
12天前
|
存储 安全 算法
三种常见的加密算法:MD5、对称加密与非对称加密的比较与应用
网络安全聚焦加密算法:MD5用于数据完整性校验,易受碰撞攻击;对称加密如AES快速高效,密钥管理关键;非对称加密如RSA提供身份验证,速度慢但安全。三种算法各有所长,适用场景各异,安全与效率需权衡。【6月更文挑战第17天】
33 2
|
2月前
|
JavaScript Java 测试技术
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
29 3
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
|
28天前
|
PHP 移动开发 安全
PHP应用如何对接微信公众号JSAPI支付
本文介绍了微信支付的多种方式,包括JSAPI支付、APP支付、Native支付、付款码支付和H5支付。
27 8
|
4天前
|
存储 算法 安全
MD5哈希算法:原理、应用与安全性深入解析
MD5哈希算法:原理、应用与安全性深入解析
|
4天前
|
机器学习/深度学习 存储 算法
心得经验总结:微信红包随机算法转载
心得经验总结:微信红包随机算法转载
|
5天前
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密