ThinkPHP5微信現金紅包的開發

來源:互聯網
上載者:User
這篇文章主要介紹了關於ThinkPHP5現金紅包的開發 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

控制器:

    /**     * 發放現金紅包     */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 = "https://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 ---- //

————以上,因為My Code是寫在common.php下的,而common.php是在application目錄下的,所以認證放在 application/cert/wxpay/目錄之下

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.