微信公眾號開發--接入


微信公眾號開發
  需要綁定開發者賬號:微信公眾平台--開發者工具--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.主動推送消息
需認證,調用客服消息接口
 
現在只是模糊向的開發操作,如果有錯誤,請聯系我。
在完成這些操作時,參考了一些其他博文,但當時沒有好習慣,用完就找不到了,如果有知道線索的請聯系我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM