
php中文網最新課程
每日17點準時技術幹貨分享
收到很多童鞋的咨詢,利用微信公衆号的接口能不能給某個使用者發送消息呢,如果說直接發送呢那還真有些限制;
一個是客服消息接口,但是這個需要使用者在48小時内和公衆号有互動才可以發送。
另外一個就是微信的模闆消息,這個沒有發送時間限制,但是微信為了防止一些垃圾資料需要使用模闆才可以發送。
相信我們平時也收到很多模闆消息,實際效果如下:
這種微信模闆消息的效果如何實作呢?
首先需要在微信公衆平台背景的"功能"菜單中選擇模闆消息,如果菜單中沒有模闆消息,需要點選功能插件進行添加,如下圖:
添加插件之後可以在模闆庫中選擇模闆使用,當然也可以建立模闆,一般來說模闆庫中已經夠用了,選擇模闆後一定要記住模闆ID,這在後續的PHP程式中要用到。
接下來說一下接口的調用規則:
http請求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
發送什麼格式的資料呢?發送的資料為json格式,以如下模闆為例:
JSON格式如下:
{"touser": "這裡是接收使用者的OPENID","template_id": "這裡是模闆ID","url": "這裡是點選詳情後跳轉的網址","data": {"first": {"value": "您好!有訪客訪給您留言了。","color": "#173177"},"user": {"value": "張三","color": "#FF0000"},"ask": {"value": "您好,非常關注黎明互聯,有沒有關于支付寶的視訊教程?","color": "#173177"},"remark": {"value": "該使用者已注冊12天","color": "blue"}}}
資料格式現在我們明白了,那麼如何使用PHP發送到伺服器呢,另外在代碼裡面JSON隻能定義成資料拼接完成的字元串嗎?
如果不熟悉字元串或者不喜歡用字元串可以用數組轉換,下面以數組為例給出PHP代碼片段實作微信模闆消息:
class WxTmp{ //請求模闆消息的位址 const TEMP_URL = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='; public function getAccessToken(){ //這裡擷取accesstoken 請根據自己的程式進行修改 return $access_token; } /** * 微信模闆消息發送 * @param $openid 接收使用者的openid * return 發送結果 */ public function send($openid){ $tokens = $this->getAccessToken(); $url = self::TEMP_URL . $tokens; $params = [ 'touser' => $openid, 'template_id' => 'Oblr5uXH_fS79gMC8E0mYz0CpUAHnJtdvAC3PWABrsk',//模闆ID 'url' => 'https://www.liminghulian.com/course/3/lesson/list', //點選詳情後的URL可以動态定義 'data' => [ 'first' => [ 'value' => '您好!有訪客訪給您留言了。', 'color' => '#173177' ], 'user' => [ 'value' => '張三', 'color' => '#FF0000' ], 'ask' => [ 'value' => '您好,非常關注黎明互聯,有沒有關于支付寶的視訊教程?', 'color' => '#173177' ], 'remark' => [ 'value' => '該使用者已注冊12天', 'color' => 'blue' ] ] ]; $json = json_encode($params,JSON_UNESCAPED_UNICODE); return $this->curlPost($url, $json); } /** * 通過CURL發送資料 * @param $url 請求的URL位址 * @param $data 發送的資料 * return 請求結果 */ protected function curlPost($url,$data){ $ch = curl_init(); $params[CURLOPT_URL] = $url; //請求url位址 $params[CURLOPT_HEADER] = FALSE; //是否傳回響應頭資訊 $params[CURLOPT_SSL_VERIFYPEER] = false; $params[CURLOPT_SSL_VERIFYHOST] = false; $params[CURLOPT_RETURNTRANSFER] = true; //是否将結果傳回 $params[CURLOPT_POST] = true; $params[CURLOPT_POSTFIELDS] = $data; curl_setopt_array($ch, $params); //傳入curl參數 $content = curl_exec($ch); //執行 curl_close($ch); //關閉連接配接 return $content; }} $obj = new WxTmp();$openid = '接收模闆資訊的使用者的openid';echo $obj->send($openid);
-END-
▼