控制器:
/** * 發放現金紅包 */html' target='_blank'>public function payLuckyMoney() $obj2 = array(); //appid $obj2[ wxappid ] = config( wx_gzh.appId //商戶id $obj2[ mch_id ] = config( wx_sh.mchId //組合成28位,根據官方開發文檔,可以自行設置 $obj2[ mch_billno ] = config( wx_sh.mchId ) . date( YmdHis ) . rand(1000, 9999); // 調用接口的機器IP地址 $obj2[ client_ip ] = $_SERVER[ REMOTE_ADDR //接收紅包openid $obj2[ re_openid ] = session( openid /* 付款金額設置start,按照概率設置隨機發放。 * 1-200元之間,單位分。這里設置95%概率為1-2元,5%的概率為2-10元 */ $n = rand(1, 100); if ($n = 95) { $obj2[ total_amount ] = rand(100, 200); } else { $obj2[ total_amount ] = rand(200, 1000); } //$obj2[ total_amount ] = 100; /* 付款金額設置end */ // 紅包個數 $obj2[ total_num ] = 1; // 商戶名稱 $obj2[ send_name ] = 小門太 // 紅包祝福語 $obj2[ wishing ] = 恭喜發財,大吉大利 // 活動名稱 $obj2[ act_name ] = 小門太認證領紅包 // 備注 $obj2[ remark ] = 小門太紅包 /* 文檔中未說明以下變量,李富林博客中有。注釋起來也沒問題。不需要。 $obj2[ min_value ] = $money; $obj2[ max_value ] = $money; $obj2[ nick_name ] = 小門太紅包 */ $url = http://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack $isPay = pay_lucky_money($url, $obj2); $res = xml_to_array($isPay); // 發放成功,把紅包數據插入數據庫 if ($res[ return_msg ] == 發放成功 ) { // 發放成功,進行邏輯處理 } else { // 發放失敗,返回失敗原因 return $res[ return_msg }
common.php函數(你也可以常見一個類來進行調用):
// ---- 以下是微信現金紅包的區域start ---- ///** * 微信發放現金紅包核心函數,調用本函數就直接發放紅包了。 * @param $url 現金紅包的請求地址 * @param $obj * @return mixed */function pay_lucky_money($url, $obj){ //創建隨機字符串(32位) $obj[ nonce_str ] = str_rand(); //創建簽名 $sign = get_sign($obj, false); //halt($sign); $obj[ sign ] = $sign; //將簽名傳入數組 $postXml = array_to_xml($obj); //將參數轉為xml格式 //halt($postXml); $responseXml = curl_post_ssl($url, $postXml); //提交請求 //halt($responseXml); return $responseXml; * @param $arr 生成前面的參數 * @param $urlencode * @return string 返回加密后的簽名 */function get_sign($arr, $urlencode) $buff = //對傳進來的數組參數里面的內容按照字母順序排序,a在前面,z在最后(字典序) ksort($arr); foreach ($arr as $k = $v) { if (null != $v null != $v sign != $k) { //簽名不要轉碼 if ($urlencode) { $v = urlencode($v); $buff .= $k . = . $v . } // 去掉末尾符號“ ”,其實不用這個if,因為長度肯定大于0 if (strlen($buff) 0) { $stringA = substr($buff, 0, strlen($buff) - 1); } //簽名拼接api $stringSignTemp = $stringA . key= . config( wx_sh.key //簽名加密并大寫 $sign = strtoupper(md5($stringSignTemp)); return $sign;}//post請求網站,需要證書function curl_post_ssl($url, $vars, $second = 30, $aHeader = array()) $ch = curl_init(); //超時時間 curl_setopt($ch, CURLOPT_TIMEOUT, $second); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //這里設置代理,如果有的話 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //cert 與 key 分別屬于兩個.pem文件 //請確保您的libcurl版本是否支持雙向認證,版本高于7.20.1,相當于發curl驗證【當前文件所在目錄/cert/wxpay/】下的兩個pem證書文件。 curl_setopt($ch, CURLOPT_SSLCERT, dirname(__FILE__) . DIRECTORY_SEPARATOR . cert . DIRECTORY_SEPARATOR . wxpay . DIRECTORY_SEPARATOR . apiclient_cert.pem curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . DIRECTORY_SEPARATOR . cert . DIRECTORY_SEPARATOR . wxpay . DIRECTORY_SEPARATOR . apiclient_key.pem //curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. // cert .DIRECTORY_SEPARATOR. rootca.pem //這個不需要,因為大部分的操作系統都已經內置了rootca.pem證書了,就是常見的CA證書。 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;}// ---- 以下是微信現金紅包的區域end ---- //
————以上,因為我的代碼是寫在common.php下的,而common.php是在application目錄下的,所以證書放在 application/cert/wxpay/目錄之下
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
關于thinkphp行為的使用
使用PHPstudy在Windows服務器下部署PHP系統
以上就是ThinkPHP5微信現金紅包的開發的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答