php微信支付,接口签名校验工具校验通过,但请求接口提示签名错误,已贴源码,帮看看怎么解决(急)
大神帮忙看下是哪里错了,要怎么修复(急)!谢谢 请求结果(上边是发送的XML源原串,下方是返回结果),php代码在下方。 [图片] 我把上方输出的XML源串拿去“支付接口签名校验工具”中测试,测试结果是“校验通过” [图片] php代码 调用页面(做了自动加载): Pay::createOrder(1,1);
pay类部分代码如下: <meta charset="utf-8">
<?php
class Pay{
public static $appid="wx4********";
protected static $secret="9d324e********18";
public static $mch_id="*********";//商户号
public static $api_key="a************";//APIkey
protected static $siteurl="https://*************/wechat";//回执域名
public static function createOrder($aid,$amount,$billno=''){
date_default_timezone_set("PRC");
$url="https://api.mch.weixin.qq.com/pay/unifiedorder";
$data=self::getTem($aid,$amount,$billno);
$result=self::httpRequest($url,$data);
$re1 = simplexml_load_string($result,'SimpleXMLElement',LIBXML_NOCDATA);
$re2 = json_encode($re1);
$result2 = json_decode($re2,true);
echo htmlspecialchars($data);
echo "<br/>";
print_r($result2);
//return $result2;
}
public static function getTem($aid,$amount,$billno){
$data = self::getSign($aid,$amount,$billno);
$str="<xml>";
foreach($data as $key => $value){
if(is_numeric($value)){
$str.="<".$key.">".$value."</".$key.">";
} else {
$str.="<".$key."><![CDATA[".$value."]]></".$key.">";
}
}
$str.="</xml>";
return $str;
}
public static function getSign($aid,$amount,$billno){
$data=array();
$data['appid'] = self::$appid;//应用ID
$data['body'] = "付费文档获取-支付";//商品描述
$data['mch_id'] = self::$mch_id;//直连商户号
$data['nonce_str'] = self::getStr(12);//随机字符串
$data['notify_url'] = self::$siteurl ."/info.php";//通知地址
$data['out_trade_no'] = $billno==''?time().rand(10000,99999):$billno;//商户订单号
$data['trade_type'] = "NATIVE";//交易类型
$data['total_fee'] = $amount;//标价金额
$data['attach']= $aid;//
ksort($data);
$str = self::getString($data);
$str .= "key=". self::$api_key;
$sign = strtoupper(MD5($str));
$data['sign'] = $sign;//签名
return $data;
}
public static function getString($data){
$str="";
foreach($data as $k=>$v){
$str.=$k."=".$v."&";
}
return $str;
}
public static function getStr($number){//随机字符串$number长度
$name=substr(md5(uniqid(microtime(true),true)),8,$number);
return $name;
}
public static function httpRequest($url,$data=''){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL, $url);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
if(!empty($data)){
curl_setopt($curl,CURLOPT_POST,TRUE);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl,CURLOPT_HEADER,FALSE);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
}