新版阿里云短信接入

发布时间: 2017-11-04

之前做过一个阿里云短信接入的文章,现在公司有对短信的需要,所以再次去看了下文档。发现改动很大,所以重新整理了一份代码。

首先说下环境,原本的短信接入是需要提供阿里云账户下的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},如有疑问请联系客服。

请在下方留下您的评论.加入TG吹水群