[网站后台PHP] 关于阿里云短信整合thinkphp 5.0 的教程贴 [复制链接]

楼主: zwei5200 关注: 2659|点评: 3

发表于 2017-10-17 20:35:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
这里先说明一下,这个不是旧版本的 阿里大于短信整合,这个是 新版本的 阿里云短信,需要注意啊

第一步,去阿里云官网,申请账号,并开通短信服务功能。

sign.pngsign.png

2、记住签名名称

remeber_sign.pngremeber_sign.png


3、创建模板

template.pngtemplate.png


4、记住模板Code remeber_template.pngremeber_template.png


创建并记住Access Key Id 以及 Access Key Secret keyid.pngkeyid.png




完成以上步骤就说明阿里云短信申请开通完成,下一步就是整合SDK

下载 PHP-SDK 略 (附件已经整合完毕)
a. sdk目录中包含:api_demo、api_sdk、msg_demo、msg_sdk 四个目录。b. 将包含 sdk 下所有目录的文件夹(如ali),放入 thinkphp5 可扩展第三方 extend 目录下。集成sdk ok。
创建短信所需要的配置文件 ali.php 配置文件相关自行看官方手册


  1. return [
  2.     'product' => 'Dysmsapi',   
  3.     // 短信API产品名,唯一(短信产品名固定,无需修改)
  4.     'domain' => 'dysmsapi.aliyuncs.com',   
  5.     // 短信API产品域名,唯一(短信产品名固定,无需修改)
  6.     'region' => 'cn-hangzhou',   
  7.     // 暂时不支持多Region,唯一(短信产品名固定,无需修改)
  8.     'endPointName' => 'cn-hangzhou',   
  9.     // 服务结点,唯一(短信产品名固定,无需修改)
  10.     'accessKeyId' => '',   // AccessKeyId
  11.     'accessKeySecret' => '',   // AccessKeySecret
  12.     'signName' => '短信签名',   // 签名名称
  13.     'templateCode' => 'SMS_********',   // 短信模板Code ID
  14.     'valid_time' => '300',   // 验证码有效时间,单位为秒
  15. ];
复制代码


封装发送短信的单例类 (位置名称什么的可以自行修改,注意命名空间)
  1. <?php

  2. namespace app\common\lib;
  3. use Aliyun\Core\Config;
  4. use Aliyun\Core\Profile\DefaultProfile;
  5. use Aliyun\Core\DefaultAcsClient;
  6. use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
  7. use think\Cache;

  8. require_once ROOT_PATH .'vendor/Ali/api_sdk/vendor/autoload.php';
  9. // 加载区域结点配置
  10. Config::load();

  11. class Ali {
  12.    
  13.     public $acsClient = '';
  14.     /**
  15.      * 静态变量保存全局实例
  16.      */
  17.     private static $_instance = null;

  18.     /**
  19.      * 私有构造方法
  20.      */
  21.    // private function __construct(){}

  22.     /**
  23.      * 获取单例实例
  24.      */
  25.     public static function getInstance(){
  26.         if(empty(self::$_instance)){
  27.             self::$_instance = new self();
  28.         }
  29.         return self::$_instance;
  30.     }

  31.     /**
  32.      * 发送短信验证码
  33.      * $phone :手机号码
  34.      */
  35.     public function sendSMS($phone,$code){
  36.         // 短信API产品名
  37.         $product = config('ali.product');
  38.         // 短信API产品域名
  39.         $domain = config('ali.domain');
  40.         // 暂时不支持多Region
  41.         $region = config('ali.region');
  42.         // 服务结点
  43.         $endPointName = config('ali.endPointName');
  44.         // 初始化用户Profile实例
  45.         $profile = DefaultProfile::getProfile($region, config('ali.accessKeyId'), config('ali.accessKeySecret'));
  46.         // 增加服务结点
  47.         DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
  48.         // 初始化AcsClient用于发起请求
  49.         $this->acsClient = new DefaultAcsClient($profile);
  50.         // 初始化SendSmsRequest实例用于设置发送短信的参数
  51.         $request = new SendSmsRequest();
  52.         // 必填,设置雉短信接收号码
  53.         $request->setPhoneNumbers($phone);
  54.         // 必填,设置签名名称
  55.         $request->setSignName(config('ali.signName'));
  56.         // 必填,设置模板CODE
  57.         $request->setTemplateCode(config('ali.templateCode'));
  58.         $templateParam = array("code"=>$code);
  59.         // 可选,设置模板参数
  60.         $request->setTemplateParam(json_encode($templateParam));
  61.         // 发起访问请求
  62.         $acsResponse = $this->acsClient->getAcsResponse($request);

  63.         //$result = json_decode(json_encode($acsResponse),true);
  64.         //return $result;
  65.         if(!$acsResponse->Code == "OK"){
  66.             return false;
  67.         }
  68.         Cache::set($phone,$code,config('ali.valid_time'));
  69.         return true;
  70.     }

  71.     /**
  72.      * 检查短信验证码是否失效
  73.      * @param $phone
  74.      * @return 返回验证码
  75.      */
  76.     public static function checkValidPhone($phone) {
  77.         if(!$phone){
  78.             return false;
  79.         }
  80.         return Cache::get($phone);
  81.     }

  82. }
复制代码

控制器调用方法
  1. <?php

  2. namespace app\home\controller;
  3. use think\Controller;
  4. use app\common\lib\Ali;

  5. class IndexController extends Controller {

  6.     //注册短信发送验证
  7.     function sendMSM(){
  8.         if (request()->isAjax()){
  9.             //其他代码略
  10.             $phone = input('phone');
  11.             $code = randString(6); //这里随机生成6位数字的函数,随便一个都可以
  12.             $Send = new Ali;

  13.             $result = $Send->sendSMS($phone, $code);
  14.             if($result){
  15.                 $info = ['status' => 1, 'code' => $code, 'msg' => '短信发送成功'];
  16.                 return json($info);
  17.             }else{
  18.                 $info = ['status' => 0, 'msg' => '短信发送失败'];
  19.                 return json($info);
  20.             }
  21.         }
  22.     }

  23.     //短信验证方法
  24.     public function yanz() {
  25.         if (request()->isPost()){
  26.             $phone = input('phone');
  27.             $PhoneCode = input('PhoneCode'); //用户填写的验证码

  28.             $Send = new Ali();
  29.             $restcode = $Send->checkValidPhone($phone);
  30.             if ($PhoneCode != $restcode) {
  31.                 return json(['status' => "0", 'msg' => '短信验证失败!']);
  32.             }else{

  33.                 //其他代码略
  34.             }
  35.         }
  36.     }

  37. }
复制代码



相关打包源文件回复看见


游客,如果您要查看本帖隐藏内容请回复














仿购网(www.webfgoo.com)--- 模板仿制购买中心
联系QQ:314250257
我们卖的不是模板是建站服务!!!!

0

主题

1

仿豆

0

收听

P标签

Rank: 1

积分
1
发表于 2018-2-10 14:08:23 | 显示全部楼层
不错!希望得到原文件参考

0

主题

1

仿豆

0

收听

P标签

Rank: 1

积分
2
发表于 2018-2-23 22:22:30 | 显示全部楼层
不错!希望得到原文件参考

0

主题

1

仿豆

0

收听

P标签

Rank: 1

积分
2
发表于 2018-2-23 22:37:34 | 显示全部楼层
相关打包源文件居然是“华西都市网亲子工具箱插件.rar”????????

使用  (可批量传图、插入视频等)

快速回帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

清晨第一杯水怎么喝才对

清晨第一杯水怎么喝才对

很多人清晨起床的时候都会有喝水习惯...详情>>