您现在的位置是:首页> 网站开发> ThinkPHP
Thinkphp5整合阿里大鱼的方法超级教程看了就能用.
- 5400人已阅读
- 时间:2018-10-16 09:03:26
- 分类:ThinkPHP
阿里大鱼官网下载完整SDK包:
https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.580.3rgXTq
下载目录如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SDK工具包目录结构如下: \_api_demo | \_SmsDemo.php 短信服务相关接口demo示例 \_api_sdk | \_lib | | \_Api 包含Api接口请求体的封装 | | \_Core 包含签名生成、Region配置等封装 | \_test 单元测试 | \_vendor composer依赖打包 \_msg_demo | \_lib 示例依赖项 | \_MsgDemo.php 短信服务状态报告demo示例 \_msg_sdk \_lib | \_Api 包含Api接口请求体的封装 | \_Core 包含签名生成、Region配置等等封装 | \_MNS 包含消息服务相关封装 \_test 单元测试 \_vendor composer依赖打包 |
我们整合只需要api-sdk复制出来到tp5的extend下面.我们可以对文件夹进行重命名.
接下来介绍两种方法使用.
第一种:直接在应用目录下的函数库common里写函数调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 首先在函数顶部引入阿里云短信的命名空间,无需修改,官方sdk自带的命名空间 use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; //阿里短信函数,$mobile为手机号码,$code为自定义随机数 function sendMsg( $mobile , $code ){ //这里的路径EXTEND_PATH就是指tp5根目录下的extend目录,系统自带常量。alisms为我们复制api_sdk过来后更改的目录名称 require_once EXTEND_PATH. 'alisms/vendor/autoload.php' ; Config::load(); //加载区域结点配置 $accessKeyId = '×××××××××××××' ; //阿里云短信获取的accessKeyId $accessKeySecret = '×××××××××××××' ; //阿里云短信获取的accessKeySecret //这个个是审核过的模板内容中的变量赋值,记住数组中字符串code要和模板内容中的保持一致 //比如我们模板中的内容为:你的验证码为:${code},该验证码5分钟内有效,请勿泄漏! $templateParam = array ( "code" => $code ); //模板变量替换 $signName = '浪博电子' ; //这个是短信签名,要审核通过 $templateCode = 'SMS_×××××××' ; //短信模板ID,记得要审核通过的 //短信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( $mobile ); // 必填,设置签名名称 $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); return $result ; } |
然后我们在控制器中方法直接调用使用,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* * 前台ajax请求发送短信验证码 */ public function sendSms( $phone ) { $mobile = $phone ; //$code = 1111; $code = mt_rand(10000, 99999); $result = sendMsg( $mobile , $code ); //$result['Code'] = 'OK'; if ( $result [ 'Code' ] == 'OK' ) { //存到缓存当中,并且返回json数据给前端 cache( 'tel' . $mobile , $code , 39); return json([ 'success' => 'ok' , 'tel' => $mobile ]); } } [/code] 如果发送成功,将返回以下内容,当然你也可以自定义输出 $sms 为数组格式或者json格式 [code] array (4) { [ "Message" ] => string(2) "OK" [ "RequestId" ] => string(36) "5340C2E9-6802-4EA6-90E3-392518495E6A" [ "BizId" ] => string(20) "519300710627122289^0" [ "Code" ] => string(2) "OK" } |
第二种方法:我们直接在extend下面的alisms目录下写一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | <?php /** * Created by pan. * User: pan * Date: 2017/11/14 * Time: 9:41 */ //[b]命名空间为alisms[/b] namespace alisms; //引入sdk的命名空间 use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; //引入autoload.php,EXTEND_PATH就是指tp5根目录下的extend目录,系统自带常量。alisms为我们复制api_sdk过来后更改的目录名称 require_once EXTEND_PATH. 'alisms/vendor/autoload.php' ; Config::load(); //加载区域结点配置 class SendSms { //关键的配置,我们用成员属性 public $accessKeyId = null; //阿里云短信获取的accessKeyId public $accessKeySecret = null; //阿里云短信获取的accessKeySecret public $signName = null; //短信签名,要审核通过 public $templateCode = null; //短信模板ID,记得要审核通过的 public function send( $mobile , $templateParam ) { //获取成员属性 $accessKeyId = $this ->accessKeyId; $accessKeySecret = $this ->accessKeySecret; $signName = $this ->signName; $templateCode = $this ->templateCode; //短信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( $mobile ); // 必填,设置签名名称 $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); return $result ; } } |
然后在方法中写函数调用,或者直接在控制器中使用,这里为在控制器调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | namespace app\index\controller; use think\Request; //[b]记得引入命名空间,如果这里不引入命名空间,那么方法中的实例化SendSms的格式应该为:$sms = new \alisms\SendSms()[/b] use alisms\SendSms; class Index extends Base { public function index() { //获取对象,如果上面没有引入命名空间,可以这样实例化:$sms = new \alisms\SendSms() $sms = new SendSms(); //设置关键的四个配置参数,其实配置参数应该写在公共或者模块下的config配置文件中,然后在获取使用,这里我就直接使用了。 $sms ->accessKeyId = '××××××××' ; $sms ->accessKeySecret = '×××××××××' ; $sms ->signName = '浪博电子' ; $sms ->templateCode = 'SMS_×××××××' ; //$mobile为手机号 $mobile = '×××××××' ; //模板参数,自定义了随机数,你可以在这里保存在缓存或者cookie等设置有效期以便逻辑发送后用户使用后的逻辑处理 $code = mt_rand(); $templateParam = array ( "code" => $code ); $m = $sms ->send( $mobile , $templateParam ); //类中有说明,默认返回的数组格式,如果需要json,在自行修改类,或者在这里将$m转换后在输出 dump( $m ); } } |
至此绍束,至于发送后使用的业务逻辑,就要结合你自己实际的业务场景了.
上一篇:PHP获取地区函数