微信公衆號-模板消息通用接口封裝
近期作了微信公衆號的消息通知,微信方面模板愈來愈規範化,跟測試的平臺相差甚遠(fuck,誰讓人家要辦硬)。php
話很少說,進入代碼json
class OfficialSystem { public $tmplateConf; private $accessToken; //微信accessToken public function __construct( $tmplateConf ,$accessToken ){ $this->tmplateConf = $tmplateConf; $this->accessToken = $accessToken; } /** * 返回結果 * @param $error bool 1 表明錯誤,0 無錯誤 * @parame $msg string 返回信息 * @param $data Array 返回內容 * @param $isJson bool 1 返回json, 0 否 **/ public function returnResult( $error,$msg ,$data=[],$isJson=0 ){ $result = [ 'error' => $error, 'msg' => $msg, 'data' => $data, ]; if( $isJson ){ echo json_encode($result); exit(); } return $result; } /** * 發送消息 * @param $modelId sting 微信模板id * @param $touser string 微信openid(公衆號) * @param $url string 跳轉地址 * @param $miniPagepath string 小程序跳轉路徑 * @param $miniAppid string 小程序Appid * @param $list Array 模板數據,如:[ ['value'=>'您好,您有新的訂單','color'=>'blue',...] ] **/ public function Sendmsg( $modelId,$touser,$url,$miniPagepath,$miniAppid,$list=[] ){ if( empty($modelId) || empty($touser) || empty($list) ) $this->returnResult(1,'參數缺失'); $template_id = !empty( $this->tmplateConf[$modelId] ) ? $this->tmplateConf[$modelId]:$this->returnResult(1,'模板錯誤'); //模板消息內容 數組第一個做爲標題,最後一個做爲備註 $data = []; foreach ($list as $k=>$v){ $key = $k==0 ? 'first':"keyword".$k; if( !isset( $list[$k+1] ) ) $key = 'remark'; $data[$key] = [ 'value' => $v['value'], 'color' => !empty($v['color'])? $v['color']:'#173177', ]; } $sends = $this->sendModelMsg($touser,$template_id,$url,$miniAppid,$miniPagepath,$data); $this->returnResult(0,'success',$sends); } /** * @param $touser 用戶openid * @param $template_id * @param $url * @param $miniAppid * @param $miniPagepath 小程序跳轉地址 * @param $data 模板數據 */ public function sendModelMsg( $touser,$template_id,$url='',$miniAppid='',$miniPagepath='',$data ){ $interfaceUrl = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$this->accessToken; $params = [ 'touser' => $touser, 'template_id' => $template_id, 'url' => $url, 'miniprogram' => [ 'appid'=>$miniAppid,'path'=>$miniPagepath ] , 'data' => $data, ]; $sends = $this->httpPost($interfaceUrl,json_encode($params)); $sends = json_decode($sends,1); if( $sends&&$sends['errmsg']!='ok' ){ $this->returnResult(1,'消息發送失敗',$sends); } return $sends; } /** * 獲取用戶信息 * @param $openid openid * @return mixed */ public function getUserInfo( $openid='' ){ $interfaceUrl = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$this->accessToken.'&openid='.$openid; $info = $this->httpGet( $interfaceUrl ); $result = json_decode($info,1); return $result; } /** * @param $touser * @param $msgtype * @param $msgContent */ public function sendCustomMsg( $touser,$msgtype,$msgContent){ // $params = []; // $params['touser'] = $touser; // $params['msgtype'] = $msgtype; // $params["$msgtype"] = $msgContent; // $params = json_encode($params); $params = '{"touser":"'.$touser.'","msgtype":"'.$msgtype.'","text":{'.$msgContent.'}}'; $interfaceUrl = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$this->accessToken; $sends = $this->httpPost($interfaceUrl,$params);//var_dump($params,json_encode($params),$sends);die; $sends = json_decode($sends,1); return $sends; } private function httpGet($url) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/x-www-form-urlencoded", ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err;die; } else { return $response; } } private function httpPost($url,$param){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $param, CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json", 'Content-Length:' . strlen($param) ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { return "cURL Error #:" . $err; } else { return $response; } }
調用事例:小程序
$tmplateConf = [ '1' => 'mnscOp2RHpQtDCt7OpZBLoDTU2fjJ_W75_Mat4rnfxM', //定貨通知模板 '2' => 'DL4EAD47KT1tggbL2OR8iRAYLORI64V4YEM8mjQfSWU', //入庫通知模板 ]; $accessToken = 'o9BuWjkDBvLGV_nch9wPU_-KRp7M'; $OfficialSystem = new OfficialSystem($tmplateConf,$accessToken); //消息內容 $list = [ ['value'=>'您好,您有新的訂單','color'=>'blue'], ['value'=>'P201809010001','color'=>''], ['value'=>'服務中心店','color'=>''], ['value'=>'2018-06-01 10:30:30','color'=>''], ['value'=>'點擊進入詳情','color'=>''], ]; $modelId = 1; $touser = 'o9BuWjkDBvLGV_nch9wPU_-KRp7M'; $url = 'http://www.cnblogs.com/followyou'; $sends = Sendmsg( $modelId,$touser,$url,$miniPagepath='',$miniAppid='',$list); var_dump($sends);
成功返回:api
"errcode": "0", "errmsg": "ok", "msgid": "325381129559375872"
僅供參考,代碼也就這樣哈!數組