123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
-
- namespace app\admin\model;
-
- use TencentCloud\Common\Credential;
- use TencentCloud\Common\Exception\TencentCloudSDKException;
- use TencentCloud\Common\Profile\ClientProfile;
- use TencentCloud\Common\Profile\HttpProfile;
- use TencentCloud\Sms\V20190711\Models\SendSmsRequest;
- use TencentCloud\Sms\V20190711\SmsClient;
- use think\Model;
-
- class SmsConfig extends Model
- {
-
- public function getAll()
- {
- $result = $this->select();
- return ['rows' => $result];
- }
-
- public function send($phone)
- {
- try {
- $sms = $this->find();
- if (empty($sms)) {
- tojson(10000, '腾讯云短信未设置');
- }
- /* 必要步骤:
- * 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
- * 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
- * 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
- * CAM 密钥查询:https://console.cloud.tencent.com/cam/capi
- */
- $cred = new Credential($sms['secretId'], $sms['secretKey']);
- // $cred = new Credential(getenv("TENCENTCLOUD_SECRET_ID"), getenv("TENCENTCLOUD_SECRET_KEY"));
- // 实例化一个 http 选项,可选,无特殊需求时可以跳过
- $httpProfile = new HttpProfile();
- $httpProfile->setReqMethod('GET'); // POST 请求(默认为 POST 请求)
- $httpProfile->setReqTimeout(30); // 请求超时时间,单位为秒(默认60秒)
- $httpProfile->setEndpoint('sms.tencentcloudapi.com'); // 指定接入地域域名(默认就近接入)
- // 实例化一个 client 选项,可选,无特殊需求时可以跳过
- $clientProfile = new ClientProfile();
- $clientProfile->setSignMethod($sms['signType']); // 指定签名算法(默认为 HmacSHA256)
- $clientProfile->setHttpProfile($httpProfile);
- // 实例化 SMS 的 client 对象,clientProfile 是可选的
- $client = new SmsClient($cred, 'ap-shanghai', $clientProfile);
- // 实例化一个 sms 发送短信请求对象,每个接口都会对应一个 request 对象。
- $req = new SendSmsRequest();
- /* 填充请求参数,这里 request 对象的成员变量即对应接口的入参
- * 您可以通过官网接口文档或跳转到 request 对象的定义处查看请求参数的定义
- * 基本类型的设置:
- * 帮助链接:
- * 短信控制台:https://console.cloud.tencent.com/smsv2
- * sms helper:https://cloud.tencent.com/document/product/382/3773 */
- /* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
- $req->SmsSdkAppid = $sms['appid'];
- /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
- $req->Sign = $sms['sign'];
- /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
- // $req->ExtendCode = "0";
- /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
- * 例如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
- $req->PhoneNumberSet = array('+86' . $phone);
- /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
- // $req->SenderId = "xxx";
- /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
- // $req->SessionContext = "xxx";
- /* 模板 ID: 必须填写已审核通过的模板 ID。可登录 [短信控制台] 查看模板 ID */
- $req->TemplateID = $sms['template_id'];//873940
- /* 模板参数: 若无模板参数,则设置为空*/
- $valid_time = 5;
- $a = preg_match_all('/{*}/i', '{1}为您的验证码,请于{2}分钟内填写,如非本人操作,请忽略本短信');//???
- $TemplateParamSet = array(1111, $valid_time);
- if ($a != count($TemplateParamSet)) {
- tojson(10000, '短信模块参数不匹配');
- }
- $req->TemplateParamSet = $TemplateParamSet;
- // 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
- $resp = $client->SendSms($req);
- // 可以取出单个值,您可以通过官网接口文档或跳转到 response 对象的定义处查看返回字段的定义
- // print_r($resp->TotalCount);
- // 输出 JSON 格式的字符串回包
- $result = $resp->toJsonString();
- $result = json_decode($result, true);
- $data['appoint_id'] = '';
- $data['customer_id'] = '';
- $data['create_time'] = '';
- $data['content'] = '';
- $SmsLog_model = new \app\admin\model\SmsLog();
- if (empty($result) || !isset($result['SendStatusSet'][0]['Code']) || $result['SendStatusSet'][0]['Code'] != "Ok" || empty($result['SendStatusSet'][0]['Code'])) {
- //添加短信记录
- $data['status'] = 1;
- $data['reason'] = (isset($result['SendStatusSet'][0]['Message'])) ? $result['SendStatusSet'][0]['Message'] : '发送短信失败';
- $SmsLog_model->save($data);
- tojson(10000, (isset($result['SendStatusSet'][0]['Message'])) ? $result['SendStatusSet'][0]['Message'] : '发送短信失败');
- } else {
- $data['status'] = 0;
- //添加短信记录
- $SmsLog_model->save($data);
- tojson(200);
- }
- } catch (\Exception $e) {
- tojson(10000, $e->getMessage());
- } catch (TencentCloudSDKException $e) {
- tojson(10000, $e->getMessage());
- }
- }
-
- // public function read($param)
- // {
- // $result = $this->where($this->getPk(), $param[$this->getPk()])->find();
- // if (isset($result[$this->getPk()])) {
- // return $result->toArray();
- // } else {
- // return [];
- // }
- // }
-
- }
|