1. 程式人生 > >ecshop二次開發-- 新增手機簡訊介面例項

ecshop二次開發-- 新增手機簡訊介面例項

為了更好的使用者體驗我們需要對iwebshop 密碼找回 使用適合(安全、實惠)的簡訊介面

例項:這次我們使用的是容聯雲的簡訊介面

simple.PHP控制器中

function send_message_mobile()方法中


接下來在classes/hsms.php中 send()方法中模仿其程式碼加入自己的介面型別並自己編寫一個rest.php檔案

plugins/hsms/rest.php --
<?php
/**
 * @copyright (c) 2015 aircheng.com
 * @file haiyan.php
 * @brief **簡訊傳送介面
 * @author nswe
* @date 2015/5/30 15:29:38 * @version 3.3 */ /** * @class haiyan * @brief 簡訊傳送介面 http://www.duanxin10086.com/logins.html */ class rest extends hsmsBase { private $AccountSid; private $AccountToken; private $AppId; private $ServerIP; private $ServerPort; private $SoftVersion; private
$Batch; //時間戳 private $BodyType = "xml";//包體格式,可填值:json 、xml private $enabeLog = true; //日誌開關。可填值:true、 private $Filename="./log.txt"; //日誌檔案 private $Handle; function __construct() { $this->Batch = date("YmdHis"); $this->ServerIP = 'app.cloopen.com'; $this->ServerPort =
'8883'; $this->SoftVersion = '2013-12-26'; $this->Handle = fopen($this->Filename, 'a'); $this->AccountSid ='8aaf070857a243ad0157a7307d5e03be'; $this->AccountToken ='15741441f4444b159331a9c44eb07ba6'; $this->AppId ='8aaf070857a243ad0157a7307da503c3'; } //private $submitUrl = "http://www.duanxin10086.com/sms.aspx?action=send"; /** * @brief 獲取config使用者配置 * @return array */ private function getConfig() { //如果後臺沒有設定的話,這裡手動配置也可以 $siteConfigObj = new Config("site_config"); return array( 'userid' => $siteConfigObj->sms_userid, 'username' => $siteConfigObj->sms_username, 'userpwd' => $siteConfigObj->sms_pwd, ); } /** * @brief 傳送簡訊 * @param string $mobile * @param string $content * @return */ public function send($mobile,$content) { $to=$mobile; $datas=$content; $tempId="1"; //主帳號鑑權資訊驗證,對必選引數進行判空。 $auth=$this->accAuth(); if($auth!=""){ return $auth; } // 拼接請求包體 if($this->BodyType=="json"){ $data=""; for($i=0;$i<count($datas);$i++){ $data = $data. "'".$datas[$i]."',"; } $body= "{'to':'$to','templateId':'$tempId','appId':'$this->AppId','datas':[".$data."]}"; }else{ $data=""; for($i=0;$i<count($datas);$i++){ $data = $data. "<data>".$datas[$i]."</data>"; } $body="<TemplateSMS> <to>$to</to> <appId>$this->AppId</appId> <templateId>$tempId</templateId> <datas>".$data."</datas> </TemplateSMS>"; } $this->showlog("request body = ".$body); // 大寫的sig引數 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成請求URL $url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig"; $this->showlog("request url = ".$url); // 生成授權:主帳戶Id + 英文冒號 + 時間戳。 $authen = base64_encode($this->AccountSid . ":" . $this->Batch); // 生成包頭 $header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen"); // 傳送請求 $result = $this->curl_post($url,$body,$header); $this->showlog("response body = ".$result); if($this->BodyType=="json"){//JSON格式 $datas=json_decode($result); }else{ //xml格式 $datas = simplexml_load_string(trim($result," \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包體錯誤'; // } //重新裝填資料 if($datas->statusCode==0){ if($this->BodyType=="json"){ $datas->TemplateSMS =$datas->templateSMS; unset($datas->templateSMS); } } //返回資料為result這裡修改為datas return $this->response($datas); } /** * @brief 解析結果 * @param $result 傳送結果 * @return string success or fail */ public function response($result) { //該外掛結果為0時說明成功! if($result->statusCode==0) { return 'success'; } else { return 'fail'; } } /** * @brief 配置檔案 */ public function getParam() { return array( "sms_userid" => "商戶ID", "sms_username" => "使用者名稱", "sms_pwd" => "密碼", ); } /** * 發起HTTPS請求 */ function curl_post($url,$data,$header,$post=1) { //初始化curl $ch = curl_init(); //引數設定 $res= curl_setopt ($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, $post); if($post) curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_HTTPHEADER,$header); $result = curl_exec ($ch); //連線失敗 if($result == FALSE){ if($this->BodyType=='json'){ $result = "{\"statusCode\":\"172001\",\"statusMsg\":\"網路錯誤\"}"; } else { $result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>網路錯誤</statusMsg></Response>"; } } curl_close($ch); return $result; } /** * 主帳號鑑權 */ function accAuth() { if($this->ServerIP==""){ $data = new stdClass(); $data->statusCode = '172004'; $data->statusMsg = 'IP為空'; return $data; } if($this->ServerPort<=0){ $data = new stdClass(); $data->statusCode = '172005'; $data->statusMsg = '埠錯誤(小於等於0)'; return $data; } if($this->SoftVersion==""){ $data = new stdClass(); $data->statusCode = '172013'; $data->statusMsg = '版本號為空'; return $data; } if($this->AccountSid==""){ $data = new stdClass(); $data->statusCode = '172006'; $data->statusMsg = '主帳號為空'; return $data; } if($this->AccountToken==""){ $data = new stdClass(); $data->statusCode = '172007'; $data->statusMsg = '主帳號令牌為空'; return $data; } if($this->AppId==""){ $data = new stdClass(); $data->statusCode = '172012'; $data->statusMsg = '應用ID為空'; return $data; } } /** * 列印日誌 * * @param log 日誌內容 */ function showlog($log){ if($this->enabeLog){ fwrite($this->Handle,$log."\n"); } } } //最後在個人中心設定好手機號碼之後就可以使用該簡訊介面來使用找回密碼功能了