PHP
PHP实现微信v2签名过程
PHP实现微信v2签名过程
继昨天发表了一篇PHP实现微信V3签名过程之后,今天又完成了另一个需求,就是实现V2签名,过程也是非常简单,在这里跟大家分享一下代码,代码也是很简洁,首先是公共文件,命名为wxComm.php,代码如下:
#微信基础信息 $wxMerchantId = "商户号"; //商户号 $wxPrivateKey = "微信密钥"; //微信密钥 /** * 微信 API V2 签名 * @param $params * @param $privateKey * @param string $type sha256:HMAC-SHA256签名方式 me5:MD5签名方式 * @return string */ function getSignV2($params, $privateKey, $type = "sha256") { #参数名ASCII码从小到大排序(字典序) ksort($params); #初始化数据 $stringToBeSigned = ""; $i = 0; #循环拼接请求参数 foreach ($params as $k => $v) { if (false === checkWxEmpty($v) && "@" != substr($v, 0, 1)) { // 转换成目标字符集 $v = wxCharaCet($v, "UTF-8"); if ($i == 0) { $stringToBeSigned .= "$k" . "=" . urlencode($v); } else { $stringToBeSigned .= "&" . "$k" . "=" . urlencode($v); } $i++; } } #清除缓存 unset ($k, $v); #拼接密钥 $stringSignTemp = $stringToBeSigned . "&key=" . $privateKey; #签名方式 sha256、md5 if ($type == "sha256") { $sign = strtoupper(hash_hmac("sha256", $stringSignTemp, $privateKey)); } else { $sign = strtoupper(md5($stringSignTemp)); } #返回 return $sign; } /** * 转换成目标字符集 * @param $data * @param $targetCharset * @return string */ function wxCharaCet($data, $targetCharset) { if (!empty($data)) { $fileType = "UTF-8"; if (strcasecmp($fileType, $targetCharset) != 0) { $data = mb_convert_encoding($data, $targetCharset, $fileType); } } return $data; } /** * 判断参数值是否为空 * @param $value * @return bool */ function checkWxEmpty($value) { if (!isset($value)) return true; if ($value === null) return true; if (trim($value) === "") return true; return false; }
下面是调用文件代码:
$params = array( 'stock_id' => '2345', 'out_request_no' => "435435", 'send_coupon_merchant' => $wxMerchantId, 'open_id' => '123', ); $sign = getSignV2($params, $wxPrivateKey, "sha256");
这样就可以成功生成签名了,支持两种签名方式分别是MD5签名方式跟HMAC-SHA256签名方式,可根据传值生成不同的签名。
0条评论