123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- namespace crmeb\services\sms\storage;
- use crmeb\services\sms\BaseSms;
- use crmeb\services\HttpService;
- /**
- * 腾讯云短信
- * Class Tencent
- * @package crmeb\services\sms\storage
- */
- class Tencent extends BaseSms
- {
- //接口请求地址
- const API_URL = 'https://sms.tencentcloudapi.com';
- /**
- * 发送模板id
- * @var array
- */
- protected $templates = [];
- /**
- * @var string[]
- */
- protected $header = ['Content-Type:application/json'];
- /**
- * @var string
- */
- protected $secretId = '';
- /**
- * @var string
- */
- protected $secretKey = '';
- /**
- * 短信SDKid
- * @var string
- */
- protected $smsSdkAppId = '';
- /**
- * 短信签名
- * @var string
- */
- protected $signName = '';
- /**
- * @var string
- */
- protected $region = "ap-guangzhou";
- /**
- * 版本号
- * @var string
- */
- protected $version = "2021-01-11";
- /**
- * 加密方式
- * @var string
- */
- protected $algorithm = 'TC3-HMAC-SHA256';
- /**
- * 产品名称
- * @var string
- */
- protected $service = 'sms';
- /**
- * @param array $config
- * @return mixed|void
- */
- protected function initialize(array $config = [])
- {
- parent::initialize($config);
- $this->smsSdkAppId = $config['tencent_sms_app_id'] ?? '';
- $this->secretId = $config['tencent_sms_secret_id'] ?? '';
- $this->secretKey = $config['tencent_sms_secret_key'] ?? '';
- $this->signName = $config['tencent_sms_sign_name'] ?? '';
- $this->region = $config['tencent_sms_region'] ?? '';
- }
- /**
- * @param string $phone
- * @param string $templateId
- * @param array $data
- * @return mixed|void
- */
- public function send(string $phone, string $templateId, array $data)
- {
- $body = json_encode([
- 'PhoneNumberSet' => [$phone],
- 'SmsSdkAppId' => $this->smsSdkAppId,
- 'SignName' => $this->signName,
- 'TemplateId' => $templateId,
- 'TemplateParamSet' => $data,
- ]);
- $res = HttpService::request(self::API_URL, 'post', $body, $this->getHeader($body));
- $res = json_decode($res, true);
- if (!empty($res['Response']['Error'])) {
- return $this->setError($res['Response']['Message']);
- }
- if ($res['Response']['SendStatusSet'][0]['Code'] != 'Ok') {
- return $this->setError($res['Response']['SendStatusSet'][0]['Message']);
- }
- return $res;
- }
- /**
- * 获取请求header
- * @param string $boby
- * @return string[]
- */
- protected function getHeader(string $boby)
- {
- $host = str_replace(['https://', 'http://'], '', self::API_URL);
- $header = [
- 'Content-Type:application/json; charset=utf-8',
- 'Host:' . $host,
- 'X-TC-Action:SendSms'
- ];
- $httpRequestMethod = 'POST';
- $canonicalUri = '/';
- $canonicalQueryString = '';
- $canonicalHeaders = "content-type:application/json; charset=utf-8\n" . "host:" . $host . "\n";
- $signedHeaders = 'content-type;host';
- $hashedRequestPayload = hash("SHA256", $boby);
- $canonicalRequest = $httpRequestMethod . "\n"
- . $canonicalUri . "\n"
- . $canonicalQueryString . "\n"
- . $canonicalHeaders . "\n"
- . $signedHeaders . "\n"
- . $hashedRequestPayload;
- $service = $this->service;
- $timestamp = time();
- $date = gmdate("Y-m-d", $timestamp);
- $credentialScope = $date . "/" . $service . "/tc3_request";
- $hashedCanonicalRequest = hash("SHA256", $canonicalRequest);
- $stringToSign = $this->algorithm . "\n"
- . $timestamp . "\n"
- . $credentialScope . "\n"
- . $hashedCanonicalRequest;
- $secretDate = hash_hmac("SHA256", $date, "TC3" . $this->secretKey, true);
- $secretService = hash_hmac("SHA256", $service, $secretDate, true);
- $secretSigning = hash_hmac("SHA256", "tc3_request", $secretService, true);
- $signature = hash_hmac("SHA256", $stringToSign, $secretSigning);
- $authorization = $this->algorithm
- . " Credential=" . $this->secretId . "/" . $credentialScope
- . ", SignedHeaders=content-type;host, Signature=" . $signature;
- array_push($header, 'Authorization:' . $authorization, 'X-TC-Timestamp:' . $timestamp, 'X-TC-Version:' . $this->version,
- 'X-TC-Region:' . $this->region);
- return $header;
- }
- public function open()
- {
- // TODO: Implement open() method.
- }
- public function modify(string $sign = null, string $phone = '', string $code = '')
- {
- // TODO: Implement modify() method.
- }
- public function info()
- {
- // TODO: Implement info() method.
- }
- public function temps(int $page, int $limit, int $type)
- {
- // TODO: Implement temps() method.
- }
- public function apply(string $title, string $content, int $type)
- {
- // TODO: Implement apply() method.
- }
- public function applys(int $tempType, int $page, int $limit)
- {
- // TODO: Implement applys() method.
- }
- public function record($record_id)
- {
- // TODO: Implement record() method.
- }
- }
|