198 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			198 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace addons\qcloudsms;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use addons\qcloudsms\library\SmsSingleSender;
							 | 
						|||
| 
								 | 
							
								use addons\qcloudsms\library\SmsVoicePromptSender;
							 | 
						|||
| 
								 | 
							
								use addons\qcloudsms\library\SmsVoiceverifyCodeSender;
							 | 
						|||
| 
								 | 
							
								use addons\qcloudsms\library\TtsVoiceSender;
							 | 
						|||
| 
								 | 
							
								use think\Addons;
							 | 
						|||
| 
								 | 
							
								use think\Config;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/**
							 | 
						|||
| 
								 | 
							
								 * 插件
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								class Qcloudsms extends Addons
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    private $appid = null;
							 | 
						|||
| 
								 | 
							
								    private $appkey = null;
							 | 
						|||
| 
								 | 
							
								    private $config = null;
							 | 
						|||
| 
								 | 
							
								    private $sender = null;
							 | 
						|||
| 
								 | 
							
								    private $sendError = '';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function ConfigInit()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->config = $this->getConfig();
							 | 
						|||
| 
								 | 
							
								        //如果使用语音短信  更换成语音短信模板
							 | 
						|||
| 
								 | 
							
								        if ($this->config['isVoice'] == 1) {
							 | 
						|||
| 
								 | 
							
								            $this->config['template'] = $this->config['voiceTemplate'];
							 | 
						|||
| 
								 | 
							
								            //语音短信 需要另行设置Aappid 与Appkey
							 | 
						|||
| 
								 | 
							
								            $this->appid = $this->config['voiceAppid'];
							 | 
						|||
| 
								 | 
							
								            $this->appkey = $this->config['voiceAppkey'];
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            $this->appid = $this->config['appid'];
							 | 
						|||
| 
								 | 
							
								            $this->appkey = $this->config['appkey'];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 短信发送行为
							 | 
						|||
| 
								 | 
							
								     * @param Sms $params
							 | 
						|||
| 
								 | 
							
								     * @return  boolean
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function smsSend(&$params)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->ConfigInit();
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            if ($this->config['isTemplateSender'] == 1) {
							 | 
						|||
| 
								 | 
							
								                $templateID = $this->config['template'][$params->event];
							 | 
						|||
| 
								 | 
							
								                if ($this->config['isVoice'] != 1) {
							 | 
						|||
| 
								 | 
							
								                    //普通短信发送
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new SmsSingleSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->sendWithParam("86", $params['mobile'], $templateID, ["{$params->code}"], $this->config['sign'], "", "");
							 | 
						|||
| 
								 | 
							
								                } else {
							 | 
						|||
| 
								 | 
							
								                    //语音短信发送
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new TtsVoiceSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    //参数: 国家码,手机号、模板ID、模板参数、播放次数(可选字段)、用户的session内容,服务器端原样返回(可选字段)
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->send("86", $params['mobile'], $templateID, [$params->code]);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                //判断是否是语音短信
							 | 
						|||
| 
								 | 
							
								                if ($this->config['isVoice'] != 1) {
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new SmsSingleSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    //参数:短信类型{1营销短信,0普通短信 }、国家码、手机号、短信内容、扩展码(可留空)、服务的原样返回的参数
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->send($params['type'], '86', $params['mobile'], $params['msg'], "", "");
							 | 
						|||
| 
								 | 
							
								                } else {
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new SmsVoiceVerifyCodeSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    //参数:国家码、手机号、短信内容、播放次数(默认2次)、服务的原样返回的参数
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->send('86', $params['mobile'], $params['msg']);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            $rsp = json_decode($result, true);
							 | 
						|||
| 
								 | 
							
								            if ($rsp['result'] == 0 && $rsp['errmsg'] == 'OK') {
							 | 
						|||
| 
								 | 
							
								                return true;
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                //记录错误信息
							 | 
						|||
| 
								 | 
							
								                $this->setError($rsp);
							 | 
						|||
| 
								 | 
							
								                return false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						|||
| 
								 | 
							
								            $this->setError($e->getMessage());
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return false;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 短信发送通知
							 | 
						|||
| 
								 | 
							
								     * @param array $params
							 | 
						|||
| 
								 | 
							
								     * @return  boolean
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function smsNotice(&$params)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->ConfigInit();
							 | 
						|||
| 
								 | 
							
								        try {
							 | 
						|||
| 
								 | 
							
								            if ($this->config['isTemplateSender'] == 1) {
							 | 
						|||
| 
								 | 
							
								                $templateID = $this->config['template'][$params['template']];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if ($this->config['isVoice'] != 1) {
							 | 
						|||
| 
								 | 
							
								                    //普通短信发送
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new SmsSingleSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->sendWithParam("86", $params['mobile'], $templateID, ["{$params['msg']}"], $this->config['sign'], "", "");
							 | 
						|||
| 
								 | 
							
								                } else {
							 | 
						|||
| 
								 | 
							
								                    //语音短信发送
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new TtsVoiceSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    //参数: 国家码,手机号、模板ID、模板参数、播放次数(可选字段)、用户的session内容,服务器端原样返回(可选字段)
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->send("86", $params['mobile'], $templateID, [$params['msg']]);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                //判断是否是语音短信
							 | 
						|||
| 
								 | 
							
								                if ($this->config['isVoice'] != 1) {
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new SmsSingleSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    //参数:短信类型{1营销短信,0普通短信 }、国家码、手机号、短信内容、扩展码(可留空)、服务的原样返回的参数
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->send($params['type'], '86', $params['mobile'], $params['msg'], "", "");
							 | 
						|||
| 
								 | 
							
								                } else {
							 | 
						|||
| 
								 | 
							
								                    $this->sender = new SmsVoicePromptSender($this->appid, $this->appkey);
							 | 
						|||
| 
								 | 
							
								                    //参数:国家码、手机号、语音类型(目前固定为2)、短信内容、播放次数(默认2次)、服务的原样返回的参数
							 | 
						|||
| 
								 | 
							
								                    $result = $this->sender->send('86', $params['mobile'], 2, $params['msg']);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            $rsp = (array)json_decode($result, true);
							 | 
						|||
| 
								 | 
							
								            if ($rsp['result'] == 0 && $rsp['errmsg'] == 'OK') {
							 | 
						|||
| 
								 | 
							
								                return true;
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                //记录错误信息
							 | 
						|||
| 
								 | 
							
								                $this->setError($rsp);
							 | 
						|||
| 
								 | 
							
								                return false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						|||
| 
								 | 
							
								            var_dump($e);
							 | 
						|||
| 
								 | 
							
								            exit();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 记录失败信息
							 | 
						|||
| 
								 | 
							
								     * @param [type] $err [description]
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    private function setError($err)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->sendError = $err;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 获取失败信息
							 | 
						|||
| 
								 | 
							
								     * @return [type] [description]
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function getError()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return $this->sendError;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 检测验证是否正确
							 | 
						|||
| 
								 | 
							
								     * @param Sms $params
							 | 
						|||
| 
								 | 
							
								     * @return  boolean
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function smsCheck(&$params)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 插件安装方法
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function install()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 插件卸载方法
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function uninstall()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 插件启用方法
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function enable()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 插件禁用方法
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function disable()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |