首頁  >  文章  >  後端開發  >  php實作發送簡訊

php實作發送簡訊

小云云
小云云原創
2018-03-26 13:12:2014326瀏覽

本文我們來揭秘使用php來發送手機短信驗證碼的操作,是不是覺得以前在玩手機app註冊帳號的的時候,點擊發送驗證碼的時候,要不了幾秒鐘就會"滴"的一聲,驗證碼就發送到手機裡面了,是否有覺得很神奇呢?

1.  由於業務中需要寫入登入註冊的API的接口,所以了解了下手機號註冊的前後端互動的流程;

  ( 1)用戶操作客戶端點擊發送驗證碼,(然後客戶端ajax發送請求,並且按鈕處於60s靜默時間)

  (2)後端邏輯層,接受傳遞過來的手機號,驗證格式是否合法,進入資料庫匹配是否存在

  (3)產生驗證碼,存在session中,然後curl發送到第三方的短信接口鏈接中

  (4)配置第三方短信平台,向指定手機號使用者發送驗證碼資訊

2.  今天我們主要闡述第三方平台的配置,以及後台處理的邏輯;

3.  選擇的第三方平台為: (您也可以選擇其他平台,其原理都差不多類似)

(1) 賽迪·雲端通訊(  https://www.mysubmail.com )

(2) 註冊,實名認證,進入產品與服務,新模板,其模板語法可以查看其配套文檔

(3)去到"建立/管理AppIdD" 欄目,建立並啟用項目,然後產生預設的"APPID" 及"APPKEY" 


(4)去到首頁,點開"查看API開發文檔" 鏈接,獲取POST請求的鏈接:


          https://api.mysubmail.com/message/xsend


4. # 後台邏輯發展:


##

    核心:建立驗證碼-> 封裝POST請求函數  -> 發送驗證碼到第三方平台  -> 再由第三方轉寄至使用者的手機


#     * 由於新浪博客不支援markdown,只貼出核心程式碼以及踩過大坑的地方:


  

(1)發送驗證碼到第三方平台:(沒坑,邏輯很流暢的寫下來了

private function sendMessage()
 {
        $appId = "xxxxx";
        $appKey = "36426a9xxxxxxxxxxxx7bed8583a3c";
        $code = $this->makeCode(6);

        $data = [
            "appid" => $appId,
            "to" => $this->phone,
            "project" => "FoJ494",
            "vars" => '{"code":' . $code . ',"time":"60"}',
            "signature" => $appKey,
        ];

        $res = $this->httpRequest($data);

        var_dump($res);
}

(2)請求連結發送驗證碼資料到第三方平台(這裡有超級大坑啊  )

   -- 好吧,我們先正常寫下來:

private function httpRequest($data)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $this->RequestUrl);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    if (isset($data)) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }

    $res = curl_exec($curl);
    var_dump(curl_error($curl)); //打印请求错误
    curl_close($curl);
    return $res;
}

然後報錯:'SSL certificate problem: unable to get local issuer certificate' ,然後不急,按著官方的管道繼續操作:

   ---  去到 https://curl.haxx.se/docs/caextract.html 下載 cacert.pem

  

   ---  然後把down下的cacert.pem貼到php目錄下,然後進去php.ini 找到:";curl.cainfo",並且修改為:

         curl. cainfo = "C:/wamp/bin/php/php7.0.10/cacert.pem" ,好,沒什麼卵用 ,繼續報錯! !

##   ---  然後繼續找解決方法,然後根據網路資料,在其下面的";openssl.cafile " 修改為:openssl.cafile= "C:/wamp/bin/php/php7.0.10/cacert.pem" , 好吧,=_= ! 繼續報錯,我滴內心已經滿目瘡痍!

   ---  然後,去掉雙引號,加上單引號,去掉引號,都一一試過,心都開始涼了!依舊SSL憑證錯誤! !

   --- 後面,懷著如死水般的心情,繼續在google衝浪,一遍遍地被沖回沙灘,遍體鱗傷, 飢渴無力!

   ---  最後,終於,終於,臥槽! ! ! 試出來了~~~ 

 

(3)解決方法:

   在curl_exec()前面加上:(把cacert.pem檔案拷貝到目前目錄下,其他路徑也可)

 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); 
   curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); 
   curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

5.  最終效果:



相關建議:

#php使用簡訊寶發送簡訊的方法

jQuery實作發送簡訊倒數功能

php發送簡訊驗證碼完成註冊功能

以上是php實作發送簡訊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn