使用微信支付的签名函数的时候,%、&、=、/、\、=、+、#、?、。、- 和空格。这些特殊字符不应该直接出现在url中。否则签名会失败的。
private function sign($data){ $stringA = ""; // 按照参数名排序 ksort($data); // 非空参数拼接 foreach ($data as $key => $value) { if($value){ $stringA .= "&" . $key . "=" . $value; } } // 加上商户的key $stringA .= "&key=" . $this->mch_key; // MD5 加密 $signValue = md5(substr($stringA, 1)); // 返回大写 return strtoupper($signValue);}
因为data里面的有个是商品描述的字段,不小心在里面加了个空格和-,导致总是签名错误。