一、封装微信企业付款类WeiXinPayToUser,如下图代码所示:
= ='' ='' ='' ='' ='' ='' ='';
<span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> __construct()
{
</span><span style="color: #800080">$this</span>->url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'<span style="color: #000000">;
</span><span style="color: #800080">$this</span>->curl_timeout = 10<span style="color: #000000">;
</span><span style="color: #800080">$this</span>->SSLROOTCA_PATH=<span style="color: #008080">dirname</span>(<span style="color: #ff00ff">__FILE__</span>).'/weixin/cert/rootca.pem'<span style="color: #000000">;
</span><span style="color: #800080">$this</span>->SSLCERT_PATH=<span style="color: #008080">dirname</span>(<span style="color: #ff00ff">__FILE__</span>).'/weixin/cert/apiclient_cert.pem'<span style="color: #000000">;
</span><span style="color: #800080">$this</span>->SSLKEY_PATH=<span style="color: #008080">dirname</span>(<span style="color: #ff00ff">__FILE__</span>).'/weixin/cert/apiclient_key.pem'<span style="color: #000000">;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span> setParameter(<span style="color: #800080">$key</span>,<span style="color: #800080">$value</span><span style="color: #000000">){
</span><span style="color: #800080">$this</span>->parameters[<span style="color: #800080">$key</span>]=<span style="color: #800080">$value</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">function</span> arrayToXml(<span style="color: #800080">$arr</span>,<span style="color: #800080">$dom</span>=0,<span style="color: #800080">$item</span>=0<span style="color: #000000">){
</span><span style="color: #0000ff">if</span> (!<span style="color: #800080">$dom</span><span style="color: #000000">){
</span><span style="color: #800080">$dom</span> = <span style="color: #0000ff">new</span> DOMDocument("1.0"<span style="color: #000000">);
}
</span><span style="color: #0000ff">if</span>(!<span style="color: #800080">$item</span><span style="color: #000000">){
</span><span style="color: #800080">$item</span> = <span style="color: #800080">$dom</span>->createElement("xml"<span style="color: #000000">);
</span><span style="color: #800080">$dom</span>->appendChild(<span style="color: #800080">$item</span><span style="color: #000000">);
}
</span><span style="color: #0000ff">foreach</span> (<span style="color: #800080">$arr</span> <span style="color: #0000ff">as</span> <span style="color: #800080">$key</span>=><span style="color: #800080">$val</span><span style="color: #000000">){
</span><span style="color: #800080">$itemx</span> = <span style="color: #800080">$dom</span>->createElement(<span style="color: #008080">is_string</span>(<span style="color: #800080">$key</span>)?<span style="color: #800080">$key</span>:"item"<span style="color: #000000">);
</span><span style="color: #800080">$item</span>->appendChild(<span style="color: #800080">$itemx</span><span style="color: #000000">);
</span><span style="color: #0000ff">if</span> (!<span style="color: #008080">is_array</span>(<span style="color: #800080">$val</span><span style="color: #000000">)){
</span><span style="color: #800080">$text</span> = <span style="color: #800080">$dom</span>->createTextNode(<span style="color: #800080">$val</span><span style="color: #000000">);
</span><span style="color: #800080">$itemx</span>->appendChild(<span style="color: #800080">$text</span><span style="color: #000000">);
}</span><span style="color: #0000ff">else</span><span style="color: #000000"> {
</span><span style="color: #800080">$this</span>->arrayToXml(<span style="color: #800080">$val</span>,<span style="color: #800080">$dom</span>,<span style="color: #800080">$itemx</span><span style="color: #000000">);
}
}
</span><span style="color: #800080">$dom</span>->encoding = 'UTF-8'; <span style="color: #008000">//</span><span style="color: #008000"> insert proper</span>
<span style="color: #0000ff">return</span> <span style="color: #800080">$dom</span>-><span style="color: #000000">saveXML();
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span> getSign(<span style="color: #800080">$paramArr</span>){<span style="color: #008000">//</span><span style="color: #008000">print_r($paramArr);</span>
<span style="color: #008080">ksort</span>(<span style="color: #800080">$paramArr</span><span style="color: #000000">);
</span><span style="color: #800080">$paramStr</span> = <span style="color: #008080">http_build_query</span>(<span style="color: #800080">$paramArr</span><span style="color: #000000">);
</span><span style="color: #800080">$paramStr</span>=<span style="color: #008080">urldecode</span>(<span style="color: #800080">$paramStr</span><span style="color: #000000">);
</span><span style="color: #800080">$param_temp</span>=<span style="color: #800080">$paramStr</span>.'&key='.<span style="color: #800080">$this</span>-><span style="color: #008080">key</span>;<span style="color: #008000">//</span><span style="color: #008000">echo $param_temp.'<br>';</span>
<span style="color: #800080">$signValue</span>=<span style="color: #008080">strtoupper</span>(<span style="color: #008080">md5</span>(<span style="color: #800080">$param_temp</span>));<span style="color: #008000">//</span><span style="color: #008000">echo $signValue.'<br>';</span>
<span style="color: #0000ff">return</span> <span style="color: #800080">$signValue</span><span style="color: #000000">;
}
</span><span style="color: #008000">/*</span><span style="color: #008000">*
* 生成请求xml数据
* @return string
</span><span style="color: #008000">*/</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> createXml()
{
</span><span style="color: #800080">$this</span>->parameters['mch_appid'] = <span style="color: #800080">$this</span>-><span style="color: #000000">appid;
</span><span style="color: #800080">$this</span>->parameters['mchid'] = <span style="color: #800080">$this</span>-><span style="color: #000000">mchid;
</span><span style="color: #008000">//</span><span style="color: #008000"> $this->parameters['nonce_str'] = md5(time());</span>
<span style="color: #800080">$this</span>->parameters['nonce_str'] = 'dddfff'<span style="color: #000000">;
</span><span style="color: #800080">$this</span>->parameters['sign'] = <span style="color: #800080">$this</span>->getSign(<span style="color: #800080">$this</span>-><span style="color: #000000">parameters);
</span><span style="color: #800080">$a</span>= <span style="color: #800080">$this</span>->arrayToXml(<span style="color: #800080">$this</span>-><span style="color: #000000">parameters);
</span><span style="color: #008000">//</span><span style="color: #008000">echo $a;</span>
<span style="color: #0000ff">return</span> <span style="color: #800080">$a</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> pay(){
</span><span style="color: #800080">$xml</span>=<span style="color: #800080">$this</span>-><span style="color: #000000">createXml();
</span><span style="color: #800080">$url</span>=<span style="color: #800080">$this</span>-><span style="color: #000000">url;
</span><span style="color: #0000ff">return</span> <span style="color: #800080">$this</span>->postXmlSSLCurl(<span style="color: #800080">$xml</span>,<span style="color: #800080">$url</span>,<span style="color: #800080">$second</span>=30<span style="color: #000000">);
}
</span><span style="color: #008000">/*</span><span style="color: #008000">*
* 作用:使用证书,以post方式提交xml到对应的接口url
</span><span style="color: #008000">*/</span>
<span style="color: #0000ff">function</span> postXmlSSLCurl(<span style="color: #800080">$xml</span>,<span style="color: #800080">$second</span>=30<span style="color: #000000">)
{
</span><span style="color: #800080">$ch</span> =<span style="color: #000000"> curl_init();
</span><span style="color: #008000">//</span><span style="color: #008000">超时时间</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_TIMEOUT,<span style="color: #800080">$second</span><span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY,'8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXYPORT,8080);</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_URL,<span style="color: #800080">$url</span><span style="color: #000000">);
curl_setopt(</span><span style="color: #800080">$ch</span>,CURLOPT_SSL_VERIFYPEER,<span style="color: #0000ff">FALSE</span><span style="color: #000000">);
curl_setopt(</span><span style="color: #800080">$ch</span>,CURLOPT_SSL_VERIFYHOST,<span style="color: #0000ff">FALSE</span><span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">设置header</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_HEADER,<span style="color: #0000ff">FALSE</span><span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">要求结果为字符串且输出到屏幕上</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_RETURNTRANSFER,<span style="color: #0000ff">TRUE</span><span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">设置证书
//curl_setopt($ch,CURLOPT_CAINFO,$this->SSLROOTCA_PATH);
//使用证书:cert 与 key 分别属于两个.pem文件
//默认格式为PEM,可以注释</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_SSLCERTTYPE,'PEM'<span style="color: #000000">);
curl_setopt(</span><span style="color: #800080">$ch</span>,CURLOPT_SSLCERT,<span style="color: #800080">$this</span>-><span style="color: #000000">SSLCERT_PATH);
</span><span style="color: #008000">//</span><span style="color: #008000">默认格式为PEM,可以注释</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_SSLKEYTYPE,CURLOPT_SSLKEY,<span style="color: #800080">$this</span>-><span style="color: #000000">SSLKEY_PATH);
</span><span style="color: #008000">//</span><span style="color: #008000">post提交方式</span>
curl_setopt(<span style="color: #800080">$ch</span>,CURLOPT_POST,<span style="color: #0000ff">true</span><span style="color: #000000">);
curl_setopt(</span><span style="color: #800080">$ch</span>,CURLOPT_POSTFIELDS,<span style="color: #800080">$xml</span><span style="color: #000000">);
</span><span style="color: #800080">$data</span> = curl_exec(<span style="color: #800080">$ch</span><span style="color: #000000">);
</span><span style="color: #008000">//</span><span style="color: #008000">返回结果</span>
<span style="color: #0000ff">if</span>(<span style="color: #800080">$data</span><span style="color: #000000">){
curl_close(</span><span style="color: #800080">$ch</span><span style="color: #000000">);
</span><span style="color: #0000ff">return</span> <span style="color: #800080">$data</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">else</span><span style="color: #000000"> {
</span><span style="color: #800080">$error</span> = curl_errno(<span style="color: #800080">$ch</span><span style="color: #000000">);
</span><span style="color: #0000ff">echo</span> "curl出错,错误码:<span style="color: #800080">$error</span>"."<br>"<span style="color: #000000">;
</span><span style="color: #0000ff">echo</span> "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>"<span style="color: #000000">;
curl_close(</span><span style="color: #800080">$ch</span><span style="color: #000000">);
</span><span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span><span style="color: #000000">;
}
}
}
二、调用WeiXinPayToUser,如下图所示:
=
->setParameter('openid','oy2lbszskklaslEKThrzqEziKEBzqU'
->setParameter('partner_trade_no','test-'.
->setParameter('check_name','NO_CHECK'
->setParameter('amount',100
->setParameter('desc','开发测试'
->setParameter('spbill_create_ip','127.0.0.1'); setParameter('re_user_name','Max wen');
// 设备信息
// $mchPay->setParameter('device_info','dev_server');
<span style="color: #800080">$response</span> = <span style="color: #800080">$mchPay</span>-><span style="color: #000000">postXmlSSL();
</span><span style="color: #0000ff">if</span>( !<span style="color: #0000ff">empty</span>(<span style="color: #800080">$response</span><span style="color: #000000">) ) {
</span><span style="color: #800080">$data</span> = <span style="color: #008080">simplexml_load_string</span>(<span style="color: #800080">$response</span>,<span style="color: #0000ff">null</span>,<span style="color: #000000"> LIBXML_NOCDATA);
</span><span style="color: #0000ff">echo</span> json_encode(<span style="color: #800080">$data</span><span style="color: #000000">);
}</span><span style="color: #0000ff">else</span><span style="color: #000000">{
</span><span style="color: #0000ff">echo</span> json_encode( <span style="color: #0000ff">array</span>('return_code' => 'FAIL','return_msg' => 'transfers_接口出错','return_ext' => <span style="color: #0000ff">array</span><span style="color: #000000">()) );
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。