TP5调用阿里云短信接口实现发送短信功能

发布时间:2019-03-30 15:31:39编辑:丝画阁阅读(234)

因为项目中需要用到阿里云短信验证码功能,所以就购买了相应的短信包进行测试,以下就是完整代码:

use Aliyun\Core\Config;  
use Aliyun\Core\Profile\DefaultProfile;  
use Aliyun\Core\DefaultAcsClient;  
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; 
/**
 * 短信发送
 * @param $to    接收人
 * @param $model    短信模板ID
 * @param $code   短信验证码
 * @return json
 * @说明:有优惠,先领卷在购买,不谢!https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ob1nyal1
 */
function send_sms($to, $model, $code){
    require_once '../extend/alisms/vendor/autoload.php';
    Config::load(); //加载区域结点配置  
    $config = '根据你的实际情况读取配置文件或读取数据库,本项目是将配置写入数据库实现';
    $accessKeyId = '你的AccessKeyID';
    $accessKeySecret = '你的AccessKeySecret';
    $templateParam = $code;
    //短信签名  
    $signName = $config['sign_name'];
    //短信模板ID 
    switch($model){
        case 1:
            $templateCode = $config['model_code_rl']; // 注册登录短信验证码模板
        break;
        case 2:
            $templateCode = $config['model_code_reset']; // 重置密码短信验证码模板
        break;
    }
    //短信API产品名(短信产品名固定,无需修改)  
    $product = "Dysmsapi";  
    //短信API产品域名(接口地址固定,无需修改)  
    $domain = "dysmsapi.aliyuncs.com";  
    //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)  
    $region = "cn-hangzhou";
    // 初始化用户Profile实例  
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);  
    // 增加服务结点  
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);  
    // 初始化AcsClient用于发起请求  
    $acsClient= new DefaultAcsClient($profile);  
    // 初始化SendSmsRequest实例用于设置发送短信的参数  
    $request = new SendSmsRequest();  
    // 必填,设置雉短信接收号码  
    $request->setPhoneNumbers($to);  
    // 必填,设置签名名称  
    $request->setSignName($signName);  
    // 必填,设置模板CODE  
    $request->setTemplateCode($templateCode);  
    // 可选,设置模板参数
    if($templateParam) {
        $request->setTemplateParam(json_encode($templateParam));
    }
    //发起访问请求  
    $acsResponse = $acsClient->getAcsResponse($request);   
    //返回请求结果  
    $result = json_decode(json_encode($acsResponse),true); 
    // 具体返回值参考文档:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK
    return $result; 
}
以下列举详细步骤:

在开始之前你必须在阿里云控制台中将你的accessKeyId、accessKeySecret获取并纪录起来,如果你的账户没有开启AccessKey需要进行开启操作:

1、登录阿里云控制台。
 
2、将鼠标放在右上方的用户名区域,在弹出的快捷菜单中选择accesskeys。
 
3、系统弹出安全提示对话框,单击继续使用AccessKey。页面显示AccessKeyId和AccessKeySecret。
其次,你需要申请好对应的模板及签名,然后在进行以下操作。

第一步:下载PHP短信发送Dome,将文件夹api_sdk复制到你的项目extend目录下,并任意重命名;

第二步:在你项目应用公共(函数)文件common.php头部添加

use Aliyun\Core\Config;  
use Aliyun\Core\Profile\DefaultProfile;  
use Aliyun\Core\DefaultAcsClient;  
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; 
第三步:将封装好的函数写入common.php中

/**
 * 短信发送
 * @param $to    接收人
 * @param $model    短信模板ID
 * @param $code   短信验证码
 * @return json
 * @说明:有优惠,先领卷在购买,不谢!https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ob1nyal1
 */
function send_sms($to, $model, $code){
    require_once '../extend/alisms/vendor/autoload.php';
    Config::load(); //加载区域结点配置  
    $config = '根据你的实际情况读取配置文件或读取数据库,本项目是将配置写入数据库实现';
    $accessKeyId = '你的AccessKeyID';
    $accessKeySecret = '你的AccessKeySecret';
    $templateParam = $code;
    //短信签名  
    $signName = $config['sign_name'];
    //短信模板ID 
    switch($model){
        case 1:
            $templateCode = $config['model_code_rl']; // 注册登录短信验证码模板
        break;
        case 2:
            $templateCode = $config['model_code_reset']; // 重置密码短信验证码模板
        break;
    }
    //短信API产品名(短信产品名固定,无需修改)  
    $product = "Dysmsapi";  
    //短信API产品域名(接口地址固定,无需修改)  
    $domain = "dysmsapi.aliyuncs.com";  
    //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)  
    $region = "cn-hangzhou";
    // 初始化用户Profile实例  
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);  
    // 增加服务结点  
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);  
    // 初始化AcsClient用于发起请求  
    $acsClient= new DefaultAcsClient($profile);  
    // 初始化SendSmsRequest实例用于设置发送短信的参数  
    $request = new SendSmsRequest();  
    // 必填,设置雉短信接收号码  
    $request->setPhoneNumbers($to);  
    // 必填,设置签名名称  
    $request->setSignName($signName);  
    // 必填,设置模板CODE  
    $request->setTemplateCode($templateCode);  
    // 可选,设置模板参数
    if($templateParam) {
        $request->setTemplateParam(json_encode($templateParam));
    }
    //发起访问请求  
    $acsResponse = $acsClient->getAcsResponse($request);   
    //返回请求结果  
    $result = json_decode(json_encode($acsResponse),true); 
    // 具体返回值参考文档:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK
    return $result; 
}
第四步:在你需要用到的控制器中调用send_sms(‘电话号码’,‘短信模板’,‘需要替换的变量’),OK大功告成!

$send = send_sms($sender, 1, ['code'=>$code]);
--------------------- 
作者:白山老杨 
来源:CSDN 
原文:https://blog.csdn.net/list_yang/article/details/81626593 
版权声明:本文为博主原创文章,转载请附上博文链接!

关键字