?背景
隨著科技發(fā)展的推動鸟辅,曾經(jīng)充滿溫馨問候與回憶的短信業(yè)務(wù),如今絕大多數(shù)局限于
驗證碼發(fā)送
莺葫、詐騙/騷擾信息
匪凉、業(yè)務(wù)推送
的使用而作為一名IT搬磚的碼農(nóng),對于第三方服務(wù)的接入也是必須掌握的技能捺檬,此處介紹一下
ThinkPHP5.1框架下阿里云短信最新版(原大魚)的接入方法
操作環(huán)境:
>PHP版本 : 7.0.2 (如果是低版本再层,報錯時,可參考附錄解決方案)
>ThinkPHP版本: ThinkPHP5.1
>技能需求: Composer 安裝依賴
本文主要針對
短信 — 驗證碼
接入堡纬,作為指導(dǎo)講解聂受,>>> 官方文檔:阿里云-短信服務(wù)
?開發(fā)流程
①. 前期準(zhǔn)備-短信使用流程
- 作為前期準(zhǔn)備的重要指引,
入駐-認證-開通服務(wù)-創(chuàng)建-獲得參數(shù)
等在此不做贅述
詳細指導(dǎo)參見:阿里云短信服務(wù)文檔使用指引
②. Composer 安裝依賴
- 作為
ThinkPHP5
超方便的工具隐轩,強烈建議使用 Composer,你會發(fā)現(xiàn)它的便利與快捷性
運行命令:
composer require alibabacloud/client
③. 快速學(xué)習(xí)(此步驟渤早,跳過也可.)
- 阿里云提供了極其方便的在線測試功能职车,可以通過
快速學(xué)習(xí)
,測試你是否獲取了所有所需的配置信息
【短信服務(wù)】——【快速學(xué)習(xí)】——【OpenAPI Explorer】
④. 代碼實現(xiàn)
- 注意在集成方法調(diào)用前鹊杖,要先進行類的引用
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
- 提供集成方法如下:
/**
* 集成方法:阿里云(原大魚)發(fā)送短信驗證碼
* @param string $phoneNumber 目標(biāo)手機號
* TODO 注意 accessKeyId悴灵、accessSecret、signName骂蓖、templateCode 重要參數(shù)的獲取配置
*/
public function sendAliDaYuAuthCode($phoneNumber = '151xxxxxxx3')
{
$accessKeyId = 'LTAXXXXXXXXXC';
$accessSecret = '8gfwbXXXXXXXXXXXXXXXXXXXXXXXXXXXXA'; //注意不要有空格
$signName = 'XXXXX'; //配置簽名
$templateCode = 'SMS_1XXXXXX5';//配置短信模板編號
//TODO 隨機生成一個6位數(shù)
$authCodeMT = mt_rand(100000,999999);
//TODO 短信模板變量替換JSON串,友情提示:如果JSON中需要帶換行符,請參照標(biāo)準(zhǔn)的JSON協(xié)議积瞒。
$jsonTemplateParam = json_encode(['code'=>$authCodeMT]);
AlibabaCloud::accessKeyClient($accessKeyId, $accessSecret)
->regionId('cn-hangzhou')
->asGlobalClient();
try {
$result = AlibabaCloud::rpcRequest()
->product('Dysmsapi')
// ->scheme('https') // https | http
->version('2017-05-25')
->action('SendSms')
->method('POST')
->options([
'query' => [
'RegionId' => 'cn-hangzhou',
'PhoneNumbers' => $phoneNumber,//目標(biāo)手機號
'SignName' => $signName,
'TemplateCode' => $templateCode,
'TemplateParam' => $jsonTemplateParam,
],
])
->request();
$opRes = $result->toArray();
//print_r($opRes);
if ($opRes && $opRes['Code'] == "OK"){
//進行Cookie保存
cookie("authCodeMT",$authCodeMT,300);
}
} catch (ClientException $e) {
echo $e->getErrorMessage() . PHP_EOL;
} catch (ServerException $e) {
echo $e->getErrorMessage() . PHP_EOL;
}
}
⑤. 運行效果
?附錄:
①. Ramsey\Uuid\Generator\random_int() 報錯
- 此問題,測試發(fā)現(xiàn)存在于PHP版本較低的情況下登下,如
PHP-5.6.32
茫孔,
詳細分析及解決請參考 Fatal error: Call to undefined function Ramsey\Uuid\Generator\random_int()
②. isv.INVALID_JSON_PARAM 報錯的一種情況
- 如果在測試階段叮喳,直接復(fù)制了
OpenAPI Explorer
生成的代碼,有時會因為模板參數(shù)的json
拼合無法識別
建議缰贝,可參考我的代碼思路馍悟,使用json_encode()
進行轉(zhuǎn)化
③. InvalidAccessKeyId.NotFound
- 這種提示信息,只能說明你的 accessKeyId 配置錯誤剩晴,注意不要配置成了 短信應(yīng)用中的
AppKey
過來人锣咒,友情提示,請看存放位置: