php實現傳送簡訊

來源:互聯網
上載者:User
本文我們來揭秘使用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傳送簡訊驗證碼完成註冊功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.