PHP開發實用-阿裏短信服務(Short Message Service)
阿新 • • 發佈:2018-05-08
-s pre AR 多region client fff end onf ()
步驟 1 使用阿裏雲短信服務正常發短信需要
- 短信簽名
- 短信模板
- 1申請短信簽名
??根據用戶屬性來創建符合自身屬性的簽名信息。企業用戶需要上傳相關企業資質證明,個人用戶需要上傳證明個人身份的證明。
??短信簽名需要審核通過後才可以使用。
1.2 申請短信模板
??短信模板,即具體發送的短信內容。短信模板可以支持驗證碼、短信通知、推廣短信、國際/港澳臺消息四種模式。驗證碼和短信通知,通過變量替換實現個性短信定制。推廣短信不支持在模板中添加變量。
??短信模板需要審核通過後才可以使用。
步驟 2 獲取阿裏雲訪問密鑰
調用短信API還需要兩個參數:
- Access Key ID
- Access Key Secret
??可以通過阿裏雲控制臺的 秘鑰管理頁面 創建、管理所有的訪問秘鑰對,且保證它處於“啟用”狀態。由於訪問秘鑰是阿裏雲對 API 請求進行安全驗證的關鍵因子,請妥善保管你的訪問秘鑰。如果某些秘鑰對出現泄漏風險,建議及時刪除該秘鑰對並生成新的替代秘鑰對。
步驟 3 將阿裏雲短信整合進Laravel進行開發
??下載阿裏雲提供的SDK開發並將api_sdk/lib/Core和api_sdk/lib/Api復制一份放到項目app/Tools/dysms下,沒有的話需要自己創建。
打開項目根目錄下的composer.json文件,在classmap,加上圖示代碼
打開命令行工具在項目根目錄輸入:
composer dumpautoload
執行成功如下圖
接下來就是正式的開發了,直接使用sdk裏面導入包的方式進行引入:
第一次postman測試運行報錯如下:
這是因為EndpointerProvider裏面,沒有setEndpoints就直接使用了getEndpointers,所以返回為空信息,setEndpoints操作是在EndpointConf中調用的,加載xml中的endpoints,在調用代碼中加入
// 手動加載endpoint
EndpointConfig::load();
再次運行代碼發現報如下錯誤:
這是因為代理的原因,註釋一下代碼就可以了:
開發完整代碼,github源碼地址:
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Core\Regions\EndpointConfig;
class Dysms extends Controller
{
static $acsClient = null;
//阿裏短信
public function Dysms()
{
// 初始化SendSmsRequest實例用於設置發送短信的參數
$request = new SendSmsRequest();
//可選-啟用https協議
//$request->setProtocol("https");
// 必填,設置短信接收號碼
$request->setPhoneNumbers(Input::get(‘phone‘));
// 必填,設置簽名名稱,應嚴格按"簽名名稱"填寫,請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName("簽名");
// 必填,設置模板CODE,應嚴格按"模板CODE"填寫, 請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode("模版CODE");
// 可選,設置模板參數, 假如模板中存在變量需要替換則為必填項
$request->setTemplateParam(json_encode(array(
// 短信模板中字段的值
"code" => rand(000000, 999999),
"product" => "dsd"
), JSON_UNESCAPED_UNICODE));
// 可選,設置流水號
$request->setOutId("1234567");
// 選填,上行短信擴展碼(擴展碼字段控制在7位或以下,無特殊需求用戶請忽略此字段)
// $request->setSmsUpExtendCode("1234567");
// 發起訪問請求
$acsResponse = static::getAcsClient()->getAcsResponse($request);
//打印執行結果
dd($acsResponse);
// 執行成功後的返回狀態
// {#1538
// +"Message": "OK"
// +"RequestId": "0CE56BFE-5E9A-4F3F-8AEC-5C524720CE83"
// +"BizId": "480519725607521112^0"
// +"Code": "OK"
// }
}
/**
* 取得AcsClient
*
* @return DefaultAcsClient
*/
public static function getAcsClient()
{
//產品名稱:雲通信流量服務API產品,開發者無需替換
$product = "Dysmsapi";
//產品域名,開發者無需替換
$domain = "dysmsapi.aliyuncs.com";
// TODO 此處需要替換成開發者自己的AK (https://ak-console.aliyun.com/)
// AccessKeyId
$accessKeyId = "AccessKeyId";
// AccessKeySecret
$accessKeySecret = "AccessKeySecret";
// 暫時不支持多Region
$region = "cn-hangzhou";
// 服務結點
$endPointName = "cn-hangzhou";
if (static::$acsClient == null) {
//初始化acsClient,暫不支持region化
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 手動加載endpoint
EndpointConfig::load();
// 增加服務結點
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用於發起請求
static::$acsClient = new DefaultAcsClient($profile);
}
return static::$acsClient;
}
}
PS:最後不得不吐槽下,阿裏用OSS和阿裏短信好多坑啊,這麽大的一個公司。
PHP開發實用-阿裏短信服務(Short Message Service)