ThinkPHP5框架接入阿里云短信最新版(原大鱼)的方法

现在这个短信通知泛滥的年代,手机随时都能收到回复 T 退订的骚扰短信,项目如果没有个短信注册,或者通知之类的,你都不敢说你是搞开发的 😥 

这个验证码搞起来也不是很难,但是如果刚接触也是有点迷茫,之前有一篇TP3 的短信,基本上没什么大的改变

要使用阿里云短信,你得有 4 个参数,这就是申请以后阿里会给你的东西:accessKeyId、accessKeySecret、短信模板 ID、和审核 通过的签名

注册,登录,认证,获得参数,这里就不说了,感觉都是废话

下载官方 SDK

第一步肯定是下载官方的 SDK 了,但是官方下载的 SDK 内容有一些多,我们不必全部都要,只将下载好的 SDK 文件中的api_sdk文件,改名aliyunsms,然后放入ThinkPHP5框架的扩展目录Vendor下即可,下载地址传送门

这个api_sdk就是短信服务 API 接口依赖的 SDK

功能实现

短信功能可以在用户登录,注册的时候都会使用,所以我们最好还是直接封装一个公共函数,我这里直接放在 Api 下面了/app/api/common.php,这里的 app 你们那里应该是 application,因为我这里改了一下配置,不影响

/**
 * 发送验证码
 * @param tel 手机号
 * @param code 验证码
 */
function send_sms_code($tel,$code)
{

    require_once VENDOR_PATH . 'aliyunsms/vendor/autoload.php';
    require_once VENDOR_PATH . 'aliyunsms/lib/Api/Sms/Request/V20170525/SendSmsRequest.php';
    Config::load();
    $config = \config('aliyun_sms'); //获取配置信息
    $accessKeyId = $config['KeyID'];//阿里云短信 keyId
    $accessKeySecret = $config['KeySecret'];//阿里云短信 keysecret

    //短信 API 产品名
    $product = "Dysmsapi";
    //短信 API 产品域名
    $domain = "dysmsapi.aliyuncs.com";
    //暂时不支持多 Region
    $region = "cn-hangzhou";

    //初始化访问的 acsCleint
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
    $acsClient= new DefaultAcsClient($profile);

    $request = new SendSmsRequest();

    $request->setPhoneNumbers($tel);//必填-短信接收号码

    $request->setSignName($config['SignName']);//必填-短信签名: 如何添加签名可以参考阿里云短信或 TPshop 官方文档
    //必填-短信模板 Code
    $request->setTemplateCode($config['TemplateCode']);//必填-短信签名: 如何添加签名可以参考阿里云短信或 TPshop 官方文档
    //选填-假如模板中存在变量需要替换则为必填(JSON 格式)
    $request->setTemplateParam("{\"code\":$code}");//短信签名内容:

    //发起访问请求
    $resp = $acsClient->getAcsResponse($request);

    //短信发送成功返回 True,失败返回 false
    if ($resp && $resp->Code == 'OK') {
        return array('status' => 1, 'msg' => $resp->Code);
    } else {
        return array('status' => -1, 'msg' => $resp->Message . ' subcode:' . $resp->Code);
    }

}

里面的参数不用做任何修改,可以修改一下你存放的路径,在头部 use 类库就可以

use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;

\config('aliyun_sms')是获取配置信息,在/app/config/config.php中添加如下配置

//阿里云 SMS 配置
'aliyun_sms' => [
    'KeyID'     => '', //阿里云生成的 accessKeyId
    'KeySecret' => '', //阿里云生成的 accessKeySecret
    'SignName'  => '沈唁志', //短信签名
    'TemplateCode'    => 'SMS_130XXXXXX' //短信模板 ID
],

调用函数

调用函数:send_sms_code('手机号','验证码')

/**
 * 发送验证码
 * @param tel 手机号
 * @param code 验证码
 */
public function sendSms($tel)
{
    $code = rand(1000,9999);
    $res = send_sms_code($tel,$code);
    if($res['msg'] == 'OK'){
        return $this->response(200,'发送成功!');
    }else{
        return $this->response(400,'发送失败!');
    }
}

就这样,ThinkPHP5 框架短信集成成功! 😎

8 条评论

发表评论

*