|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里先说明一下,这个不是旧版本的 阿里大于短信整合,这个是 新版本的 阿里云短信,需要注意啊
第一步,去阿里云官网,申请账号,并开通短信服务功能。
2、记住签名名称
3、创建模板
4、记住模板Code
创建并记住Access Key Id 以及 Access Key Secret
完成以上步骤就说明阿里云短信申请开通完成,下一步就是整合SDK
下载 PHP-SDK 略 (附件已经整合完毕)
a. sdk目录中包含:api_demo、api_sdk、msg_demo、msg_sdk 四个目录。b. 将包含 sdk 下所有目录的文件夹(如ali),放入 thinkphp5 可扩展第三方 extend 目录下。集成sdk ok。
创建短信所需要的配置文件 ali.php 配置文件相关自行看官方手册
- return [
- 'product' => 'Dysmsapi',
- // 短信API产品名,唯一(短信产品名固定,无需修改)
- 'domain' => 'dysmsapi.aliyuncs.com',
- // 短信API产品域名,唯一(短信产品名固定,无需修改)
- 'region' => 'cn-hangzhou',
- // 暂时不支持多Region,唯一(短信产品名固定,无需修改)
- 'endPointName' => 'cn-hangzhou',
- // 服务结点,唯一(短信产品名固定,无需修改)
- 'accessKeyId' => '', // AccessKeyId
- 'accessKeySecret' => '', // AccessKeySecret
- 'signName' => '短信签名', // 签名名称
- 'templateCode' => 'SMS_********', // 短信模板Code ID
- 'valid_time' => '300', // 验证码有效时间,单位为秒
- ];
复制代码
封装发送短信的单例类 (位置名称什么的可以自行修改,注意命名空间)
- <?php
- namespace app\common\lib;
- use Aliyun\Core\Config;
- use Aliyun\Core\Profile\DefaultProfile;
- use Aliyun\Core\DefaultAcsClient;
- use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
- use think\Cache;
- require_once ROOT_PATH .'vendor/Ali/api_sdk/vendor/autoload.php';
- // 加载区域结点配置
- Config::load();
- class Ali {
-
- public $acsClient = '';
- /**
- * 静态变量保存全局实例
- */
- private static $_instance = null;
- /**
- * 私有构造方法
- */
- // private function __construct(){}
- /**
- * 获取单例实例
- */
- public static function getInstance(){
- if(empty(self::$_instance)){
- self::$_instance = new self();
- }
- return self::$_instance;
- }
- /**
- * 发送短信验证码
- * $phone :手机号码
- */
- public function sendSMS($phone,$code){
- // 短信API产品名
- $product = config('ali.product');
- // 短信API产品域名
- $domain = config('ali.domain');
- // 暂时不支持多Region
- $region = config('ali.region');
- // 服务结点
- $endPointName = config('ali.endPointName');
- // 初始化用户Profile实例
- $profile = DefaultProfile::getProfile($region, config('ali.accessKeyId'), config('ali.accessKeySecret'));
- // 增加服务结点
- DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
- // 初始化AcsClient用于发起请求
- $this->acsClient = new DefaultAcsClient($profile);
- // 初始化SendSmsRequest实例用于设置发送短信的参数
- $request = new SendSmsRequest();
- // 必填,设置雉短信接收号码
- $request->setPhoneNumbers($phone);
- // 必填,设置签名名称
- $request->setSignName(config('ali.signName'));
- // 必填,设置模板CODE
- $request->setTemplateCode(config('ali.templateCode'));
- $templateParam = array("code"=>$code);
- // 可选,设置模板参数
- $request->setTemplateParam(json_encode($templateParam));
- // 发起访问请求
- $acsResponse = $this->acsClient->getAcsResponse($request);
- //$result = json_decode(json_encode($acsResponse),true);
- //return $result;
- if(!$acsResponse->Code == "OK"){
- return false;
- }
- Cache::set($phone,$code,config('ali.valid_time'));
- return true;
- }
- /**
- * 检查短信验证码是否失效
- * @param $phone
- * @return 返回验证码
- */
- public static function checkValidPhone($phone) {
- if(!$phone){
- return false;
- }
- return Cache::get($phone);
- }
- }
复制代码
控制器调用方法
- <?php
- namespace app\home\controller;
- use think\Controller;
- use app\common\lib\Ali;
- class IndexController extends Controller {
- //注册短信发送验证
- function sendMSM(){
- if (request()->isAjax()){
- //其他代码略
- $phone = input('phone');
- $code = randString(6); //这里随机生成6位数字的函数,随便一个都可以
- $Send = new Ali;
- $result = $Send->sendSMS($phone, $code);
- if($result){
- $info = ['status' => 1, 'code' => $code, 'msg' => '短信发送成功'];
- return json($info);
- }else{
- $info = ['status' => 0, 'msg' => '短信发送失败'];
- return json($info);
- }
- }
- }
- //短信验证方法
- public function yanz() {
- if (request()->isPost()){
- $phone = input('phone');
- $PhoneCode = input('PhoneCode'); //用户填写的验证码
- $Send = new Ali();
- $restcode = $Send->checkValidPhone($phone);
- if ($PhoneCode != $restcode) {
- return json(['status' => "0", 'msg' => '短信验证失败!']);
- }else{
- //其他代码略
- }
- }
- }
- }
复制代码
相关打包源文件回复看见
|
|