/**
* 格式化參數格式化成url參數*/
public function ToUrl($arr)
{$buff = "";foreach ($arr as $k => $v)
{if($k != "sign" && $v != "" && !is_array($v)){$buff .= $k . "=" . $v . "&";
}
}$buff = trim($buff, "&");return $buff;
}//將亂序的數組
public function ToSign($arr,$key)
{//簽名步驟一:按字典序排序參數
ksort($arr);$string = ToUrl($arr);//簽名步驟二:在string后加入KEY
$string = $string . "&key=".$key;//簽名步驟三:MD5加密
$string = md5($string);//簽名步驟四:所有字符轉為大寫
// $result1 = strtoupper($string);
return $string;
}/**
* 輸出xml字符
* @throws WxPayException
**/
public static function ToXml($arr)
{if(!is_array($arr) || count($arr) <= 0)
{echo ‘數據異常‘;
}$xml = "";foreach ($arr as $key=>$val)
{if (is_numeric($val)){$xml.="".$val."".$key.">";
}else{$xml.="".$key.">";
}
}$xml.="";return $xml;
}/**
* zll 生成唯一訂單號*/
public functionorder_sn(){$str = "qyfk".uniqid();return $str;
}/**
* zll 將信息提交到微信服務器,發起企業付款*/
public function qyzf_post($url,$xml,$config,$second=30){$ch =curl_init();
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//curl_setopt($ch,CURLOPT_SSLCERT,"/home/lizi/addons/grow/template/mobile/cash/apiclient_cert.pem");
// curl_setopt($ch,CURLOPT_SSLKEY,"/home/lizi/addons/grow/template/mobile/cash/apiclient_key.pem");
$str = ‘D:/www/‘;//證書必須使用絕對路徑,否則報錯,錯誤貌似是52什么的
curl_setopt($ch,CURLOPT_SSLCERTTYPE,‘PEM‘);
curl_setopt($ch,CURLOPT_SSLCERT,$str.trim($config[‘apiclient_cert‘],‘.‘));
curl_setopt($ch,CURLOPT_SSLKEYTYPE,‘PEM‘);
curl_setopt($ch,CURLOPT_SSLKEY,$str.trim($config[‘apiclient_key‘],‘.‘));
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);$data = curl_exec($ch);if($data){
curl_close($ch);return $data;
}else{$error = curl_errno($ch);echo "call faild, errorCode:$error\n";
curl_close($ch);return false;
}
}/**
* zll 企業付款*/
public function qiyezhifu($data){//解釋amount為付款金額,單位分,貌似最低1元,desc為付款的描述(必填),ip就是服務器ip必填
//$data = array(‘wxappid‘=>14,‘openid‘=>‘oRyzq0LrtuqKqQdH-FubBqcMuTi8-‘,‘amount‘=>100,‘desc‘=>‘提現獎勵‘,‘ip‘=>‘123.207.19.254‘);
//獲取數據庫的支付配置信息
$config = get_pay_conf($data[‘wxappid‘]);if($config){//對必備參數進行有效性判斷
if(empty($config[‘appid‘]) || empty($config[‘shh‘]) || empty($config[‘partnerkey‘]) || empty($data[‘amount‘]) || empty($config[‘apiclient_cert‘]) || empty($config[‘apiclient_key‘])){throw new Exception("支付配置中的appid或商戶號或支付秘鑰不能為空,或支付金額不能為空");
}else{$da[‘mch_appid‘] = $config[‘appid‘]; //appid
$da[‘mchid‘] = $config[‘shh‘]; //商戶號
$da[‘nonce_str‘] = $this->getStr(32); //隨機字符串
$da[‘partner_trade_no‘] = $this->order_sn(); //訂單號,保持唯一性即可
$da[‘openid‘] = $data[‘openid‘]; //粉絲的openid
$da[‘check_name‘] = "NO_CHECK"; //NO_CHECK:不校驗真實姓名 FORCE_CHECK:強校驗真實姓名(未實名認證的用戶會校驗失敗,無法轉賬) OPTION_CHECK:針對已實名認證的用戶才校驗真實姓名(未實名認證用戶不校驗,可以轉賬成功)
//$da[‘re_user_name‘] = ""; //收款用戶真實姓名。 如果check_name設置為FORCE_CHECK或OPTION_CHECK,則必填用戶真實姓名
$da[‘amount‘] = $data[‘amount‘]; //付款金額,單位分
$da[‘desc‘] = $data[‘desc‘] ? $data[‘desc‘]:"提現獎勵"; //企業付款描述信息
$da[‘spbill_create_ip‘] = $data[‘ip‘] ? $data[‘ip‘] : "123.207.19.254"; //服務器ip
$da[‘sign‘] = $this->ToSign($da, $config[‘partnerkey‘]);//生成簽名
//$da[‘key‘] = $config[‘partnerkey‘]; //支付秘鑰
//將數組轉為xml
$xml = $this->ToXml($da);$url = ‘https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers‘;$this->qyzf_post($url,$xml,$config);
}
}else{return false;
}
}