php實(shí)現(xiàn)微信發(fā)紅包功能
本文實(shí)例為大家分享了php實(shí)現(xiàn)微信發(fā)紅包功能的具體代碼,供大家參考,具體內(nèi)容如下
微信商家后臺(tái)-現(xiàn)金紅包開(kāi)發(fā):
<?php class wxPay { //配置參數(shù)信息 const SHANGHUHAO = "1430998xxx";//商戶(hù)號(hào) const PARTNERKEY = "leFyTOXWzUEXxfp47WOu5d9xxxxxx"; //api,商戶(hù)后臺(tái) //核心支付函數(shù),參數(shù):請(qǐng)求地址和參數(shù) function pay($url,$obj) { $obj['nonce_str'] = $this->create_noncestr(); //創(chuàng)建隨機(jī)字符串 $stringA = $this->create_qianming($obj,false); //創(chuàng)建簽名 $stringSignTemp = $stringA."&key=leFyTOXWzUEXxfp47WOu5xxxxxx"; //簽名后加api $sign = strtoupper(md5($stringSignTemp)); //簽名加密并大寫(xiě) $obj['sign'] = $sign; //將簽名傳入數(shù)組 $postXml = $this->arrayToXml($obj); //將參數(shù)轉(zhuǎn)為xml格式 var_dump($postXml); $responseXml = $this->curl_post_ssl($url,$postXml); //提交請(qǐng)求 var_dump($responseXml); return $responseXml; } //生成簽名,參數(shù):生成簽名的參數(shù)和是否編碼 function create_qianming($arr,$urlencode) { $buff = ""; ksort($arr); //對(duì)傳進(jìn)來(lái)的數(shù)組參數(shù)里面的內(nèi)容按照字母順序排序,a在前面,z在最后(字典序) foreach ($arr as $k=>$v) { if(null!=$v && "null" != $v && "sign" != $k) { //簽名不要轉(zhuǎn)碼 if ($urlencode) { $v = urlencode($v); } $buff.=$k."=".$v."&"; } } if (strlen($buff)>0) { $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符號(hào)“&” } return $reqPar; } //生成隨機(jī)字符串,默認(rèn)32位 function create_noncestr($length=32) { //創(chuàng)建隨機(jī)字符 $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $str = ""; for($i=0;$i<$length;$i++) { $str.=substr($chars, mt_rand(0,strlen($chars)-1),1); } return $str; } //數(shù)組轉(zhuǎn)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請(qǐng)求網(wǎng)站,需要證書(shū) function curl_post_ssl($url, $vars, $second=30,$aHeader=array()) { $ch = curl_init(); //超時(shí)時(shí)間 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //這里設(shè)置代理,如果有的話 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //cert 與 key 分別屬于兩個(gè).pem文件 //請(qǐng)確保您的libcurl版本是否支持雙向認(rèn)證,版本高于7.20.1 curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR. 'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem'); curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR. 'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem'); curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. 'zhengshu'.DIRECTORY_SEPARATOR.'rootca.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; } } }
證書(shū)文件:
請(qǐng)?jiān)谖⑿派虘?hù)后臺(tái)-API安全下載,PHP請(qǐng)使用php的證書(shū)文件
微信紅包調(diào)用測(cè)試文件:
<?php require 'wxpay.class.php';<br><br>//數(shù)組參數(shù) $money = 100; //最低1元,單位分 $sender = "晨緣房產(chǎn)"; $obj2 = array(); $obj2['wxappid'] = ""; //appid $obj2['mch_id'] = ""; //商戶(hù)id $obj2['mch_billno'] = "商戶(hù)id".date('YmdHis').rand(1000,9999); //組合成28位,根據(jù)官方開(kāi)發(fā)文檔,可以自行設(shè)置 $obj2['client_ip'] = $_SERVER['REMOTE_ADDR']; $obj2['re_openid'] = "oUxO6v26wdyMHThD9kfDW6NB_xbE"; //接收紅包openid $obj2['total_amount'] = $money; $obj2['min_value'] = $money; $obj2['max_value'] = $money; $obj2['total_num'] = 1; $obj2['nick_name'] = $sender; $obj2['send_name'] = $sender; $obj2['wishing'] = "恭喜發(fā)財(cái)"; $obj2['act_name'] = $sender."紅包"; $obj2['remark'] = $sender."紅包"; $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; $wxpay = new wxPay(); $res = $wxpay->pay($url, $obj2); var_dump($res);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
php ajax數(shù)據(jù)傳輸和響應(yīng)方法
今天小編就為大家分享一篇php ajax數(shù)據(jù)傳輸和響應(yīng)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08YII2 實(shí)現(xiàn)多語(yǔ)言配置的方法分享
這篇文章主要介紹了YII2實(shí)現(xiàn)多語(yǔ)言配置的方法,文中YII2的版本是2.0.7,可能會(huì)與其他教程有不同,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01YII2.0之Activeform表單組件用法實(shí)例
這篇文章主要介紹了YII2.0之Activeform表單組件用法,結(jié)合實(shí)例形式Activeform表單組件的具體類(lèi)型及相關(guān)使用技巧,需要的朋友可以參考下2016-01-01php實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)操作類(lèi)分享
這篇文章主要介紹了php實(shí)現(xiàn)的mysql數(shù)據(jù)庫(kù)操作類(lèi),本文最后有使用方法,需要的朋友可以參考下2014-02-02php計(jì)算多個(gè)集合的笛卡爾積實(shí)例詳解
笛卡爾積又叫笛卡爾乘積,是一個(gè)叫笛卡爾的人提出來(lái)的。 簡(jiǎn)單的說(shuō)就是兩個(gè)集合相乘的結(jié)果。具體的定義要看看有關(guān)代數(shù)系的書(shū)的定義。這篇文章主要給大家介紹了利用php計(jì)算多個(gè)集合的笛卡爾積的方法實(shí)例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02PHP設(shè)計(jì)模式之裝飾器(裝飾者)模式(Decorator)入門(mén)與應(yīng)用詳解
這篇文章主要介紹了PHP設(shè)計(jì)模式之裝飾器(裝飾者)模式(Decorator),結(jié)合實(shí)例形式詳細(xì)分析了PHP裝飾者模式的概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12php實(shí)現(xiàn)根據(jù)中獎(jiǎng)概率抽獎(jiǎng)的算法
這篇文章主要為大家介紹了php實(shí)現(xiàn)根據(jù)中獎(jiǎng)概率抽獎(jiǎng)的算法的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解
這篇文章主要介紹了PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解,其實(shí)本文講解的還是它的基礎(chǔ)用法,需要的朋友可以參考下2014-10-10Swoole?webSocket消息服務(wù)系統(tǒng)代碼設(shè)計(jì)詳解
這篇文章主要為大家介紹了Swoole?webSocket消息服務(wù)系統(tǒng)代碼設(shè)計(jì)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03