一、 生成签名 遇到坑 &key=".$config->GetKey() 此处的key值 为支付秘钥 也就是商户平台 生成的 api安全里面的 api 秘钥
微信 验签工具 验证签名 一直成功 但是 代码执行 就报签名错误 可能就是这个问题 。
/**
* 生成签名
* @param WxPayConfigInterface $config 配置对象
* @param bool $needSignType 是否需要补signtype
* @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
*/
public function MakeSign($config, $needSignType = true)
{
if($needSignType) {
$this->SetSignType($config->GetSignType());
}
//签名步骤一:按字典序排序参数
ksort($this->values);
$string = $this->ToUrlParams();
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$config->GetKey();
//签名步骤三:MD5加密或者HMAC-SHA256
if($config->GetSignType() == "MD5"){
$string = md5($string);
} else if($config->GetSignType() == "HMAC-SHA256") {
$string = hash_hmac("sha256",$string ,$config->GetKey());
} else {
throw new WxPayException("签名类型不支持!");
}
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
二、生成 XML 提交数据时 一定要 ksort($this->values); 排序 参照下面的方式 也可以先在 验签工具 自定义参数 生成xml 与自己的XML数据进行比对
<xml>
<appid>wx2421b1c4370ec43b</appid>
<mch_id>10000100</mch_id>
<nonce_str>ec2316275641faa3aacf3cc599e8730f</nonce_str>
<transaction_id>1008450740201411110005820873</transaction_id>
<sign>FDD167FAA73459FD921B144BAF4F4CA2</sign>
</xml>
三、当你以为一切要结束的时候,其实还没有 当你要调来支付的时候(本人是小程序支付) 发现 数据包 package 里面的 prepay_id 找不到 居然找不到了! 然后你就会一直找 找啊找 结果发现 只有成功返回时 才会有 prepay_id值呢! 只要验证支付签名 失败 ,你就找不到!