Fastadmin阿里云短信发送简单实现

起因

Fastadmin的阿里云短信发送插件需要收费,想着自己用官方SDK开发一下

经过

Fastadmin的官方包里自带了短信发送方法,里面create数据之后直接用一个

Hook::listen('sms_send', $sms, null, true);

进行了发短信的处理,早就听说过不过没有使用过

查看文档和相关文章之后,解决方案如下:

解决方案

1.通过composer安装阿里云短信发送官方包

composer require alibabacloud/sdk

2.新建application\api\hook\Sms.php文件(可以自行用其他路径)

代码大概如下,也没有很复杂的代码,大家可以根据自行需求自己调整,

<?php
/**
 * hook钩子触发短信发送
 */
namespace app\api\hook;

//阿里云短信发送相关类 composer安装 
//composer require alibabacloud/sdk
use Swoft\Task\Bean\Annotation\Task;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;

class Sms
{

	//发送验证码
	//@sms  验证码发送记录数数据库实例
	//$sms->mobile 手机号码
	//['event' => $event, 'mobile' => $mobile, 'code' => $code, 'ip' => $ip, 'createtime' => $time]
    function smsSend($sms)
    {	
    	return $this->sendMsg($sms->mobile,['code'=>$sms->code],'code');
    }

    /*function smsCheck($sms)
    {	
    	return $this->sendMsg($sms->mobile,['code'=>$sms->code],'code');
    }*/


    //@mobile 手机号码
    //@param  短信发送参数
    //@template 短信发送模板编号key值
    private function sendMsg($mobile,$param,$template){
    	$config = \config('alisms');
    	if(empty($param)||!isset($config)||empty($config)){
    		return false;
    	}
        AlibabaCloud::accessKeyClient($config['accessKeyId'], $config['accessSecret'])
            ->regionId($config['regionId'])
            ->asGlobalClient();

        $TemplateCode = isset($config['TemplateCode'][$template])?$config['TemplateCode'][$template]:$config['TemplateCode']['code'];

        try {
            $result = AlibabaCloud::rpcRequest()
                ->product('Dysmsapi')
                ->version('2017-05-25')
                ->action('SendSms')
                ->method('POST')
                ->options([
                    'query' => [
                        'PhoneNumbers' => $mobile,
                        'SignName' => $config['SignName'],
                        'TemplateCode' => $TemplateCode,
                        'TemplateParam' => json_encode($param)
                    ],
                ])
                ->request();
            if($result->Code=="OK"){
	            return true;
	        }else{
	            return false;
	        } 
            print_r($result->toArray());
        } catch (ClientException $e) {
        	return false;
            echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
        	return false;
            echo $e->getErrorMessage() . PHP_EOL;
        }
    }

}

3.新增配置文件

配置文件application\extra\alisms.php的内容如下

<?php
/*
阿里云短信发送配置文件
*/

return [
	        //短信签名
	        "SignName"=> "XXX",
	        //阿里云keyid
	        "accessKeyId"=>"XXXXXX",
	        //阿里云密钥
	        "accessSecret"=>"XXXXXXXXX",
	        //短信发送地
	        'regionId' => 'cn-hangzhou',
	        //短信模板编码
	        "TemplateCode"=>[
	        	//验证码使用模板
	        	'code'=>"XXXXXXX",
	        ],
	    ];

4.增加Hook触发绑定

查看官方文档可以用Hook的自带方法增加,不过本人比较懒,就直接加在了application\tags.php下,大概这样

<?php

// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [
    ],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [
    ],
    // 插件开始
    'addon_begin'  => [
    ],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [],
    //自定义发送短信
    'sms_send'      =>[
        'app\\api\\hook\\Sms'
    ],
    //自定义短信验证
    'sms_check'      =>[
    ],
];

这样的话,只要在需要的地方加入

Hook::listen('sms_send', $sms, null, true);

就会自动执行到绑定的方法中,具体的执行逻辑和细节问题可以多多参考官方文档。
后续的check,notice等其他方法各位可以自行编写,大概方法就是这样,
tp5.0官方手册

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
FastAdmin 是一个基于ThinkPHP 开发的后台管理系统,提供了丰富的功能和插件,包括用户管理、角色权限管理、菜单管理、广告管理、文件管理等。 在 FastAdmin 中,消息提醒是一个非常重要的功能,它可以帮助管理员及时了解系统的运行状况和重要的事件。FastAdmin 提供了多种消息提醒方式,包括站内、邮件、等。 站内FastAdmin 默认的消息提醒方式,管理员可以通过站内收到系统的实时通知和重要提醒。当有新的用户注册、权限变更、数据变更等事件发生时,FastAdmin 会自动发送站内给管理员。管理员可以在后台消息管理中查看和处理这些消息,确保及时响应和处理。 除了站内FastAdmin 还支持通过邮件进行消息提醒。管理员可以在后台系统设置中配置邮件服务器息,启用邮件提醒功能后,当有新的事件发生时,FastAdmin 会自动发送邮件提醒管理员。这种方式特别适用于管理员需要时刻关注系统运行情况但无法随时登录系统的场景,通过邮件提醒可以及时得到重要事件的通知。 另外,FastAdmin 还支持通过进行消息提醒。管理员可以在后台系统设置中配置接口息,启用提醒功能后,当有紧急事件发生时,FastAdmin 会自动发送提醒管理员。这种方式适用于需要及时处理重要事件的场景,提醒可以确保管理员随时接收到通知。 综上所述,FastAdmin 消息提醒是一个灵活多样的功能,可以通过站内、邮件和等方式提醒管理员系统的重要事件和实时通知,帮助管理员及时响应和处理相关事务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值