1.紅包代碼php
<?php // +---------------------------------------------------------------------- // | 現金紅包 // +---------------------------------------------------------------------- namespace Purewechat\Controller; use SimpleXMLElement; class PayController extends BaseController { /** * 普通現金紅包 2017-08-22 */ public function redbagpay($parameter){ $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; $data = array( 'nonce_str' => createnoncestr(32), //隨機字符串,不長於32位 'mch_billno' => $parameter['mch_billno'], //商戶訂單號 'mch_id' => $parameter['mchid'], //商戶號 'wxappid' => $parameter['mch_appid'], //公衆帳號ID 'send_name' => $parameter['send_name'], //商戶名稱 're_openid' => $parameter['openid'], //用戶OPENID 'total_amount' => $parameter['money'] * 100, //付款金額,單位爲分 'total_num' => 1, //紅包發放總人數 'wishing' => $parameter['wishing'], //紅包祝福語 'client_ip' => get_client_ip(), //接口的機器Ip地址 'act_name' => $parameter['act_name'], //活動名稱 'remark' => $parameter['remark'], //備註 ); $data['sign'] = $this -> getsign($data,$parameter);//生成簽名 $xml = new SimpleXMLElement('<xml></xml>'); data2xml($xml, $data); $data_xml = $xml->asXML(); $result = $this -> curl_post_ssl($url, $data_xml, $second=30,$aHeader=array(),$parameter); $result = xmltoarray($result); apilog('','wechat','redbagpay',$url, serializeMysql($data), serializeMysql($result)); return $result; } /** * 微信企業付款接口-格式化參數,簽名過程須要使用 */ public function curl_post_ssl($url, $vars, $second=30,$aHeader=array(),$parameter){ $ch = curl_init(); //超時時間 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //這裏設置代理,若是有的話 //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98'); //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); //如下兩種方式需選擇一種 //第一種方法,cert 與 key 分別屬於兩個.pem文件 //默認格式爲PEM,能夠註釋 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,getcwd().$parameter['path1']); //默認格式爲PEM,能夠註釋 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,getcwd().$parameter['path2']); if( count($aHeader) >= 1 ){ curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); } curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); $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; } } public function getsign($data,$param){ foreach($data as $k => $v){ if($v){ $Parameters[$k] = $v; } } ksort($Parameters); foreach ($Parameters as $k => $v){ $String .= $k . "=" . $v . "&"; } $String = $String."key=".$param['partnerkey']; $String = md5($String); $result = strtoupper($String); return $result; } }
2.在須要的地方調用sql
public function index(){ $configModel = M('WeixinConfig'); $payModel = M('WeixinPay'); $userinfo = session('userinfo'); $config = $configModel -> where(array('uid'=>WID)) -> find(); $pay = $payModel -> where(array('uid'=>WID)) -> find(); $wxpay = serializeMysql($pay['wxpay'],1); $ordernumber = createnumber("MallOrder"); $parameter = array( 'mch_appid' => $config['appid'], //公衆平臺APPID 'mchid' => $wxpay['mchid'], //商戶號 'partnerkey' => $wxpay['partnerkey'], //密鑰 'money' => 1, 'openid' => $userinfo['openid'], //用戶OPENID 'mch_billno' => $ordernumber, //付款訂單號,不能重複 'send_name' => '測試', 'wishing' => 'hello', 'act_name' => '測試活動', 'remark' => 'send', 'path1' => '/Public/Common/apiclient/'.WID.'/apiclient_cert.pem', //證書1路徑 'path2' => '/Public/Common/apiclient/'.WID.'/apiclient_key.pem' //證書2路徑 ); $Pay = A('Purewechat/Pay'); $data = $Pay -> redbagpay($parameter); }