之前做过一个阿里云短信接入的文章,现在公司有对短信的需要,所以再次去看了下文档。发现改动很大,所以重新整理了一份代码。
首先说下环境,原本的短信接入是需要提供阿里云账户下的KEY和秘钥,然后生成签名去请求下完事,现在改版之后比较复杂,需要生成节点什么的。加上公司对短信需要比较急,所以整个框架直接迁移。并没有对框架的文件进行删减。
第一步,下载SDK
文档地址:https://help.aliyun.com/document_detail/55451.html?spm=5176.sms-account.109.2.56907c165Efb1I
下载地址:https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.569.pg9xWr
第二步,整合框架
把下载好的文件中的 api_sdk 文件,改名 aliyunsms ,然后放入 TP 框架的扩展目录下 ThinkPHP/Library/Vendor
第三步,功能实现
因为我是后台,然后这些文件都是继承一个 Controller ,所以我直接在继承的里面写,然后就可以全局掉用
/**
* 发送短信接口
* 文档地址 https://help.aliyun.com/document_detail/55491.html?spm=5176.doc55491.6.560.0KUKny
* @param $mobile 手机号
* @param $smscode 短信模板ID
* @param $params 模板替换参数
* @return mixed code = OK 表示完成
*/
public function sendSms($mobile,$smscode,$params)
{
require_once VENDOR_PATH .'/aliyunsms/vendor/autoload.php';
Config::load();
$sms_config = C("SMS_CONFIG");
$templateParam = $params;
$signName = $sms_config['sign'];
$templateCode = $smscode;
$product = "Dysmsapi";
$domain = "dysmsapi.aliyuncs.com";
$region = "cn-hangzhou";
$profile = DefaultProfile::getProfile($region, $sms_config['key'], $sms_config['secret']);
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
$acsClient= new DefaultAcsClient($profile);
$request = new SendSmsRequest();
$request->setPhoneNumbers($mobile);
$request->setSignName($signName);
$request->setTemplateCode($templateCode);
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam));
}
$acsResponse = $acsClient->getAcsResponse($request);
$result = json_decode(json_encode($acsResponse),true);
return $result;
}
其中,需要在头部 use 类库
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
还有配置文件
//短信配置
'SMS_CONFIG' => array(
"sign" => 'xx', //审核通过的签名
"key" => 'accessKeyId', //阿里云生成的 accessKeyId
"secret" => 'accessKeySecret', // 阿里云生成的 accessKeySecret
),
在需要调用的时候直接
$this->sendSms("手机号","短信模板ID","替换参数");
后记
阿里云的 accessKeyId 和 accessKeySecret 是自己在账户管理生成的,不建议用主账号
使用一些公众号或者公司的产品名作为签名需要提供授权
短信模板添加的时候注意选择短信提醒,不是验证码提醒 附:(短信模板) 尊敬的会员,您于${time}完成${name}服务,余额付款${num}元,剩余余额${m},如有疑问请联系客服。