微信開發 -- 企業付款 PHP程式碼實現
阿新 • • 發佈:2018-12-24
<?php
// 引入SDK
import('Common.Util.WxPay');
/**
* 微信企業付款操作類
* Author : Max.wen
* DateTime: <15/9/16 11:00>
*/
class WxMchPay extends Wxpay_client_pub
{
/**
* API 引數
* @var array
* 'mch_appid' # 公眾號APPID
* 'mchid' # 商戶號
* 'device_info' # 裝置號
* 'nonce_str' # 隨機字串
* 'partner_trade_no' # 商戶訂單號
* 'openid' # 收款使用者openid
* 'check_name' # 校驗使用者姓名選項 針對實名認證的使用者
* 're_user_name' # 收款使用者姓名
* 'amount' # 付款金額
* 'desc' # 企業付款描述資訊
* 'spbill_create_ip' # Ip地址
* 'sign' # 簽名
*/
public $parameters = [];
public function __construct()
{
$this->url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成請求xml資料
* @return string
*/
public function createXml()
{
$this->parameters['mch_appid'] = WxPayConf_pub::APPID;
$this->parameters['mchid'] = WxPayConf_pub::MCHID;
$this->parameters['nonce_str'] = $this->createNoncestr();
$this->parameters['sign'] = $this->getSign($this->parameters);
return $this->arrayToXml($this->parameters);
}
/**
* 作用:使用證書,以post方式提交xml到對應的介面url
*/
function postXmlSSLCurl($xml,$url,$second=30)
{
$ch = curl_init();
//超時時間
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
//這裡設定代理,如果有的話
//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);
//設定證書
curl_setopt($ch,CURLOPT_CAINFO, WxPayConf_pub::SSLROOTCA_PATH);
//使用證書:cert 與 key 分別屬於兩個.pem檔案
//預設格式為PEM,可以註釋
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, WxPayConf_pub::SSLCERT_PATH);
//預設格式為PEM,可以註釋
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, WxPayConf_pub::SSLKEY_PATH);
//post提交方式
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$data = curl_exec($ch);
//返回結果
if($data){
curl_close($ch);
return $data;
}
else {
$error = curl_errno($ch);
echo "curl出錯,錯誤碼:$error"."<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>錯誤原因查詢</a></br>";
curl_close($ch);
return false;
}
}
}