'dysmsapi.aliyuncs.com', 'format' => 'JSON', 'version' => '2017-05-25', 'signatureVersion' => '1.0', 'signatureMethod' => 'HMAC-SHA1', 'accessKeyId' => null, 'accessKeySecret' => null, 'signName' => null, 'templateCode' => null, ); public function __construct($conf) { $this->setConf($conf); } public function setConf($conf) { $this->conf = array_merge($this->conf, $conf); return true; } /** * 发送验证码 * * @example shell curl -d 'Action=SingleSendSms &SignName=阿里云短信服务 &TemplateCode=SMS_1595010 &RecNum=13011112222 &ParamString={"no":"123456"} &<公共请求参数>' 'https://sms.aliyuncs.com/' * @return boolean */ public function singleSendSms($mobile, $params, $template = null, $sign = null) { $data = [ 'Action' => 'SendSms', 'SignName' => empty($sign) ? $this->conf['signName'] : $sign, 'TemplateCode' => empty($template) ? $this->conf['templateCode'] : $template, 'PhoneNumbers' => is_array($mobile) ? implode(',', $mobile) : $mobile, 'TemplateParam' => json_encode($params), ]; if (empty($data['SignName']) || empty($data['TemplateCode'])) { return false; } $tmp = $this->mergePublicParams($data); $tmp['Signature'] = $this->sign('GET', $tmp); $url = 'https://'.$this->conf['host'].'/?' . http_build_query ( $tmp ); $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 ); if ($result['Message'] == 'OK') { return ['code'=>0,'message'=>'发送成功']; }else{ return ['code'=>1,'message'=>$result['Message']]; } } /** * 合并“公共请求参数” * * @link https://help.aliyun.com/document_detail/44362.html */ private function mergePublicParams($data) { $default = [ 'Format' => $this->conf['format'], 'Version' => $this->conf['version'], 'SignatureVersion' => $this->conf['signatureVersion'], 'SignatureMethod' => $this->conf['signatureMethod'], 'AccessKeyId' => $this->conf['accessKeyId'], 'Timestamp' => gmDate("Y-m-d\TH:i:s\Z"), 'SignatureNonce' => uniqid('', true), ]; return array_merge($default,$data); } /** * 签名 * * @link https://help.aliyun.com/document_detail/44363.html */ private function sign($httpMethod, $data) { ksort($data); $q = http_build_query($data); return base64_encode(hash_hmac('sha1', $httpMethod . '&%2F&' . rawurlencode($q), $this->conf['accessKeySecret'] . '&', true)); } } ?>