口腔客户管理系统
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

SmsConfig.php 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace app\admin\model;
  3. use TencentCloud\Common\Credential;
  4. use TencentCloud\Common\Exception\TencentCloudSDKException;
  5. use TencentCloud\Common\Profile\ClientProfile;
  6. use TencentCloud\Common\Profile\HttpProfile;
  7. use TencentCloud\Sms\V20190711\Models\SendSmsRequest;
  8. use TencentCloud\Sms\V20190711\SmsClient;
  9. use think\Model;
  10. class SmsConfig extends Model
  11. {
  12. public function getAll()
  13. {
  14. $result = $this->select();
  15. return ['rows' => $result];
  16. }
  17. public function send($phone)
  18. {
  19. try {
  20. $sms = $this->find();
  21. if (empty($sms)) {
  22. tojson(10000, '腾讯云短信未设置');
  23. }
  24. /* 必要步骤:
  25. * 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
  26. * 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
  27. * 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
  28. * CAM 密钥查询:https://console.cloud.tencent.com/cam/capi
  29. */
  30. $cred = new Credential($sms['secretId'], $sms['secretKey']);
  31. // $cred = new Credential(getenv("TENCENTCLOUD_SECRET_ID"), getenv("TENCENTCLOUD_SECRET_KEY"));
  32. // 实例化一个 http 选项,可选,无特殊需求时可以跳过
  33. $httpProfile = new HttpProfile();
  34. $httpProfile->setReqMethod('GET'); // POST 请求(默认为 POST 请求)
  35. $httpProfile->setReqTimeout(30); // 请求超时时间,单位为秒(默认60秒)
  36. $httpProfile->setEndpoint('sms.tencentcloudapi.com'); // 指定接入地域域名(默认就近接入)
  37. // 实例化一个 client 选项,可选,无特殊需求时可以跳过
  38. $clientProfile = new ClientProfile();
  39. $clientProfile->setSignMethod($sms['signType']); // 指定签名算法(默认为 HmacSHA256)
  40. $clientProfile->setHttpProfile($httpProfile);
  41. // 实例化 SMS 的 client 对象,clientProfile 是可选的
  42. $client = new SmsClient($cred, 'ap-shanghai', $clientProfile);
  43. // 实例化一个 sms 发送短信请求对象,每个接口都会对应一个 request 对象。
  44. $req = new SendSmsRequest();
  45. /* 填充请求参数,这里 request 对象的成员变量即对应接口的入参
  46. * 您可以通过官网接口文档或跳转到 request 对象的定义处查看请求参数的定义
  47. * 基本类型的设置:
  48. * 帮助链接:
  49. * 短信控制台:https://console.cloud.tencent.com/smsv2
  50. * sms helper:https://cloud.tencent.com/document/product/382/3773 */
  51. /* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
  52. $req->SmsSdkAppid = $sms['appid'];
  53. /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
  54. $req->Sign = $sms['sign'];
  55. /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
  56. // $req->ExtendCode = "0";
  57. /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
  58. * 例如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
  59. $req->PhoneNumberSet = array('+86' . $phone);
  60. /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
  61. // $req->SenderId = "xxx";
  62. /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
  63. // $req->SessionContext = "xxx";
  64. /* 模板 ID: 必须填写已审核通过的模板 ID。可登录 [短信控制台] 查看模板 ID */
  65. $req->TemplateID = $sms['template_id'];//873940
  66. /* 模板参数: 若无模板参数,则设置为空*/
  67. $valid_time = 5;
  68. $a = preg_match_all('/{*}/i', '{1}为您的验证码,请于{2}分钟内填写,如非本人操作,请忽略本短信');//???
  69. $TemplateParamSet = array(1111, $valid_time);
  70. if ($a != count($TemplateParamSet)) {
  71. tojson(10000, '短信模块参数不匹配');
  72. }
  73. $req->TemplateParamSet = $TemplateParamSet;
  74. // 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
  75. $resp = $client->SendSms($req);
  76. // 可以取出单个值,您可以通过官网接口文档或跳转到 response 对象的定义处查看返回字段的定义
  77. // print_r($resp->TotalCount);
  78. // 输出 JSON 格式的字符串回包
  79. $result = $resp->toJsonString();
  80. $result = json_decode($result, true);
  81. $data['appoint_id'] = '';
  82. $data['customer_id'] = '';
  83. $data['create_time'] = '';
  84. $data['content'] = '';
  85. $SmsLog_model = new \app\admin\model\SmsLog();
  86. if (empty($result) || !isset($result['SendStatusSet'][0]['Code']) || $result['SendStatusSet'][0]['Code'] != "Ok" || empty($result['SendStatusSet'][0]['Code'])) {
  87. //添加短信记录
  88. $data['status'] = 1;
  89. $data['reason'] = (isset($result['SendStatusSet'][0]['Message'])) ? $result['SendStatusSet'][0]['Message'] : '发送短信失败';
  90. $SmsLog_model->save($data);
  91. tojson(10000, (isset($result['SendStatusSet'][0]['Message'])) ? $result['SendStatusSet'][0]['Message'] : '发送短信失败');
  92. } else {
  93. $data['status'] = 0;
  94. //添加短信记录
  95. $SmsLog_model->save($data);
  96. tojson(200);
  97. }
  98. } catch (\Exception $e) {
  99. tojson(10000, $e->getMessage());
  100. } catch (TencentCloudSDKException $e) {
  101. tojson(10000, $e->getMessage());
  102. }
  103. }
  104. // public function read($param)
  105. // {
  106. // $result = $this->where($this->getPk(), $param[$this->getPk()])->find();
  107. // if (isset($result[$this->getPk()])) {
  108. // return $result->toArray();
  109. // } else {
  110. // return [];
  111. // }
  112. // }
  113. }