php 微信支付 遇到的坑啊!

一、 生成签名 遇到坑  &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值呢! 只要验证支付签名 失败 ,你就找不到!

发布了52 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40816144/article/details/101024187