tp5對(duì)接阿里大魚短信接口

?先說一下吧圾旨,這篇文章主要教大家如何使用tp5來使用阿里短信平臺(tái)最新版2.0sdk摘悴,也就是所謂的前阿里大魚。

?但是高手略過啊碾篡,只針對(duì)新手虱而,如果大家發(fā)現(xiàn)有什么問題,歡迎留言指出耽梅,我會(huì)更正薛窥!

?首先我們下載官方完整包的SDK:

?官方標(biāo)明了啊,PHP版本一定要不低于5.5

?我這邊使用的是PHP輕量版本

◆◆第一步◆◆

下載PHP輕量版sdk,我們只用到其中的一個(gè)文件--簽名文件

◆◆第二步◆◆

將SignatureHelper.php重命名為Signature.php

◆◆第三步◆◆

新建sms.php同級(jí)文件眼姐,引用剛重命名的PHP文件

◆◆發(fā)送短信◆◆

◆◆Sms.php代碼◆◆

namespace app\api\controller;

use think\Controller;

use think\Db;

require_once 'Signature.php';

//短信接口

class Sms extends Controller

{

? ? public function send(){

? ? ? ? self::sendSms('156***88507',4,'888888699');

? ? }

? ? public static function? sendSms($phone,$type,$code,$remark = ''){

? ? ? ? $params = array ();

? ? ? ? //阿里云的AccessKey

? ? ? ? $accessKeyId = '阿里云后臺(tái)ak';

? ? ? ? //阿里云的Access Key Secret

? ? ? ? $accessKeySecret = '阿里云后臺(tái)sk';

? ? ? ? //要發(fā)送的手機(jī)號(hào)

? ? ? ? $params["PhoneNumbers"] = $phone;

? ? ? ? //簽名诅迷,第三步申請(qǐng)得到

? ? ? ? $params["SignName"] = '悠阿貍';

? ? ? ? //模板name,第三步申請(qǐng)得到

? ? ? ? switch ($type){

? ? ? ? ? ? case 1:

? ? ? ? ? ? ? ? //已完成-用戶接收此通知? ? [親愛的會(huì)員众旗,您提交的${name}訂單罢杉,已經(jīng)完成交易~感謝您的支持!]

? ? ? ? ? ? ? ? $params["TemplateCode"] ='SMS_178995163';

? ? ? ? ? ? ? ? $params['TemplateParam'] = Array (

? ? ? ? ? ? ? ? ? ? "name" => $code

? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 2:

? ? ? ? ? ? ? ? //確認(rèn)接單-用戶接收? ? ? [親愛的會(huì)員贡歧,您提交的${name}訂單,師傅已經(jīng)確認(rèn)接單滩租。我們會(huì)盡快上門收貨,記得關(guān)注我們的公眾號(hào)喔~感謝您的支持利朵!]

? ? ? ? ? ? ? ? $params["TemplateCode"] = 'SMS_178990166';

? ? ? ? ? ? ? ? $params['TemplateParam'] = Array (

? ? ? ? ? ? ? ? ? ? "name" => $code

? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 3:

? ? ? ? ? ? ? ? //用戶下單成功-車夫接收? [您有新的訂單待處理律想,客戶聯(lián)系電話:${phone},訂單摘要:${remark}绍弟,請(qǐng)及時(shí)處理技即。]

? ? ? ? ? ? ? ? $params["TemplateCode"] = 'SMS_178980185';

? ? ? ? ? ? ? ? $params['TemplateParam'] = Array (

? ? ? ? ? ? ? ? ? ? "phone" => $code,

? ? ? ? ? ? ? ? ? ? "remark" => $remark,

? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 4:

? ? ? ? ? ? ? ? //新訂單通知-車夫接收? ? ? [您有一條新訂單等待處理,請(qǐng)及時(shí)前往車夫系統(tǒng)操作此訂單!]

? ? ? ? ? ? ? ? $params["TemplateCode"] = 'SMS_178995204';

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? default:

? ? ? ? ? ? ? ? echo json_encode('模板參數(shù)錯(cuò)誤',JSON_UNESCAPED_UNICODE);

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? // *** 需用戶填寫部分結(jié)束, 以下代碼若無必要無需更改***

? ? ? ? if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {

? ? ? ? ? ? $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);

? ? ? ? }

? ? ? ? // 初始化SignatureHelper實(shí)例用于設(shè)置參數(shù)樟遣,簽名以及發(fā)送請(qǐng)求

? ? ? ? $helper = new Signature();

? ? ? ? try{

? ? ? ? ? ? // 此處可能會(huì)拋出異常而叼,注意catch

? ? ? ? ? ? $content = $helper->request(

? ? ? ? ? ? ? ? $accessKeyId,

? ? ? ? ? ? ? ? $accessKeySecret,

? ? ? ? ? ? ? ? "dysmsapi.aliyuncs.com",

? ? ? ? ? ? ? ? array_merge($params, array(

? ? ? ? ? ? ? ? ? ? "RegionId" => "cn-hangzhou",

? ? ? ? ? ? ? ? ? ? "Action" => "SendSms",

? ? ? ? ? ? ? ? ? ? "Version" => "2017-05-25",

? ? ? ? ? ? ? ? ))

? ? ? ? ? ? // fixme 選填: 啟用https

// ,true

? ? ? ? ? ? );

? ? ? ? ? ? $res=array('errCode'=>0,'msg'=>'ok');

? ? ? ? ? ? if($content->Message!='OK'){

? ? ? ? ? ? ? ? $res['errCode']=1;

? ? ? ? ? ? ? ? $res['msg']=$content->Message;

? ? ? ? ? ? }

? ? ? ? ? echo json_encode($res,JSON_UNESCAPED_UNICODE);

? ? ? ? }catch(\Exception $e){

? ? ? ? ? ? echo '短信接口請(qǐng)求錯(cuò)誤';exit;

? ? ? ? }

}

}

◆◆Signature.php代碼◆◆

namespace app\api\controller;

/**

* 簽名助手 2017/11/19

*

* Class SignatureHelper

*/

class Signature {

? ? /**

? ? * 生成簽名并發(fā)起請(qǐng)求

? ? *

? ? * @param $accessKeyId string AccessKeyId (https://ak-console.aliyun.com/)

? ? * @param $accessKeySecret string AccessKeySecret

? ? * @param $domain string API接口所在域名

? ? * @param $params array API具體參數(shù)

? ? * @param $security boolean 使用https

? ? * @param $method boolean 使用GET或POST方法請(qǐng)求,VPC僅支持POST

? ? * @return bool|\stdClass 返回API接口調(diào)用結(jié)果豹悬,當(dāng)發(fā)生錯(cuò)誤時(shí)返回false

*/

? ? public function request($accessKeyId, $accessKeySecret, $domain, $params, $security=false, $method='POST') {

? ? ? ? $apiParams = array_merge(array (

? ? ? ? ? ? "SignatureMethod" => "HMAC-SHA1",

? ? ? ? ? ? "SignatureNonce" => uniqid(mt_rand(0,0xffff), true),

? ? ? ? ? ? "SignatureVersion" => "1.0",

? ? ? ? ? ? "AccessKeyId" => $accessKeyId,

? ? ? ? ? ? "Timestamp" => gmdate("Y-m-d\TH:i:s\Z"),

? ? ? ? ? ? "Format" => "JSON",

? ? ? ? ), $params);

? ? ? ? ksort($apiParams);

? ? ? ? $sortedQueryStringTmp = "";

? ? ? ? foreach ($apiParams as $key => $value) {

? ? ? ? ? ? $sortedQueryStringTmp .= "&" . $this->encode($key) . "=" . $this->encode($value);

? ? ? ? }

? ? ? ? $stringToSign = "${method}&%2F&" . $this->encode(substr($sortedQueryStringTmp, 1));

? ? ? ? $sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&",true));

? ? ? ? $signature = $this->encode($sign);

? ? ? ? $url = ($security ? 'https' : 'http')."://{$domain}/";

? ? ? ? try {

? ? ? ? ? ? $content = $this->fetchContent($url, $method, "Signature={$signature}{$sortedQueryStringTmp}");

? ? ? ? ? ? return json_decode($content);

? ? ? ? } catch( \Exception $e) {

? ? ? ? ? ? return false;

? ? ? ? }

}

? ? private function encode($str)

{

? ? ? ? $res = urlencode($str);

? ? ? ? $res = preg_replace("/\+/", "%20", $res);

? ? ? ? $res = preg_replace("/\*/", "%2A", $res);

? ? ? ? $res = preg_replace("/%7E/", "~", $res);

? ? ? ? return $res;

? ? }

? ? private function fetchContent($url, $method, $body) {

? ? ? ? $ch = curl_init();

? ? ? ? if($method == 'POST') {

? ? ? ? ? ? curl_setopt($ch, CURLOPT_POST, 1);//post提交方式

? ? ? ? ? ? curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

? ? ? ? } else {

? ? ? ? ? ? $url .= '?'.$body;

? ? ? ? }

? ? ? ? curl_setopt($ch, CURLOPT_URL, $url);

? ? ? ? curl_setopt($ch, CURLOPT_TIMEOUT, 5);

? ? ? ? curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

? ? ? ? curl_setopt($ch, CURLOPT_HTTPHEADER, array(

? ? ? ? ? ? "x-sdk-client" => "php/2.0.0"

? ? ? ? ));

? ? ? ? if(substr($url, 0,5) == 'https') {

? ? ? ? ? ? curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

? ? ? ? ? ? curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

? ? ? ? }

? ? ? ? $rtn = curl_exec($ch);

? ? ? ? if($rtn === false) {

? ? ? ? ? ? // 大多由設(shè)置等原因引起葵陵,一般無法保障后續(xù)邏輯正常執(zhí)行,

? ? ? ? ? ? // 所以這里觸發(fā)的是E_USER_ERROR瞻佛,會(huì)終止腳本執(zhí)行脱篙,無法被try...catch捕獲,需要用戶排查環(huán)境、網(wǎng)絡(luò)等故障

? ? ? ? ? ? trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);

? ? ? ? }

? ? ? ? curl_close($ch);

? ? ? ? return $rtn;

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绊困,一起剝皮案震驚了整個(gè)濱河市忍弛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌考抄,老刑警劉巖细疚,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異川梅,居然都是意外死亡疯兼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門贫途,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吧彪,“玉大人,你說我怎么就攤上這事丢早∫搪悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵怨酝,是天一觀的道長傀缩。 經(jīng)常有香客問我,道長农猬,這世上最難降的妖魔是什么赡艰? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮斤葱,結(jié)果婚禮上慷垮,老公的妹妹穿的比我還像新娘。我一直安慰自己揍堕,他們只是感情好料身,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衩茸,像睡著了一般芹血。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上递瑰,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天祟牲,我揣著相機(jī)與錄音隙畜,去河邊找鬼抖部。 笑死,一個(gè)胖子當(dāng)著我的面吹牛议惰,可吹牛的內(nèi)容都是我干的慎颗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俯萎!你這毒婦竟也來了傲宜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤夫啊,失蹤者是張志新(化名)和其女友劉穎函卒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撇眯,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡报嵌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熊榛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锚国。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖玄坦,靈堂內(nèi)的尸體忽然破棺而出血筑,到底是詐尸還是另有隱情,我是刑警寧澤煎楣,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布豺总,位于F島的核電站,受9級(jí)特大地震影響择懂,放射性物質(zhì)發(fā)生泄漏园欣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一休蟹、第九天 我趴在偏房一處隱蔽的房頂上張望沸枯。 院中可真熱鬧,春花似錦赂弓、人聲如沸绑榴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翔怎。三九已至,卻和暖如春杨耙,著一層夾襖步出監(jiān)牢的瞬間赤套,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工珊膜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留容握,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓车柠,卻偏偏與公主長得像剔氏,于是被迫代替她去往敵國和親塑猖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原創(chuàng)文章來源:墨白`Blog 一谈跛、config.php配置文件配置公共參數(shù)(代碼如下): //阿里大魚 'Al...
    Defender_H閱讀 365評(píng)論 0 0
  • 用【云片網(wǎng)】為案例 原生php <?phpheader("Content-Type:text/html;chars...
    小蝎子tt閱讀 1,953評(píng)論 0 1
  • 最近公司切換阿里云短信服務(wù)羊苟,只能用新的sdk,官方的api接口說明太簡單了感憾,sdk太亂了 官方提供的屬實(shí)太亂太冗余...
    笑笑又奈何閱讀 1,937評(píng)論 0 0
  • cURL是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具蜡励,支持很多協(xié)議和選項(xiàng),如HTTP阻桅、FTP巍虫、TELNET等,能...
    你很鬧i閱讀 332評(píng)論 0 1
  • 第十九回情切切良宵花解語 意綿綿靜日玉生香 這一回講對(duì)寶玉最重要的兩個(gè)人鳍刷,襲人和黛玉占遥。 省親完了,大家累得夠嗆输瓜,加...
    西絲軒主閱讀 284評(píng)論 0 1