php版微信發(fā)紅包接口用法示例
本文實例講述了php版微信發(fā)紅包接口用法。分享給大家供大家參考,具體如下:
微信紅包功能我相信各位朋友都知道吧,但如果我們要把紅包集成到網(wǎng)站那么要如何來做呢?這里小編就來為各位分享一個php 微信發(fā)紅包接口測試實例,希望文章能夠幫助到各位朋友
下面是一個類,使用方法:
$arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U'; $arr['hbname']="提現(xiàn)申請"; $arr['body']="您的提現(xiàn)申請已經(jīng)成功"; $arr['fee']=1; $comm = new Common_util_pub(); $re = $comm->sendhongbaoto($arr); var_dump($re);
注意證書位置和 商戶后臺設(shè)置的key需要修改.
<?php header("Content-type: text/html; charset=utf-8"); class Common_util_pub { /** * hbname 紅包名稱 fee 紅包金額 /元 body 內(nèi)容 openid 微信用戶id * @param undefined $arr * * @return */ public function sendhongbaoto($arr){ //$comm = new Common_util_pub(); $data['mch_id'] = '120005402'; $data['mch_billno'] = '120005402'.date("Ymd",time()).date("His",time()).rand(1111,9999); $data['nonce_str'] = self::createNoncestr(); $data['re_openid'] = $arr['openid']; $data['wxappid'] = 'wx8axxxxxbac4905'; $data['nick_name'] = $arr['hbname']; $data['send_name'] = $arr['hbname']; $data['total_amount'] = $arr['fee']*100; $data['min_value'] = $arr['fee']*100; $data['max_value'] = $arr['fee']*100; $data['total_num'] = 1; $data['client_ip'] = $_SERVER['REMOTE_ADDR']; $data['act_name'] = '測試活動'; $data['remark'] = '備注一下'; $data['wishing'] = $arr['body']; if(!$data['re_openid']) { $rearr['return_msg']='缺少用戶openid'; return $rearr; } $data['sign'] = self::getSign($data); $xml = self::arrayToXml($data); //var_dump($xml); $url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; $re = self::wxHttpsRequestPem($xml,$url); $rearr = self::xmlToArray($re); return $rearr; } function trimString($value) { $ret = null; if (null != $value) { $ret = $value; if (strlen($ret) == 0) { $ret = null; } } return $ret; } /** * 作用:產(chǎn)生隨機字符串,不長于32位 */ public function createNoncestr( $length = 32 ) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } /** * 作用:格式化參數(shù),簽名過程需要使用 */ function formatBizQueryParaMap($paraMap, $urlencode) { $buff = ""; ksort($paraMap); foreach ($paraMap as $k => $v) { if($urlencode) { $v = urlencode($v); } //$buff .= strtolower($k) . "=" . $v . "&"; $buff .= $k . "=" . $v . "&"; } $reqPar; if (strlen($buff) > 0) { $reqPar = substr($buff, 0, strlen($buff)-1); } return $reqPar; } /** * 作用:生成簽名 */ public function getSign($Obj) { foreach ($Obj as $k => $v) { $Parameters[$k] = $v; } //簽名步驟一:按字典序排序參數(shù) ksort($Parameters); $String = $this->formatBizQueryParaMap($Parameters, false); //echo '【string1】'.$String.'</br>'; //簽名步驟二:在string后加入KEY $String = $String."&key="."254554sefg4exxxxxxxxs5cds1"; // 商戶后臺設(shè)置的key //echo "【string2】".$String."</br>"; //簽名步驟三:MD5加密 $String = md5($String); //echo "【string3】 ".$String."</br>"; //簽名步驟四:所有字符轉(zhuǎn)為大寫 $result_ = strtoupper($String); //echo "【result】 ".$result_."</br>"; return $result_; } /** * 作用:array轉(zhuǎn)xml */ public 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; } /** * 作用:將xml轉(zhuǎn)為array */ public function xmlToArray($xml) { //將XML轉(zhuǎn)為array $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; } public function wxHttpsRequestPem( $vars,$url, $second=30,$aHeader=array()){ $ch = curl_init(); //超時時間 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //這里設(shè)置代理,如果有的話 //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,dirname(__FILE__).'/hongbao/apiclient_cert.pem'); //默認格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/hongbao/apiclient_key.pem'); curl_setopt($ch,CURLOPT_CAINFO,'PEM'); curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/hongbao/rootca.pem'); //第二種方式,兩個文件合成一個.pem文件 //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem'); 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; } } } ?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP微信開發(fā)技巧匯總》、《PHP編碼與轉(zhuǎn)碼操作技巧匯總》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
Laravel解決nesting level錯誤和隱藏index.php的問題
今天小編就為大家分享一篇Laravel解決nesting level錯誤和隱藏index.php的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10PHP框架Laravel中實現(xiàn)supervisor執(zhí)行異步進程的方法
這篇文章主要給大家介紹了PHP框架Laravel中實現(xiàn)supervisor執(zhí)行異步進程的方法,文中介紹的非常詳細,相信對大家具有一定的參考學(xué)習價值,需要的朋友們下面來一起看看吧。2017-06-06關(guān)于擴展 Laravel 默認 Session 中間件導(dǎo)致的 Session 寫入失效問題分析
這篇文章主要介紹了關(guān)于擴展 Laravel 默認 Session 中間件導(dǎo)致的 Session 寫入失效問題分析的相關(guān)資料,需要的朋友可以參考下2016-01-01php設(shè)計模式之狀態(tài)模式實例分析【星際爭霸游戲案例】
這篇文章主要介紹了php設(shè)計模式之狀態(tài)模式,結(jié)合星際爭霸游戲案例形式分析了php狀態(tài)模式相關(guān)原理、使用技巧與注意事項,需要的朋友可以參考下2020-03-03php實現(xiàn)在線生成條形碼示例分享(條形碼生成器)
php實現(xiàn)在線生成條形碼,可以做一個條形碼生成器,大家參考使用吧2013-12-12php empty 函數(shù)判斷結(jié)果為空但實際值卻為非空的原因解析
這篇文章主要介紹了php empty 函數(shù)判斷結(jié)果為空但實際值卻為非空的原因解析,下面是腳本之家小編處理之后的調(diào)試記錄,分享到腳本之家平臺,感興趣的朋友一起看看2018-05-05laravel-admin 實現(xiàn)給grid的列添加行數(shù)序號的方法
今天小編就為大家分享一篇laravel-admin 實現(xiàn)給grid的列添加行數(shù)序號的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10