微信支付接口签名校验工具
可以在这里校验一下,如果实在有问题找不到就输出一下自己的xml与人家给出的比对一下。。。。
我这里踩的坑:stringA构建签名字符串时不能回车 回车也是字符。。。。。。还有一个小坑 里边有一个等号忘记写了。。。。
这里是创建签名
$stringA="appid=".$pay['appid']."&body=".$pay['body']."&mch_id=".$pay['mch_id']."&nonce_str=".$pay['nonce_str']."¬ify_url=".$pay['notify_url']."&openid=". $pay['openid']."&out_trade_no=".$pay['out_trade_no']."&spbill_create_ip=". $pay['spbill_create_ip']."&total_fee=".$pay['total_fee']."&trade_type=".$pay['trade_type'];// return $stringA;$stringSignTemp=$stringA."&key=这里32位"; //注:key为商户平台设置的密钥key$sign= strtoupper(md5($stringSignTemp)); //注:MD5签名方式这里是随机字符串:
// 随机字符串$str="QWERTYUIPADGHJKLZXCVNM1234567890";$nonce = str_shuffle($str);这里是构建微信需要得XML函数:
// 将数组转化为xml数据格式 public function arrayToXml($arr){ $xml = "<xml>"; foreach ($arr as $key=>$val){ if(is_array($val)){ $xml.="<".$key.">".$this->arrayToXml($val)."</".$key.">"; }else{ $xml.="<".$key.">".$val."</".$key.">"; } } $xml.="</xml>"; return $xml; }构建微信发送XML函数:
// post请求 public function wxpost($url,$post) { //初始化 $curl = curl_init(); $header[] = "Content-type: text/xml";//定义content-type为xml //设置抓取的url curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //定义请求类型 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); //设置post数据 $post_data = $post; curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //执行命令 $data = curl_exec($curl); //关闭URL请求 //显示获得的数据// print_r($data); if ($data) { curl_close($curl); return $data; }else{ $res = curl_error($curl); curl_close($curl); return $res; } }














