You've already forked qlg.tsgz.moe
127 lines
4.5 KiB
PHP
Executable File
127 lines
4.5 KiB
PHP
Executable File
<?php
|
|
namespace addons\dysms\model;
|
|
use think\addons\BaseModel as Base;
|
|
use think\Db;
|
|
use Aliyun\Core\Config;
|
|
use Aliyun\Core\Profile\DefaultProfile;
|
|
use Aliyun\Core\DefaultAcsClient;
|
|
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
|
|
/**
|
|
* ============================================================================
|
|
* 阿里云-云通信接口
|
|
*/
|
|
class Dysms extends Base{
|
|
public function getConfigs(){
|
|
$data = cache('dysms_sms');
|
|
if(!$data){
|
|
$rs = Db::name('addons')->where('name','Dysms')->field('config')->find();
|
|
$data = json_decode($rs['config'],true);
|
|
cache('dysms_sms',$data,31622400);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public function install(){
|
|
Db::startTrans();
|
|
try{
|
|
$hooks = ['sendSMS'];
|
|
$this->bindHoods("Dysms", $hooks);
|
|
Db::commit();
|
|
return true;
|
|
}catch (\Exception $e) {
|
|
Db::rollback();
|
|
return false;
|
|
}
|
|
}
|
|
public function uninstall(){
|
|
Db::startTrans();
|
|
try{
|
|
$hooks = ['sendSMS'];
|
|
$this->unbindHoods("Dysms", $hooks);
|
|
Db::commit();
|
|
return true;
|
|
}catch (\Exception $e) {
|
|
Db::rollback();
|
|
return false;
|
|
}
|
|
}
|
|
/**
|
|
* 发送短信接口
|
|
*/
|
|
public function http($params){
|
|
require_once WST_ADDON_PATH.'dysms/sdk/vendor/autoload.php';
|
|
Config::load();
|
|
$smsConf = $this->getConfigs();
|
|
//此处需要替换成自己的AK信息
|
|
$accessKeyId = $smsConf['smsKey'];;
|
|
$accessKeySecret = $smsConf['smsPass'];
|
|
//短信API产品名(短信产品名固定,无需修改)
|
|
$product = "Dysmsapi";
|
|
//短信API产品域名(接口地址固定,无需修改)
|
|
$domain = "dysmsapi.aliyuncs.com";
|
|
//暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
|
|
$region = "cn-hangzhou";
|
|
//初始化访问的acsCleint
|
|
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
|
|
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
|
|
$acsClient= new DefaultAcsClient($profile);
|
|
$request = new SendSmsRequest();
|
|
//必填-短信接收号码。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
|
|
$request->setPhoneNumbers($params['phoneNumber']);
|
|
//必填-短信签名
|
|
$request->setSignName($smsConf["signature"]);
|
|
//必填-短信模板Code
|
|
$request->setTemplateCode($smsConf[$params['params']['tpl']['tplCode']]);
|
|
//选填-假如模板中存在变量需要替换则为必填(JSON格式),友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
|
|
$request->setTemplateParam($params['content']);
|
|
//$request->setTemplateParam(json_encode($params['params']['params']));
|
|
// $request->setTemplateParam("{\"orderNo\":\"Tom\", \"orderStatue\":\"123\"}");
|
|
//选填-发送短信流水号
|
|
$request->setOutId($params['timeId']);
|
|
//发起访问请求
|
|
//dump($request);
|
|
$resp = $acsClient->getAcsResponse($request);
|
|
return $resp;
|
|
}
|
|
|
|
public function sendSMS($params){
|
|
$smsConf = $this->getConfigs();
|
|
$code = [];
|
|
$isVerfy = false;
|
|
foreach($params['params']['params'] as $key =>$v){
|
|
//$key = str_replace('_','',$key);
|
|
if($key=='VERFIY_CODE')$isVerfy = true;
|
|
}
|
|
foreach($params['params']['params'] as $key =>$v){
|
|
//$key = str_replace('_','',$key);
|
|
if($isVerfy && $key=='VERFIY_CODE'){
|
|
$code[] = '"'.$key.'":"'.$v.'"';
|
|
}
|
|
}
|
|
foreach($params['params']['params'] as $key =>$v){
|
|
//$key = str_replace('_','',$key);
|
|
if($isVerfy==false && $key!='VERFIY_CODE'){
|
|
$code[] = '"'.$key.'":"'.$v.'"';
|
|
}
|
|
}
|
|
$codes = "{".implode(',',$code)."}";
|
|
$params['content'] = $codes;
|
|
$timeId = time().rand(100,999);
|
|
$params['timeId'] = $timeId;
|
|
$code = $this->http($params);
|
|
$log = model('common/logSms')->get($params['smsId']);
|
|
$log->smsReturnCode = json_encode($code);
|
|
$log->smsContent = $codes."||".$params['params']['tpl']['tplCode']."||".$smsConf[$params['params']['tpl']['tplCode']]."||".$timeId;
|
|
$log->save();
|
|
try{
|
|
if(strtolower($code->Message)=='ok'){
|
|
$params['status']['msg'] = '短信发送成功!';
|
|
$params['status']['status'] = 1;
|
|
}
|
|
}catch (\Exception $e) {
|
|
$params['status']['msg'] = $code->Message;
|
|
$params['status']['status'] = -1;
|
|
}
|
|
}
|
|
}
|