本文實例講述了php實現微信企業號支付個人的方法。,具體如下:
導語:分銷商,微商提現怎么提?
直接用微信支付。
實現如下:
微信支付配置
/*微信支付*/ 'PAY_WEIXIN' => array( 'appid' => 'XXXX', 'appsecret' => 'XXXXXXX', 'mchid' => '1283301801', //商戶號 'key' => 'zhudianbaodiandodozhudianbao0527', //商戶支付秘鑰 'apiclient_cert' => 'Conf/cert/apiclient_cert.pem', //商戶證書apiclient_cert.pem 'apiclient_key' => 'Conf/cert/apiclient_key.pem', //商戶證書apiclient_key.pem )
arrayToXml
/*** array轉xml*/function arrayToXml($arr){ $xml = "<xml>"; foreach ($arr as $key=>$val) { if (is_numeric($val)) { $xml.="<".$key.">".$val."</".$key.">"; } else $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } $xml.="</xml>"; return $xml;}
使用證書,以post方式提交xml到對應的接口url
/*** 作用:使用證書,以post方式提交xml到對應的接口url*/function postXmlSSLCurl($xml, $url, $second, $cert, $key){ $ch = curl_init(); //超時時間 curl_setopt($ch,CURLOPT_TIMEOUT,$second ? $second : $this->timeout); //這里設置代理,如果有的話 //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8'); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); //設置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求結果為字符串且輸出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); //設置證書 //使用證書:cert 與 key 分別屬于兩個.pem文件 //默認格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,$cert); //默認格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, $key); //post提交方式 curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data = curl_exec($ch); //返回結果 if($data){ curl_close($ch); return $this->xmlToArray($data); } else { $error = curl_errno($ch); echo "curl出錯,錯誤碼:$error"."<br>"; curl_close($ch); return false; }}
企業向個人付款
//企業向個人付款public function payToUser($params, $key, $apicent_cert, $apiclient_key) { $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //檢測必填參數 if($params["partner_trade_no"] == null) { // exit("退款申請接口中,缺少必填參數partner_trade_no!"."<br>"); }elseif($params["openid"] == null){ exit("退款申請接口中,缺少必填參數openid!"."<br>"); }elseif($params["check_name"] == null){ //NO_CHECK:不校驗真實姓名 FORCE_CHECK:強校驗真實姓名(未實名認證的用戶會校驗失敗,無法轉賬)OPTION_CHECK:針對已實名認證的用戶才校驗真實姓名(未實名認證用戶不校驗,可以轉賬成功) exit("退款申請接口中,缺少必填參數check_name!"."<br>"); }elseif(($params["check_name"] == 'FORCE_CHECK' or $params["check_name"] == 'OPTION_CHECK') && ($params["re_user_name"] == null)){ //收款用戶真實姓名。 exit("退款申請接口中,缺少必填參數re_user_name!"."<br>"); }elseif($params["amount"] == null){ exit("退款申請接口中,缺少必填參數amount!"."<br>"); }elseif($params["desc"] == null){ exit("退款申請接口中,缺少必填參數desc!"."<br>"); } $params["mch_appid"] = $this->appid;//公眾賬號ID $params["mchid"] = $this->mchid;//商戶號 $params["nonce_str"] = $this->createNoncestr();//隨機字符串 $params['spbill_create_ip'] = $_SERVER['REMOTE_ADDR'] == '::1' ? '192.127.1.1' : $_SERVER['REMOTE_ADDR'];//獲取IP $params["sign"] = $this->getSign($params, $key);//簽名 $xml = $this->arrayToXml($params); return $this->postXmlSSLCurl($xml, $url, false, $apicent_cert, $apiclient_key);}
新聞熱點
疑難解答