微信公衆號開發--接入

微信公衆號開發
  須要綁定開發者帳號:微信公衆平臺--開發者工具--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,添加事件處理函數,並使微信公衆號推送事件調用該函數。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.主動推送消息
需認證,調用客服消息接口
 
如今只是模糊向的開發操做,若是有錯誤,請聯繫我。
在完成這些操做時,參考了一些其餘博文,但當時沒有好習慣,用完就找不到了,若是有知道線索的請聯繫我。
相關文章
相關標籤/搜索