不得不说,官网的文档就是用来装逼的。
接个接口各种问题,强行解释为 签名 及其复杂,用来增加使用第三方的成本
还有调试,在线调试也有问题,有的没的,真的 连必选参数都能弄错
话不多,上代码
* @time 2022-09-03
*/
date_default_timezone_set("PRC");
class Tx_sms {
//put your code here
// 参数
private $uid = ''; //在 云API密钥 上申请的标识身份 SecretId 入口https://console.cloud.tencent.com/capi
private $pwd = ''; //在 云API密钥 上申请的标识身份 SecretKey
private $TemplateID = ''; // 模板 ID,必须填写已审核通过的模板 ID
private $SmsSdkAppid = ''; //短信SdkAppid在 [短信控制台](https://console.cloud.tencent.com/smsv2) 添加应用后生成的实际SdkAppid,示例如1400006666。
private $post_url = 'https://sms.tencentcloudapi.com/';
function __construct($templateid = '', $SmsSdkAppid = '') {
$this->TemplateID = $templateid;
$this->SmsSdkAppid = $SmsSdkAppid;
}
/**
* 无参数短信发送
* 注意点:腾讯短信接口 参数空字符不需要传递
* 测试时,尽量有的没得都试一下
*/
function send_sms2($mobile = '18520745660') {
$Timestamp = time();
// '您好,您在分期乐-京回收的卡券回收订单回收失败,请点击订单查看失败原因!请核对后重新提交!';
$Nonce = mt_rand(111111, 999999);
$TemplateParamSet = ''; //模板参数, 比如验证码的 数字
$Sign = '京回收平台'; //短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名
// $mobile = '+8618520745660'; //例如:+8610011112222, 其中前面有一个+号 ,86为国家码,
$data = array(
'Action' => 'SendSms',
'PhoneNumberSet.0' => '+86' . $mobile,
'TemplateID' => $this->TemplateID,
'Sign' => $Sign,
// 'TemplateParamSet.0' => $TemplateParamSet,
'SmsSdkAppid' => $this->SmsSdkAppid,
'Nonce' => $Nonce,
'Region' => 'ap-guangzhou',
'SecretId' => $this->uid,
'Timestamp' => $Timestamp,
// 'SessionContext'=> '您好,您在分期乐-京回收的卡券回收订单回收失败,请点击订单查看失败原因!请核对后重新提交!',
'Version' => '2019-07-11',
);
$qsign = $this->tosign('POST', $data, $this->pwd);
$data['Signature'] = $qsign;
$result = $this->_sendRequest($this->post_url, $data, 'POST');
$result_ary = json_decode($result, true); // json转array
$req = $result_ary['Response']['SendStatusSet'][0]['Code'];
if ($req == 'Ok') {
// 发送成功
return true;
} else {
//记录日志
require_once dirname(dirname(__FILE__)) . '/ALLClass.php';
$pub = new ALLClass();
$pub->data_log($result, __FUNCTION__ . '.log');
}
return false;
}
/**
* 参数只有一个或者没有短信发送
* 注意点:腾讯短信接口 参数空字符不需要传递
* 测试时,尽量有的没得都试一下
* @param type $mobile 手机号
* @param type $TemplateParamSet 模板信息
* @return boolean 成功返回boolean true
*/
function send_sms($mobile = '18520745660', $TemplateParamSet='') {
$Timestamp = time();
// '您好,您收的卡券回收订单回收失败,请点击订单查看失败原因!请核对后重新提交!';
$Nonce = mt_rand(111111, 999999);
// $TemplateParamSet = ''; //模板参数, 比如验证码的 数字
$Sign = '京回收平台'; //短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名
// $mobile = '+8618520745660'; //例如:+8610011112222, 其中前面有一个+号 ,86为国家码,
$data = array(
'Action' => 'SendSms',
'PhoneNumberSet.0' => '+86' . $mobile,
'TemplateID' => $this->TemplateID,
'Sign' => $Sign,
'TemplateParamSet.0' => $TemplateParamSet,
'SmsSdkAppid' => $this->SmsSdkAppid,
'Nonce' => $Nonce,
'Region' => 'ap-guangzhou',
'SecretId' => $this->uid,
'Timestamp' => $Timestamp,
// 'SessionContext'=> '您的卡券回收订单回收失败,请点击订单查看失败原因!请核对后重新提交!',
'Version' => '2019-07-11',
);
if(empty($TemplateParamSet)){
unset($data['TemplateParamSet.0']);
}
$qsign = $this->tosign('POST', $data, $this->pwd);
$data['Signature'] = $qsign;
$result = $this->_sendRequest($this->post_url, $data, 'POST');
$result_ary = json_decode($result, true); // json转array
$req = $result_ary['Response']['SendStatusSet'][0]['Code'];
if ($req == 'Ok') {
// 发送成功
return true;
} else {
//记录日志
require_once dirname(dirname(__FILE__)) . '/ALLClass.php';
$pub = new ALLClass();
$pub->data_log($result, __FUNCTION__ . '.log');
}
return false;
}
function _sendRequest($url, $paramArray, $method = 'POST') {
$ch = curl_init();
if ($method == 'POST') {
$paramArray = is_array($paramArray) ? http_build_query($paramArray, null, '&', PHP_QUERY_RFC3986) : $paramArray;
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $paramArray);
} else {
$url .= '?' . http_build_query($paramArray, null, '&', PHP_QUERY_RFC3986);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (false !== strpos($url, "https")) {
// 证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
$resultStr = curl_exec($ch);
return $resultStr;
}
function tosign($pa, $param, $pwd) {
ksort($param);
$signStr = $pa . "sms.tencentcloudapi.com/?";
foreach ($param as $key => $value) {
$signStr = $signStr . $key . "=" . $value . "&";
}
$signStr = substr($signStr, 0, -1);
$signature = base64_encode(hash_hmac("sha1", $signStr, $pwd, true));
return $signature;
}
function test() {
$mobile=$_REQUEST['mobile'];
var_dump($mobile);
$this->send_sms($mobile,'test');
}
}
//$sms=new Tx_sms();
//$sms->test();
调用简单,参数填写正确,直接把最后两行注释干掉,运行文件即可
下面来一首忘记了给诸君的文化瑰宝:
登鹳雀楼
作者:王之涣
白日依山尽,
黄河入海流。
欲穷千里目,
更上一层楼。