日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

星模php格,extend/base/TencentSms.php · 纵之格/ShopXO - Gitee.com

發(fā)布時間:2023/12/10 php 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 星模php格,extend/base/TencentSms.php · 纵之格/ShopXO - Gitee.com 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

// +----------------------------------------------------------------------

// | ShopXO 國內(nèi)領(lǐng)先企業(yè)級B2C免費開源電商系統(tǒng)

// +----------------------------------------------------------------------

// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: Devil

// +----------------------------------------------------------------------

namespace base;

/**

* 短信驅(qū)動

* @author liuyi

* @blog http://ourbrnader.com/

* @version 0.0.1

* @datetime 2020-05-18

*/

class TencentSms

{

// 保存錯誤信息

public $error;

// Access Key ID

private $accessKeyId = '';

// Access Access Key Secret

private $accessKeySecret = '';

// 簽名

private $signName = '';

private $apiHost = "sms.tencentcloudapi.com";

//短信平臺返回的原始數(shù)據(jù)

public $rawData;

/**

* [__construct 構(gòu)造方法]

* @param [int] $param['interval_time'] [間隔時間(默認30)單位(秒)]

* @param [int] $param['expire_time'] [到期時間(默認30)單位(秒)]

* @param [string] $param['key_prefix'] [驗證碼種存儲前綴key(默認 空)]

* @version 0.0.1

* @datetime 2017-03-07T14:03:02+0800

* @author Devil

* @blog http://gong.gg/

*/

public function __construct()

{

$this->signName = MyC('common_sms_sign');

$this->accessKeyId = MyC('common_sms_apikey');

$this->accessKeySecret = MyC('common_sms_apisecret');

$this->platform_appid = MyC('common_sms_sdk_appid');

}

/**

* 簽名

*

* @param unknown $parameters

* @param unknown $accessKeySecret

* @return string

*/

private function computeSignature($host, $payload, $timestamp)

{

$secretId = $this->accessKeyId;

$secretKey = $this->accessKeySecret;

$service = 'sms';

$algorithm = "TC3-HMAC-SHA256";

$httpRequestMethod = 'POST';

$canonicalUri = "/";

$canonicalQueryString = "";

$canonicalHeaders = "content-type:application/json\n" . "host:" . $host . "\n";

$signedHeaders = "content-type;host";

// $payload = json_encode($param,JSON_UNESCAPED_UNICODE);

// echo $payload.PHP_EOL;

$hashedRequestPayload = hash("SHA256", $payload);

$canonicalRequest = $httpRequestMethod . "\n"

. $canonicalUri . "\n"

. $canonicalQueryString . "\n"

. $canonicalHeaders . "\n"

. $signedHeaders . "\n"

. $hashedRequestPayload;

// echo $canonicalRequest.PHP_EOL;

// step 2: build string to sign

$date = gmdate("Y-m-d", $timestamp);

$credentialScope = $date . "/" . $service . "/tc3_request";

$hashedCanonicalRequest = hash("SHA256", $canonicalRequest);

$stringToSign = $algorithm . "\n"

. $timestamp . "\n"

. $credentialScope . "\n"

. $hashedCanonicalRequest;

// echo $stringToSign.PHP_EOL;

// step 3: sign string

$secretDate = hash_hmac("SHA256", $date, "TC3" . $secretKey, true);

$secretService = hash_hmac("SHA256", $service, $secretDate, true);

$secretSigning = hash_hmac("SHA256", "tc3_request", $secretService, true);

$signature = hash_hmac("SHA256", $stringToSign, $secretSigning);

// echo $signature.PHP_EOL;

// step 4: build authorization

$authorization = $algorithm

. " Credential=" . $secretId . "/" . $credentialScope

. ", SignedHeaders=content-type;host, Signature=" . $signature;

// echo $authorization.PHP_EOL;

return $authorization;//返回認證簽名

}

/**

* 短信發(fā)送

* @param [string] $mobile [手機號碼,多個以 英文逗號 , 分割]

* @param [string|array] $code [變量code(單個直接傳入 code 即可,多個傳入數(shù)組)]

* @param [string] $template_code [模板 id]

* @param [boolean] $sign_name [自定義簽名,默認使用基礎(chǔ)配置的簽名]

* @author Devil

* @blog http://gong.gg/

* @version 1.0.0

* @date 2020-04-02

* @desc description

*/

public function SendCode($mobile, $code, $template_code, $sign_name = '')

{

// 簽名

$sign_name = empty($sign_name) ? $this->signName : $sign_name;

// 請求參數(shù)

$params = array( //此處作了修改

'PhoneNumberSet' => $mobile,

'TemplateID' => $template_code,

'Sign' => $sign_name,

'TemplateParamSet' => $code,

'SessionContext' => '',

'SmsSdkAppid' => $this->platform_appid

);

// 計算簽名并把簽名結(jié)果加入請求參數(shù)

$timestamp = time();

$url = 'https://' . $this->apiHost;

$version = '2019-07-11';

$action = "SendSms";

$payload = json_encode($params, JSON_UNESCAPED_UNICODE);

$authorization = $this->computeSignature($this->apiHost, $payload, $timestamp);

$headers = array(

"Authorization:$authorization",

"Content-type:application/json",

"Host:$this->apiHost",

"X-TC-Action:$action",

"X-TC-Version:$version",

"X-TC-Timestamp:$timestamp",

// "X-TC-Region:$region"

);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);

curl_setopt($curl, CURLOPT_AUTOREFERER, 1);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);

curl_setopt($curl, CURLOPT_POST, 1);

$result = curl_exec($curl);

curl_close($curl);

if ($result == false) {

$this->error = "訪問騰訊云短信服務(wù)失敗";

} else {

$result = json_decode($result, true);

}

//因為一般業(yè)務(wù)情況是發(fā)給一個人,這里就簡單處理為取第一個短信的狀態(tài)。

//如果是批量的話,需要遍歷獲得所有的情況,這樣的可以另外寫一個接口。

$this->rawData = $result;

if (isset($result["Response"]['Error'])) {

$errorCode = $result["Response"]['Error']['Code'];

} else if (isset($result["Response"]["SendStatusSet"][0])) {

$sendStatusItem = $result["Response"]["SendStatusSet"][0];

$errorCode = $sendStatusItem['Code'];

} else {

$errorCode = '';

}

if (strtolower($errorCode) != 'ok') {

$this->error = $this->getErrorMessage($errorCode);

return false;

}

return true;

}

/**

* 獲取詳細錯誤信息

*

* @param unknown $status

*/

public function getErrorMessage($status)

{

//查詢錯誤碼地址:

//https://cloud.tencent.com/document/product/382/38780

$message = array(

'FailedOperation.ContainSensitiveWord' => '短信內(nèi)容中含有敏感詞',

'FailedOperation.FailResolvePacket' => '請求包解析失敗,通常情況下是由于沒有遵守 API 接口說明規(guī)范導致的',

'FailedOperation.InsufficientBalanceInSmsPackage' => '套餐包余量不足',

'FailedOperation.JsonParseFail' => '解析請求包體時候失敗',

'FailedOperation.MarketingSendTimeConstraint' => '營銷短信發(fā)送時間限制,為避免騷擾用戶,營銷短信只允許在8點到22點發(fā)送。',

'FailedOperation.MissingSignature' => '沒有申請簽名之前,無法申請模板,請根據(jù) 創(chuàng)建簽名 申請完成之后再次申請。',

'FailedOperation.PhoneNumberInBlacklist' => '手機號在黑名單庫中,通常是用戶退訂或者命中運營商黑名單導致的,可聯(lián)系 sms helper 解決。',

'FailedOperation.PhoneNumberOnBlacklist' => '手機號在黑名單庫中,通常是用戶退訂或者命中運營商黑名單導致的,可聯(lián)系 sms helper 解決。',

'InternalError.RequestTimeException' => '請求發(fā)起時間不正常,通常是由于您的服務(wù)器時間與騰訊云服務(wù)器時間差異超過10分鐘導致的,請核對服務(wù)器時間及 API 接口中的時間字段是否正常。',

'InternalError.Timeout' => '請求下發(fā)短信超時,請參考 60008錯誤詳解。',

'InvalidParameterValue.IncorrectPhoneNumber' => '手機號格式錯誤,請參考 1016錯誤詳解',

'InvalidParameterValue.ProhibitedUseUrlInTemplateParameter' => '禁止在模板變量中使用 URL。',

'InvalidParameterValue.TemplateParameterFormatError' => '驗證碼模板參數(shù)格式錯誤,驗證碼類模版,模版變量只能傳入0 - 6位(包括6位)純數(shù)字',

'LimitExceeded.AppDailyLimit' => '業(yè)務(wù)短信日下發(fā)條數(shù)超過設(shè)定的上限 ,可自行到控制臺調(diào)整短信頻率限制策略。',

'LimitExceeded.DailyLimit' => '短信日下發(fā)條數(shù)超過設(shè)定的上限 (國際/港澳臺),如需調(diào)整限制,可聯(lián)系 sms helper。',

'LimitExceeded.DeliveryFrequencyLimit' => '下發(fā)短信命中了頻率限制策略,可自行到控制臺調(diào)整短信頻率限制策略,如有其他需求請聯(lián)系 sms helper。',

'LimitExceeded.PhoneNumberCountLimit' => '調(diào)用短信發(fā)送 API 接口單次提交的手機號個數(shù)超過200個',

'LimitExceeded.PhoneNumberDailyLimit' => '單個手機號日下發(fā)短信條數(shù)超過設(shè)定的上限,可自行到控制臺調(diào)整短信頻率限制策略。',

'LimitExceeded.PhoneNumberOneHourLimit' => '單個手機號1小時內(nèi)下發(fā)短信條數(shù)超過設(shè)定的上限,可自行到控制臺調(diào)整短信頻率限制策略。',

'LimitExceeded.PhoneNumberSameContentDailyLimit' => '單個手機號下發(fā)相同內(nèi)容超過設(shè)定的上限,可自行到控制臺調(diào)整短信頻率限制策略。',

'LimitExceeded.PhoneNumberThirtySecondLimit' => '單個手機號30秒內(nèi)下發(fā)短信條數(shù)超過設(shè)定的上限,可自行到控制臺調(diào)整短信頻率限制策略。',

'MissingParameter.EmptyPhoneNumberSet' => '傳入的號碼列表為空,請確認您的參數(shù)中是否傳入號碼。',

'UnauthorizedOperation.IndividualUserMarketingSmsPermissionDeny' => '個人用戶沒有發(fā)營銷短信的權(quán)限',

'UnauthorizedOperation.RequestIpNotInWhitelist' => '請求 IP 不在白名單中,您配置了校驗請求來源 IP,但是檢測到當前請求 IP 不在配置列表中,',

'UnauthorizedOperation.SerivceSuspendDueToArrears' => '欠費被停止服務(wù),可自行登錄騰訊云充值來繳清欠款。',

'ContainDomesticAndInternationalPhoneNumber' => '群發(fā)請求里既有國內(nèi)手機號也有國際手機號。',

'UnsupportedOperation.UnsuportedRegion' => '不支持該地區(qū)短信下發(fā)。',

);

if (isset ($message [$status])) {

return $message [$status];

}

return '錯誤狀態(tài)碼:' . $status . ',詳細錯查詢:https://cloud.tencent.com/document/product/382/38780';

}

}

?>

一鍵復(fù)制

編輯

原始數(shù)據(jù)

按行查看

歷史

總結(jié)

以上是生活随笔為你收集整理的星模php格,extend/base/TencentSms.php · 纵之格/ShopXO - Gitee.com的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。