<?php namespace ComCTCC; /** * 模板短信发送类 * @author yangchaochao * */ class SendTemplateMessage { const OAUTH_URL = 'https://oauth.api.189.cn'; const API_URL = 'http://api.189.cn'; const OAUTH_ACCESS_TOKEN = '/emp/oauth2/v3/access_token'; const SEND_TEMPLATE_MESSAGE = '/v2/emp/templateSms/sendSms'; private $app_id = ''; private $app_secret = ''; private $grant_type = ''; private $access_token = ''; public $errCode = 40001; public $errMsg = "no access"; public function __construct($options) { $this->app_id = isset($options['app_id']) ? $options['app_id'] : ''; $this->app_secret = isset($options['app_secret']) ? $options['app_secret'] : ''; $this->grant_type = isset($options['grant_type']) ? $options['grant_type'] : ''; $this->access_token = isset($options['access_token']) ? $options['access_token'] : ''; } /** * 获取access_token * @param string $app_id * @param string $app_secret * @param string $access_token * @return Ambigous <string, unknown, mixed, object> */ public function getAccessToken($app_id = '', $app_secret = '', $grant_type = '', $access_token = '') { if (!$app_id || !$app_secret || !$grant_type){ $app_id = $this->app_id; $app_secret = $this->app_secret; $grant_type = $this->grant_type; } if ($access_token){ $this->access_token = $access_token; return $this->access_token; } $cache_name = 'sendtemplatemessage_access_token' . $app_id; if ($rs = S($cache_name)){ $this->access_token = $rs; return $this->access_token; } $post_param = array( 'grant_type' => $grant_type ,'app_id' => $app_id ,'app_secret' => $app_secret ); $access_token_url = self::OAUTH_URL . self::OAUTH_ACCESS_TOKEN; $http_result = $this->http_post($access_token_url, $post_param); if ($http_result){ $json = json_decode($http_result); if (!$json || $json->res_code != 0){ $this->errCode = isset($json->res_code) ? $json->res_code : "-1"; $this->errMsg = isset($json->res_message) ? $json->res_message : 'json解析失败'; return false; }else{ $this->access_token = $json->access_token; $expire = $json->expires_in ? intval($json->expires_in)-100 : 3600; S($cache_name,$this->access_token,$expire); return $this->access_token; } } return false; } /** * 发送模板短信 * @param unknown $acceptor_tel * @param unknown $template_id * @param unknown $template_param * @param unknown $timestamp * @param string $app_id * @return Ambigous <string, mixed>|mixed|boolean */ public function send($acceptor_tel, $template_id, $template_param, $timestamp, $app_id = '') { if (!$this->access_token && !$this->getAccessToken()){ $result['code'] = $this->errCode; $result['message'] = $this->errMsg; return $result; } if(!$app_id){ $app_id = $this->app_id; } $post_param = array( 'app_id' => $app_id ,'access_token' => $this->access_token ,'acceptor_tel' => $acceptor_tel ,'template_id' => $template_id ,'template_param' => json_encode($template_param) ,'timestamp' => $timestamp ); $send_template_url = self::API_URL . self::SEND_TEMPLATE_MESSAGE; $http_result = $this->http_post($send_template_url, $post_param); if ($http_result){ $json = json_decode($http_result); if(!$json || $json->res_code != 0){ $result['code'] = isset($json->res_code) ? $json->res_code : "-1"; $result['message'] = isset($json->res_message) ? $json->res_message : 'json解析失败'; return $result; }else{ $result['code'] = $json->res_code; $result['message'] = $json->res_message; $result['idertifier'] = $json->idertifier; return $result; } } return false; } /** * GET 请求 * @param string $url */ public function http_get($url){ $oCurl = curl_init(); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; } } /** * POST 请求 * @param string $url * @param array $param * @param boolean $post_file 是否文件上传 * @return string content */ private function http_post($url,$param,$post_file=false){ $oCurl = curl_init(); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } if (is_string($param) || $post_file) { $strPOST = $param; } else { $aPOST = array(); foreach($param as $key=>$val){ $aPOST[] = $key."=".urlencode($val); } $strPOST = join("&", $aPOST); } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); curl_setopt($oCurl, CURLOPT_ENCODING, 'UTF-8'); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; } } }
用于ThinkPHP框架,其他框架修改下缓存方式也是可用的。