tp5對接阿里大魚短信接口

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

?但是高手略過啊,只針對新手,如果大家發(fā)現(xiàn)有什么問題,歡迎留言指出,我會更正!

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

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

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

◆◆第一步◆◆

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

◆◆第二步◆◆

將SignatureHelper.php重命名為Signature.php

◆◆第三步◆◆

新建sms.php同級文件,引用剛重命名的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 = '阿里云后臺ak';

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

? ? ? ? $accessKeySecret = '阿里云后臺sk';

? ? ? ? //要發(fā)送的手機號

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

? ? ? ? //簽名,第三步申請得到

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

? ? ? ? //模板name,第三步申請得到

? ? ? ? switch ($type){

? ? ? ? ? ? case 1:

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

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

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

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

? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 2:

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

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

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

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

? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 3:

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

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

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

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

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

? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 4:

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

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

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? default:

? ? ? ? ? ? ? ? echo json_encode('模板參數(shù)錯誤',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ù),簽名以及發(fā)送請求

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

? ? ? ? try{

? ? ? ? ? ? // 此處可能會拋出異常,注意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 '短信接口請求錯誤';exit;

? ? ? ? }

}

}

◆◆Signature.php代碼◆◆

namespace app\api\controller;

/**

* 簽名助手 2017/11/19

*

* Class SignatureHelper

*/

class Signature {

? ? /**

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

? ? *

? ? * @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方法請求,VPC僅支持POST

? ? * @return bool|\stdClass 返回API接口調(diào)用結(jié)果,當(dāng)發(fā)生錯誤時返回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,會終止腳本執(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容