微信公眾號開發
需要綁定開發者賬號:微信公眾平台--開發者工具--web開發者工具--綁定開發者微信號
微信公眾平台接口調試工具:
https://mp.weixin.qq.com/debug/
接口調試需要使用“access_token”,access_token的獲取需要從在基本設置中的url訪問獲取,其他終端基本無法獲取
1.公眾號類型
(1)訂閱號:主要偏於為用戶傳達資訊(類似報紙雜志),認證前后都是每天只可以群發一條消息;
(2)服務號:主要偏於服務交互(類似銀行,114,提供服務查詢),認證前后都是每個月 可群發4條消息;
(3)企業號:主要用於公司內部通訊使用,需要先驗證身份才可以關注成功企業號。

2.微信公眾號開發類型:
·設置模式:無需認證,無代碼需求,完全依據微信官方管理平台,小白操作,功能有限
·淺交互模式:無需認證,需對接自己的服務器,可在服務器上部署自定義的消息規則,可實現以下接口的自定義交互


·深度交互模式:微信認證,獲取更高級權限
3.微信公眾號接入
(1)微信公眾平台--開發--基本配置




APPID:公眾號唯一標識,連接服務的基本賬號,例如:“wx123456”
appsecret:標識密碼,例如:“abcdefg”
url:填寫自己服務器目錄下接收微信消息的文件,例如:http://服務器域名/../wechatMsgAction.php
token:任意字符串,例如“token”
EncodingAESKey:隨機生成密鑰,例如:“aaaaaaaaaaaaaaaaaaa”
(2)接入操作
·民間接入方式
編輯wechatMsgAction.php文件
1 <?php 2 define("APPID","wx123456");//填寫自己的APPID 3 define("APPSECRET","abcdefg");//填寫自己的APPSECRET 4 define("TOKEN", "token");//token隨便填,只要一致就行。 5 $wechat = new wechat(); 6 $wechat->valid();//微信公眾號安全驗證 7 8 class wechat{ 9 private $_appid; 10 private $_appsecret; 11 private $_token; 12 public function __construct(){ 13 $this->_appid =APPID; 14 $this->_appsecret =APPSECRET; 15 $this->_token =TOKEN; 16 } 17 /** 18 *接入微信平台時驗證 19 **/ 20 public function valid()//檢查安全性 21 { 22 $echoStr = $_GET["echostr"]; 23 24 //valid signature , option 25 if($this->checkSignature()){//檢查簽名是否一致 26 echo $echoStr;//驗證成功后,輸出 27 exit; 28 } 29 } 30 /** 31 *驗證簽名 32 **/ 33 private function checkSignature() 34 { 35 $signature = $_GET["signature"]; 36 $timestamp = $_GET["timestamp"]; 37 $nonce = $_GET["nonce"]; 38 $token = TOKEN; 39 $tmpArr = array($token, $timestamp, $nonce); 40 sort($tmpArr, SORT_STRING); 41 $tmpStr = implode( $tmpArr ); 42 $tmpStr = sha1( $tmpStr ); 43 44 if( $tmpStr == $signature ){ 45 return true; 46 }else{ 47 return false; 48 } 49 } 50 }
官方接入方式:
官方接入demo:
PHP示例代碼下載:
下載
(3)接入
確認將wechatMsgAction.php文件放在服務器配置中url所寫的對應位置(如http://服務器域名/../wechatMsgAction.php)后,點擊“提交”,若提示成功,則配置成功,否則自行排錯
(4)驗證URL有效性成功后即接入生效,成為開發者。你可以在公眾平台網站中申請微信認證,認證成功后,將獲得更多接口權限,滿足更多業務需求。
成為開發者后,用戶每次向公眾號發送消息、或者產生自定義菜單、或產生微信支付訂單等情況時,開發者填寫的服務器配置URL將得到微信服務器推送過來的消息和事件
,開發者可以依據自身業務邏輯進行響應,如回復消息。
4.接收推送


微信服務器在發給己方服務器的xml中的參數“MsgType”負責告訴己方服務器,用戶操作的類型。
MsgType
|
Event
|
信息類型
|
text
|
|
用戶發送了文本消息
|
image
|
|
用戶發送了圖片消息
|
voice
|
|
用戶發送了語音消息
|
video
|
|
用戶發送了視頻消息
|
shortvideo
|
|
用戶發送了小視頻消息
|
location
|
|
用戶發送了地理位置消息
|
link
|
|
用戶發送了連接消息
|
event
|
subscribe
|
用戶關注了公眾號
|
event
|
unsubscribe
|
用戶取消關注了公眾號
|
event
|
subscribe+ EventKey
|
用戶通過掃描帶參二維碼關注了公眾號
|
event
|
SCAN
|
已關注公眾號的用戶掃描了帶參數二維碼
|
event
|
LOCATION
|
用戶進入公眾號時上報地理位置
|
event
|
CLICK
|
用戶點擊菜單拉取消息
|
event
|
VIEW
|
用戶點擊菜單跳轉鏈接
|
具體參考
在微信服務器推送的消息中的關鍵字段:
ToUserName
|
開發者微信號,是接收推送的開發者
|
FromUserName
|
發送方帳號(一個OpenID),用戶相對於公眾號的唯一標識
|
5.事件處理
直接修改wechatMsgAction.php,添加事件處理函數,並使微信公眾號推送事件調用該函數。
1 define("APPID","wx123456");//填寫自己的APPID 2 define("APPSECRET","abcdefg");//填寫自己的APPSECRET 3 define("TOKEN", "token");//token隨便填,只要一致就行。 4 $wechat = new wechat(); 5 $WeChatMessage->Action();//不同於第三步的調用,此處是處理事件的函數 6 class WeChatMessage{ 7 public function Action(){ 8 /*獲得請求時POST:XML字符串不能用$_POST獲取,因為沒有key*/ 9 $xml_str = $GLOBALS['HTTP_RAW_POST_DATA']; 10 if(empty($xml_str)){ 11 die(''); 12 } 13 if(!empty($xml_str)){ 14 // 解析該xml字符串,利用simpleXML 15 libxml_disable_entity_loader(true); 16 //禁止xml實體解析,防止xml注入 17 $request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA); 18 //判斷該消息的類型,通過元素MsgType 19 switch ($request_xml->MsgType){ 20 case 'event': 21 //判斷具體的時間類型(關注、取消、點擊) 22 $event = $request_xml->Event; 23 $Ticket = $request_xml->Ticket; 24 if ($event=='subscribe'&&$Ticket=='') { // 普通關注事件 25 $this->_doSubscribe($request_xml); 26 } 27 if ($event=='subscribe'&&$Ticket!='') {//掃描渠道二維碼關注 28 $this->_doQRSubscribe($request_xml); 29 } 30 if ($event=='SCAN'&&$Ticket!='') {//已關注公眾號掃描渠道二維碼事件 31 $this->_doSCAN($request_xml); 32 } 33 break; 34 case 'text'://文本消息 35 $this->_doText($request_xml); 36 break; 37 case 'image'://圖片消息 38 $this->_doImage($request_xml); 39 break; 40 case 'voice'://語音消息 41 $this->_doVoice($request_xml); 42 break; 43 case 'video'://視頻消息 44 $this->_doVideo($request_xml); 45 break; 46 case 'shortvideo'://短視頻消息 47 $this->_doShortvideo($request_xml); 48 break; 49 case 'location'://位置消息 50 $this->_doLocation($request_xml); 51 break; 52 case 'link'://鏈接消息 53 $this->_doLink($request_xml); 54 break; 55 } 56 } 57 } 58 }
根據MsgType,判斷事件類型進行處理(_do*()是對應的處理函數,自行編寫),當然,也可以依據其他信息處理事件(此代碼為網上摘來的,如果知道原著線索,請聯系我)
5.常用概念
access_token:
·access_token是公眾號的全局唯一接口調用憑據,公眾號調用各接口時都需使用 access_token。
·開發者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。
·access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效
· 公眾號和小程序均可以使用AppID和AppSecret調用本接口來獲取access_token。
· access_token只能通過在IP白名單中的服務器調用接口才能被獲取到
OpenID:
·在關注者與公眾號產生消息交互后,公眾號可獲得關注者的OpenID
·它加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的。對於不同公眾號,同一用戶的openid不同。
·公眾號可通過本接口來根據OpenID獲取用戶基本信息,包括昵稱、頭像、性別、所在城市、語言和關注時間。
6.回復消息模板
己方服務器向用戶回復(發送)消息時,遵循一定的xml格式
7.請求方式
根據接口請求需要,使用curl函數調用接口
get請求:
1 //初始化 2 $curl = curl_init(); 3 //設置抓取的url 4 curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); 5 //設置頭文件的信息作為數據流輸出 6 curl_setopt($curl, CURLOPT_HEADER, 1); 7 //設置獲取的信息以文件流的形式返回,而不是直接輸出。 8 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 9 //執行命令 10 $data = curl_exec($curl); 11 //關閉URL請求 12 curl_close($curl); 13 //顯示獲得的數據 14 print_r($data);
post請求:
1 //初始化 2 $curl = curl_init(); 3 //設置抓取的url 4 curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); 5 //設置頭文件的信息作為數據流輸出 6 curl_setopt($curl, CURLOPT_HEADER, 1); 7 //設置獲取的信息以文件流的形式返回,而不是直接輸出。 8 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 9 //設置post方式提交 10 curl_setopt($curl, CURLOPT_POST, 1); 11 //設置post數據 12 $post_data = array( 13 "username" => "coder", 14 "password" => "12345" 15 ); 16 curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); 17 //執行命令 18 $data = curl_exec($curl); 19 //關閉URL請求 20 curl_close($curl); 21 //顯示獲得的數據 22 print_r($data);
8.主動推送消息
需認證,調用客服消息接口
現在只是模糊向的開發操作,如果有錯誤,請聯系我。
在完成這些操作時,參考了一些其他博文,但當時沒有好習慣,用完就找不到了,如果有知道線索的請聯系我。