https://gitee.com/quejingshi/thinkphp5-alisms-api/blob/master/Alisms.php
<?php
/**
* Created by PhpStorm.
* User: quejingshi
* Date: 2019-03-20
* Time: 08:48
*/
namespace app\expand\controller;
use think\Controller;
/**
* Class Alisms
* @package app\expand\controller
* 阿里云短信通讯服务
*/
class Alisms extends Controller
{
protected $ACCESSKEY_ID = '';
protected $ACCESSKEY_SECRET = '';
protected $SEND_MESSAGE = 'http://dysmsapi.aliyuncs.com';
protected $RECEPTION_MESSAGE = 'http://dybaseapi.aliyuncs.com';
protected $SIGN_NAME = '';
/**
* 发送短信
*/
public function sendSms($PhoneNumbers, $TemplateCode, $TemplateParam)
{
$parameter = [
// 公共参数
'AccessKeyId' => $this->ACCESSKEY_ID,
'Action' => 'SendSms',
'Format' => 'json',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => time() . rand(10000, 99999),
'SignatureVersion' => '1.0',
'Timestamp' => gmdate("Y-m-d\TH:i:s\Z"),
'Version' => '2017-05-25',
// 接口参数
'PhoneNumbers' => $PhoneNumbers,
'SignName' => $this->SIGN_NAME,
'TemplateCode' => $TemplateCode,
'TemplateParam' => $TemplateParam
];
$parameter['Signature'] = self::generateSignature($parameter);
$url = $this->SEND_MESSAGE . '?' . http_build_query($parameter);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
dump($result);
// 以数组方式返回,否则解析 json 会报错
if ($result['Code'] != 'OK') {
return ['code' => -100, 'msg' => '短信服务wen t错误'];
}
return ['code' => 0, 'msg' => '发送成功'];
}
/**
* 生成签名
*/
function generateSignature($data)
{
ksort($data);
$parameter = null;
foreach ($data as $k => $v) {
$parameter .= '&' . self::specialUrlEncode($k) . '=' . self::specialUrlEncode($v);
}
$stringToSign = 'GET&%2F&' . self::specialUrlEncode(substr($parameter, 1));
$signaTure = base64_encode(hash_hmac('sha1', $stringToSign, $this->ACCESSKEY_SECRET . '&', true));
return $signaTure;
}
/**
* 构造待签名的请求串
*/
function specialUrlEncode($string)
{
$string = urlencode($string);
$string = preg_replace('/\+/', '%20', $string);
$string = preg_replace('/\*/', '%2A', $string);
$string = preg_replace('/%7E/', '~', $string);
return $string;
}
}