Files
jyshd_mWtK2/addons/qcloudsms/Qcloudsms.php
T
li 1b24994e74 feat: 后端全量更新 - 含所有本次需求
- Contract.php: 返回合约账户余额(balance_contract)
- My.php: 地址管理增加BTC/ETH
- AppContract.php: 一键平仓(closeall)
- AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2)
- site.php: 手续费减半(0.018→0.009)
- agent_permission_setup.sql: 代理权限SQL
- crypto_news_crawler.py: 新闻自动采集脚本
2026-03-30 20:16:32 +08:00

265 lines
10 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
use telesign\sdk\messaging\MessagingClient;
use telesign\sdk\voice\VoiceClient;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
// 导入对应产品模块的client
use TencentCloud\Sms\V20210111\SmsClient;
// 导入要请求接口对应的Request类
use TencentCloud\Sms\V20210111\Models\SendSmsRequest;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Common\Credential;
// 导入可选配置类
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
/**
* 插件
*/
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) {
//腾讯
try {
/* 必要步骤:
* 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretIdsecretKey。
* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
* 以免泄露密钥对危及你的财产安全。
* CAM密匙查询: https://console.cloud.tencent.com/cam/capi*/
$cred = new Credential("IKIDhLn151pT0bItU3UsBQabWNYacdVIuoYF", "lPzb9sTGuNsZ6c3MugUOAmNq9874vrlb");
//$cred = new Credential(getenv("TENCENTCLOUD_SECRET_ID"), getenv("TENCENTCLOUD_SECRET_KEY"));
// 实例化一个http选项,可选的,没有特殊需求可以跳过
$httpProfile = new HttpProfile();
// 配置代理
// $httpProfile->setProxy("https://ip:port");
$httpProfile->setReqMethod("GET"); // post请求(默认为post请求)
$httpProfile->setReqTimeout(30); // 请求超时时间,单位为秒(默认60秒)
$httpProfile->setEndpoint("sms.tencentcloudapi.com"); // 指定接入地域域名(默认就近接入)
// 实例化一个client选项,可选的,没有特殊需求可以跳过
$clientProfile = new ClientProfile();
$clientProfile->setSignMethod("TC3-HMAC-SHA256"); // 指定签名算法(默认为HmacSHA256)
$clientProfile->setHttpProfile($httpProfile);
// 实例化要请求产品(以sms为例)的client对象,clientProfile是可选的
// 第二个参数是地域信息,根据您选择的国际站地域,如您选择的是新加坡国际站,则应该填入字符串ap-singapore,地域列表可参考https://intl.cloud.tencent.com/document/api/382/40466?lang=en#region-list
$client = new SmsClient($cred, "ap-singapore", $clientProfile);
// 实例化一个 sms 发送短信请求对象,每个接口都会对应一个request对象。
$req = new SendSmsRequest();
/* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
$req->SmsSdkAppId = "2400000981";
/* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
$req->SignName = "";
/* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
$req->ExtendCode = "";
/* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
* 示例如:+8613711112222, 其中前面有一个+号 86为国家码,13711112222为手机号,最多不要超过200个手机号*/
$phone_number = $params['m_prefix'] . $params['mobile'];
$req->PhoneNumberSet = array($phone_number);
/* 国际/港澳台短信 SenderId: 中国大陆地区短信填空,默认未开通,如需开通请联系 [sms helper] */
$req->SenderId = "";
/* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
$req->SessionContext = "【turkey global】Your OTP code is {1} Don't share this code with others dated!";
/* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
$req->TemplateId = "2905310"; //2905133
/* 模板参数: 若无模板参数,则设置为空*/
$req->TemplateParamSet = array($params['code']);
// 通过client对象调用SendSms方法发起请求。注意请求方法名与请求对象是对应的
// 返回的resp是一个SendSmsResponse类的实例,与请求对象对应
$resp = $client->SendSms($req);
// 输出json格式的字符串回包
// print_r($resp->toJsonString());
// 也可以取出单个值。
// 您可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
// print_r($resp->TotalCount);
return true;
}
catch(TencentCloudSDKException $e) {
// echo $e;
return true;
}
// AlibabaCloud::accessKeyClient('LTAI5tGjBhYq4u2e13f4cAQ6', 'X20XXcrKZHbGjpHHeTo3rfNuhMgeKg')
// ->regionId('ap-southeast-1')
// ->asGlobalClient();
// $phone_number = $params['m_prefix'] . $params['mobile'];
// $result = AlibabaCloud::rpcRequest()
// ->product('Dysmsapi')
// ->host('dysmsapi.ap-southeast-1.aliyuncs.com')
// ->version('2018-05-01')
// ->action('SendMessageToGlobe')
// ->method('POST')
// ->options([
// 'query' => [
// "To" => $phone_number,
// // "From" => "1234567890",
// "Message" => "【Poly】Your OTP code is " . $params['code'] . " Don't share this code with others dated",
// ],
// ])
// ->request();
//// print_r($result->toArray());
//
// return true;
// if ($send_res['status']['code'] == 200) {
// return true;
// } else {
// return true;
// }
// die;
}
/**
* 短信发送通知
* @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;
}
}