給微信伺服器發訊息
請原諒我還是沒有去看webchat-api的文件,不過我確實看了程式碼,所以接下來可以聊聊怎麼給微信伺服器發訊息。
微信伺服器開放了很多API,不過這些API還是挺整齊的,套路很簡單。說白了就是各種get或者post它提供的url一下,然後它給你一個json的響應。藉著ES 6和Promise的東風,我搞了下面這樣一個實現:
走在隊伍最前面的是Talker
,它的身後跟著一群Manager。除此之外,Talker
還有個助手,叫AccessTokenKeeper
,它幫Talker
管理向微信伺服器喊話用的口令。這個喊話小團伙就這三種崗位,結構簡單,權責清晰。
每次我們要發什麼訊息的時候,就把關鍵內容告訴相應的Manager,Manager會幫給你寫一份格式化的報告。就是上圖中Message那個樣子,其中會有url
,method
,json格式的parameters
或者body
。我們把這個Message交給Talker
去send
就ok了。Talker會根據Message中的method
,決定用get
還是post
,當然,具體工作它都是交給著名的通訊員fetch去幹的。
有一點要說明的是,如果你對accessToken
有特殊的要求,可以實現一個TokenStore
給Talker
,你怎麼存Talker
並不關心,只要有loadAccessToken
,需要的時候能把accessToken
拿出來就可以了。
用程式碼來描述這個過程,大概是這樣的:
talker.send(UserManager.usersGet())
.then(response => response.json())
.then(json => {
if(json.errcode) {
console.log("Get user list got error:",json.errmsg)
return(Error(json.errmsg))
} else {
console.log("Get users:",json)
return MessageManager.textToCustom("感謝訂閱",json.next_openid)
}
})
.catch(error => {
console.log("There is an error to get nextOpenId")
})
.then(message => talker.send(message))
.then(response => response.json())
.then(json => {
if(json.errcode) {
console.log(`Send text message to customer ${nextOpenId} got error:${json.errmsg}`)
} else {
console.log(`Send text message to ${nextOpenId} success`)
}
})
接下來請看我們最重要的Talker
:
class Talker {
constructor(options) {
this.tokenKeeper = new TokenKeeper(options)
}
send(message) {
switch(message.method) {
case "get":
return this._get(message)
case "post":
return this._post(message)
default:
return new Promise(( resolve,reject) => {
reject({
errcode:10001,
errmsg:"There is no method in message"
})
})
}
}
_get(message) {
...
}
_post(message) {
...
}
}
篇幅有限,就不完全展開了,_get和_post都很簡單,就是拿到accessToken後返回一個fetch請求。雖然Talker簡單,但Manager更簡單,比如MessageManager
的textToCustomer
:
static textToCustom(content,openId) {
return {
"url":`${customUrlPrefix}send`,
"method" : "post",
"body": {
"touser":openId,
"msgtype":"text",
"text":
{
"content":content
}
}
}
}
最複雜的應該算是TokenKeeper
了,但算上空行我也只寫了62行程式碼,還有多一半是從web-api的實現裡抄過來的,沒啥可看的。
可能隨著瞭解的不斷深入,還有更復雜的處理。但目前來看,最複雜的應該是具體業務的開發了。
相關文章
- 微信程式開發系列教程(三)使用微信API給微信使用者發文字訊息API
- 微信怎麼群發訊息?微信群發助手群發訊息圖文教程
- 微信開發推送訊息案例
- 微信開發中的訊息驗證與訊息回覆
- 微信程式開發系列教程(二)使用JavaScript給微信使用者傳送訊息JavaScript
- 微信開發——同步粉絲、群發訊息
- PHP微信開發之模板訊息回覆PHP
- 微信小程式開發(十七)模板訊息微信小程式
- 微信公眾號開發之客服訊息
- 從網頁上發訊息給ICQ (轉)網頁
- 企業微信hook,自定義工具,收發訊息Hook
- 使用 laravel-wechat-notification 傳送微信模板訊息、企業微信應用訊息Laravel
- Java指令碼實現在微信聊天框發訊息Java指令碼
- Spring Boot+Socket實現與html頁面的長連線,客戶端給伺服器端發訊息,伺服器給客戶端輪詢傳送訊息,附案例原始碼Spring BootHTML客戶端伺服器原始碼
- 微信小程式模板訊息還能群發?無限制推送?微信小程式
- 微信公眾號開發(二)識別訊息型別型別
- 微信公眾平臺開發(十二) 傳送客服訊息
- 微信公眾平臺開發(十) 訊息回覆總結
- 微信小程式模板訊息詳解微信小程式
- iOS 給父類傳送訊息iOS
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- https安全性 帶給im 訊息加密的啟發HTTP加密
- 解析微信xml訊息使用的jar包XMLJAR
- OC訊息機制,訊息轉發機制
- iOS 訊息轉發iOS
- 利用redis的hash結構搭建訊息服務(發訊息,訂閱訊息,消費訊息,退訂)Redis
- 【實戰教程】微信卡券訊息處理
- 觀察者模式-將訊息通知給觀察者模式
- 深入Facebook訊息應用伺服器伺服器
- Bridge - RPC 訊息伺服器RPC伺服器
- Python自制微信機器人:群發訊息、自動接收好友Python機器人
- Python構建企業微信自動訊息轉發服務端Python服務端
- 好訊息!微信小程式開發環境自帶vConsole微信小程式開發環境
- wechat_pusher : 基於Golang開發的微信訊息定時推送框架Golang框架
- EMQ X MQTT 5.0 伺服器的保留訊息與訊息過期間隔MQQT伺服器
- 在python中使用itchat傳送微信訊息Python
- 如何用Python記錄微信撤回的訊息Python
- 小程式開發|5分鐘學會微信小程式模板訊息“召回利器”微信小程式