微信公衆平臺開發(1)入門教程

預備篇

1、申請微信公衆賬號:

微信公衆平臺地址:https://mp.weixin.qq.com/

微信開發官方說明文檔:http://mp.weixin.qq.com/wiki/home/

微信開發測試公衆賬號申請:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login (打開後點擊登錄,用自己的微信號掃一掃就會發放一個相應的測試公衆賬號,此賬號擁有所有接口權限,僅供程序員測試使用)

2、網站空間

如果自己有的話就忽略,沒有的可以使用阿里雲,領券地址:死戳這裏

配置篇

1、代碼上傳

將下列代碼保存到一個index.php的文件中,並將此文件示例文件上傳到SAE代碼管理庫中(代碼下載

 

<?php
/**
  * 作者:smalle
  * 網址:http://blog.csdn.net/oldinaction
  * 微信公衆號:smallelife
  */

//定義 TOKEN(要與開發者中心配置的TOKEN一致)
define("TOKEN", "smalle");
//實例化對象
$wechatObj = new wechatCallbackapiTest();
//調用函數
if (isset($_GET['echostr'])) {
	$wechatObj->valid();
}else{
	$wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
	public function valid()
	{
		$echoStr = $_GET["echostr"];

		if($this->checkSignature()){
			echo $echoStr;
			exit;
		}
	}

	public function responseMsg()
	{
        // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; // 虛擬機可能禁止register_globals導致無法獲取body數據
		$postStr = file_get_contents("php://input");

		if (!empty($postStr)){
				libxml_disable_entity_loader(true);//安全防護
				$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
				$fromUsername = $postObj->FromUserName;
				$toUsername = $postObj->ToUserName;
				$keyword = trim($postObj->Content);
				$time = time();
				$textTpl = "<xml>
							<ToUserName><![CDATA[%s]]></ToUserName>
							<FromUserName><![CDATA[%s]]></FromUserName>
							<CreateTime>%s</CreateTime>
							<MsgType><![CDATA[%s]]></MsgType>
							<Content><![CDATA[%s]]></Content>
							<FuncFlag>0</FuncFlag>
							</xml>";             
				if(!empty( $keyword ))
				{
					$msgType = "text";
					//用戶給公衆號發消息後,公衆號被動(自動)回覆的消息內容
					$contentStr = "歡迎來到微信公衆平臺開發世界!";
					$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
					echo $resultStr;
				}else{
					echo "Input something...";
				}

		}else {
			echo "";
			exit;
		}
	}
		
	private function checkSignature()
	{
		if (!defined("TOKEN")) {
			throw new Exception('TOKEN is not defined!');
		}
		
		$signature = $_GET["signature"];
		$timestamp = $_GET["timestamp"];
		$nonce = $_GET["nonce"];
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}

?>

 

2、開發者中心服務器配置

進入公衆平臺後點擊開發者中心,在服務器配置欄按如下圖進行配置(URL改爲自己SAE項目的URL地址),配置完成後保存並點擊啓用(注意:一定要先上傳以上代碼到空間再來配置,否則無法通過驗證就提示配置失敗)

3、示例結果展示

上面的代碼實現的是一個發送任意文本消息後,公衆號都會回覆一句“歡迎來到微信公衆平臺開發世界!”

4、代碼結構分析

 

  • 第9行【define("TOKEN", "smalle");】:定義了一個TOKEN(令牌),其值與在開發者中心服務器配置的Token要保持一致。
  • 第11行【$wechatObj = new wechatCallbackapiTest();】 :示例化一個wechatCallbackapiTest類對象,wechatCallbackapiTest類中包含三個函數,valid()、responseMsg()迴應消息、checkSignature()檢查簽名。我們剛開始需要關注的就是responseMsg()中的內容。
  • 第40-51行【$textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName>......</xml>";】:是我們自己的服務器發給微信服務器的一個xml數據格式,裏面的%s在第56行中動態附加。
  • 第56行【$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);】:第一個參數$textTpl指的即時第40行定義的變量,後面的參數依次是上述xml數據格式中的%s。

 

收發消息原理

​1、文字概述

當用戶發送消息給公衆號時(或某些特定的用戶操作引發的事件推送時),會產生一個POST請求,微信服務器將POST消息的XML數據包到開發者填寫的URL上,開發者可以在響應包(Get)中返回特定XML結構,來對該消息進行響應(現支持回覆文本、圖片、圖文、語音、視頻、音樂)。

2、接收消息XML數據包介紹

以接收文本消息的XML數據包爲例。接收文本消息時XML數據格式如下:

 

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

相關參數:

 

參數		描述
ToUserName	開發者微信號
FromUserName	發送方帳號(一個OpenID)
CreateTime	消息創建時間 (整型)
MsgType	 	消息類型(text)
Content	 	文本消息內容
MsgId	 	消息id,64位整型

3、被動回覆消息XML數據包介紹

以被動回覆文本消息的XML數據包爲例。回覆文本消息時XML數據格式如下:

 

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

 

相關參數:

 

參數		是否必須	描述
ToUserName	是	 	接收方帳號(收到的OpenID)
FromUserName	是		開發者微信號
CreateTime	是	 	消息創建時間 (整型)
MsgType	 	是	 	text
Content	 	是	 	回覆的消息內容(換行:在content中能夠換行,微信客戶端就支持換行顯示)

4、圖解

 

 

 

微信用戶給公衆號發送一條"this is a test"消息,微信服務器和我的服務器之間以xml格式在後臺進行數據傳輸,最終將"你好"返回給用戶。

 

 

 

 

 

 

 

===================================微笑微笑微笑===================================

關注【Smalle】【微信公衆號:smallelife】              微笑             捐贈【Smalle】【微信公衆號:smallelife】

關注就有豪禮相送哦,羨慕源碼、羨慕工具、羨慕文檔應有盡有      微笑       你的掃碼便是我前進的動力,羨慕掃碼、羨慕掃碼、羨慕掃碼

===================================微笑微笑微笑===================================

 

                                     

 

發佈了36 篇原創文章 · 獲贊 15 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章