定義
微信api即為公眾平台訊息接口為開發者提供了一種新的訊息處理方式。
微信公眾平台訊息接口為開發者提供了一種新的訊息處理方式。微信公眾平台訊息接口為開發者提供與用戶進行訊息互動的能力。對於成功接入訊息接口的微信公眾賬號,當用戶發訊息給公眾號,微信公眾平台伺服器會使用http請求對接入的網址進行訊息推送,第三方伺服器可通過回響包回復特定結構,從而達到回復訊息的目的。
步驟
申請接口
點擊申請,填寫網址url和token,其中token可由開發者可以任意填寫,用作生成簽名。
網址接入
公眾平台用戶提交信息後,微信伺服器將傳送GET請求到填寫的URL上,並且帶上四個參數:
參數
描述
signature
微信加密簽名
timestamp
時間戳
nonce
隨機數
echostr
隨機字元串
開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信伺服器,請原樣返回echostr參數內容,則接入生效,否則接入失敗。
signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
加密/校驗流程:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字元串拼接成一個字元串進行sha1加密
3. 開發者獲得加密後的字元串可與signature對比,標識該請求來源於微信
訊息推送
當普通微信用戶向公眾賬號發訊息時,微信伺服器將POST該訊息到填寫的URL上。
訊息推送結構
文本訊息
參數
描述
ToUserName
開發者微信號
FromUserName
傳送方帳號(一個OpenID)
CreateTime
訊息創建時間 (整型)
MsgType
text
Content
文本訊息內容
MsgId
訊息id,64位整型
圖片訊息
參數
描述
ToUserName
開發者微信號
FromUserName
傳送方帳號(一個OpenID)
CreateTime
訊息創建時間 (整型)
MsgType
imane
PicUrl
圖片連結
MsgId
訊息id,64位整型
地理位置訊息
參數
描述
ToUserName
開發者微信號
FromUserName
傳送方帳號(一個OpenID)
CreateTime
訊息創建時間 (整型)
MsgType
location
Location_X
地理位置維度
Location_Y
地理位置精度
Scale
地圖縮放大小
Label
地理位置信息
MsgId
訊息id,64位整型
連結訊息
參數
描述
ToUserName
接收方微信號
FromUserName
傳送方微信號,若為普通用戶,則是一個OpenID
CreateTime
訊息創建時間
MsgType
訊息類型,link
Title
訊息標題
Description
訊息描述
Url
訊息連結
MsgId
訊息id,64位整型
事件推送
事件推送只支持微信4.5版本,即將開放,敬請期待。
參數
描述
ToUserName
接收方微信號
FromUserName
傳送方微信號,若為普通用戶,則是一個OpenID
CreateTime
訊息創建時間
MsgType
訊息類型,event
Event
事件類型,有ENTER(進入會話)和LOCATION(地理位置)
Latitude
地理位置維度,事件類型為LOCATION的時存在
Longitude
地理位置經度,事件類型為LOCATION的時存在
Precision
地理位置精度,事件類型為LOCATION的時存在
訊息回復
對於每一個POST請求,開發者在回響包中返回特定xml結構,對該訊息進行回響(現支持回復文本、圖文、語音、視頻、音樂和對收到的訊息進行星標操作)。
微信伺服器在五秒內收不到回響會斷掉連線。
回復xml結構如下:
回復文本訊息
參數
描述
ToUserName
接收方帳號(收到的OpenID)
FromUserName
開發者微信號
CreateTime
訊息創建時間
MsgType
text
Content
回復的訊息內容
FuncFlag
位0x0001被標誌時,星標剛收到的訊息。
回複音樂訊息
參數
描述
ToUserName
接收方帳號(收到的OpenID)
FromUserName
開發者微信號
CreateTime
訊息創建時間
MsgType
music
MusicUrl
音樂連結
HQMusicUrl
高質量音樂連結,WIFI環境優先使用該連結播放音樂
FuncFlag
位0x0001被標誌時,星標剛收到的訊息。
回復圖文訊息
參數
描述
ToUserName
接收方帳號(收到的OpenID)
FromUserName
開發者微信號
CreateTime
訊息創建時間
MsgType
news
ArticleCount
圖文訊息個數,限制為10條以內
Articles
多條圖文訊息信息,默認第一個item為大圖
Title
圖文訊息標題
Description
圖文訊息描述
PicUrl
圖片連結,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80
Url
點擊圖文訊息跳轉連結
注意事項
1.用戶OpenID對一個公眾號是固定的串
2.請使用80連線埠
3.用戶關注公眾號,微信公眾平台伺服器推送一條內容為Hello2BizUser的文本訊息到第三方伺服器
發展趨勢
1.商務類APP
2.移動化的企業辦公管理
3.年輕的成員將成為企業APP強有力的推動者
示例代碼
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "";
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>