1. 程式人生 > >微信公眾平臺開發-java

微信公眾平臺開發-java

    微信公眾平臺是運營者通過公眾號為微信使用者提供資訊和服務的平臺,首先我們登入微信公眾平臺,通過其後臺可以設定一些基礎服務,如選單設定、訊息自動回覆,但由於企業服務具有複雜性。通過微信公眾平臺後臺設定一般無法滿足自己的業務需求。所以,我們需要通過自己的伺服器靈活的去控制微信服務。

    在開發之前有個概念我們要弄清楚,微信使用者屬於微信公眾平臺(騰訊公司),我們無法直接與使用者進行直接互動,我們的微信使用者與我們的伺服器(我們公司用的是阿里雲)之間永遠隔著一層微信公眾平臺伺服器。在開發中我們是通過與微信公眾平臺之間的互動來控制微信公眾平臺與使用者之間互動。

我們與微信公眾平臺會話方式有兩種:

1、公眾號訊息會話(後端開發)

  1). 接收微信推送的交易報文(需要在微信公眾平臺後臺設定我們自己的伺服器地址)

  2). 呼叫微信介面傳送請求

2、公眾號內網頁(前端開發)

  1). 微信授權(獲取使用者基本資訊)

  2). 微信JS-SDK(微信分享、上傳圖片、拍照)

重要引數說明

AppID:微信公眾號標識,可在微信後臺檢視;

access_token公眾平臺以access_token為介面呼叫憑據,所有介面的呼叫需要先獲取access_token,它是通過AppID(唯一憑證)和AppSecret(唯一憑證金鑰)獲取,access_token在2小時內有效,過期需要重新獲取,但1天內獲取次數有限,開發者需自行儲存。我們需要有中控伺服器去主動重新整理access_token並進行快取。

AppID和AppSecret可以在微信公眾平臺基本配置裡面檢視

OpenID:微信公眾號使用者唯一標識,與 AppID是多對一的關係。在微信公眾平臺後臺設定好我們自己的伺服器地址後,使用者與公眾號的每次交易,公眾號伺服器都會把OpendID傳送過來。

在微信開發服務架構設計中 應該把微信服務分為核心介面層、服務介面層、控制中心。核心介面要絕對穩定,要脫離與業務的耦合度;業務介面層呼叫核心介面層給使用者提供服務。控制中心負責呼叫核心介面層重新整理資料到快取服務供業務介面層使用。請參考下圖


今天,我們先不講頁面相關的東西

1:接收微信推送的交易報文

我們先實現第一種(接收微信推送的報文) ,首先我們要在微信公眾平臺設定我們的服務

器地址(要不然我們到哪裡去討http報文啊);

配置步驟請見官方文件

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

配置的這個地址請注意一下,由於微信要往這個地址推送交易報文之前要進行伺服器校驗

伺服器驗證的時候傳送的get請求 
推送交易報文時傳送的是post請求

我們要根據請求型別來分別處理。


這樣,當驗證通過以後。使用者的一舉一動微信公眾平臺都會推送相應的報文到我們的伺服器上,你可以在你的微信公眾號隨便玩幾下,傳送一些資訊,你可以在後臺看到響應的資訊。

一般我們對這步的處理是 :

 1.先儲存所有的交易日誌 
 2.然後根據報文進行非同步處理(例如通過訊息佇列儲存OpenID,同步影響訊息回覆速度哦)
 3.最後有選擇性的進行訊息回覆 (例如判斷是關注事件回覆訊息【你好,歡迎關注!】)

接收訊息又分為兩種:

普通訊息:文字訊息、圖片訊息、語音訊息、視訊訊息 ...

事件訊息:關注、取消關注、自定義選單事件 ...

訊息回覆:
普通訊息:文字訊息、圖片訊息、語音訊息、視訊訊息 ...

這裡的訊息接收與回覆是多對多的關係 : 接收文字訊息 可以回覆 圖片訊息 、接收 關注事件可以回覆文字訊息

示例報文

文字訊息:
<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訊息建立時間 (整型)
MsgTypetext
Content文字訊息內容
MsgId訊息id,64位整型

回覆文字訊息:

<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>
引數是否必須描述
ToUserName接收方帳號(收到的OpenID)
FromUserName開發者微訊號
CreateTime訊息建立時間 (整型)
MsgTypetext
Content回覆的訊息內容(換行:在content中能夠換行,微信客戶端就支援換行顯示)

所有的報文裡都有OpenID,這裡我們一般在回覆訊息的同時,要對接受到報文做訊息做非同步處理,來抓取使用者的OpenID。

2: 呼叫微信介面傳送請求

這裡舉兩個典型例子

1. 獲取access_token

2. 發送模板訊息

前面已經講到access_token是所有介面的通行證,所以先獲取access_token(這個注意要在控制中心獲取,並放到快取中。

),並且微信業務伺服器發現access_token失效,要有重新整理access_token快取的功能。

1.獲取access_token

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
引數是否必須說明
grant_type獲取access_token填寫client_credential
appid第三方使用者唯一憑證
secret第三方使用者唯一憑證金鑰,即appsecret

2.傳送模板消息  

這步需要你先到快取中去獲取access_token,然後還記得在第一步【接收微信推送的交易報文】獲取的OpenID嗎,現在派上用場了,你終於可以對這個客戶形成特殊的服務了。

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

POST資料示例如下:

      {
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",  
           "miniprogram":{
             "appid":"xiaochengxuappid12345",
             "pagepath":"index?foo=bar"
           },          
           "data":{
                   "first": {
                       "value":"恭喜你購買成功!",
                       "color":"#173177"
                   },
                   "keyword1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keyword2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keyword3": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"歡迎再次購買!",
                       "color":"#173177"
                   }
           }
       }

引數說明

引數是否必填說明
touser接收者openid
template_id模板ID
url模板跳轉連結
miniprogram跳小程式所需資料,不需跳小程式可不用傳該資料
appid所需跳轉到的小程式appid(該小程式appid必須與發模板訊息的公眾號是繫結關聯關係)
pagepath所需跳轉到小程式的具體頁面路徑,支援帶引數,(示例index?foo=bar)
data模板資料
color模板內容字型顏色,不填預設為黑色

欣賞一下效果安靜

至此,希望你已經瞭解微信後臺相關開發。
本章內容結合自身實戰經驗編寫,理念為主。

相關推薦

公眾平臺開發-java

    微信公眾平臺是運營者通過公眾號為微信使用者提供資訊和服務的平臺,首先我們登入微信公眾平臺,通過其後臺可以設定一些基礎服務,如選單設定、訊息自動回覆,但由於企業服務具有複雜性。通過微信公眾平臺後臺設定一般無法滿足自己的業務需求。所以,我們需要通過自己的伺服器靈活的去控制

Java公眾平臺開發之OAuth2.0網頁授權

col nts har 順序 pan getcount iba unionid syn 根據官方文檔點擊查看在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權

java公眾平臺開發

http style 消息發送 req gets 信號 多說 接收消息 servle 微信公眾平臺的開發,總體說來也是簡單的,就是先大概看下微信公眾平臺接口文檔。 請先大概瀏覽一下API手冊,我們會發現,推送給微信服務器的數據有兩種:xml的形式,和json的形式. 那麽

java公眾平臺開發(使用sunny ngrok設定外網url)

使用Sunny-Ngrok贈送的免費域名進行http服務對映 1、首先在本站註冊成為會員 2、開通隧道 在上圖中表單資訊解釋:     隧道名稱:可以隨便填寫,只是為了使用者在往後之後這個隧道是幹嘛的  

Java公眾平臺開發之自定義選單

一、自定義選單的說明和按鈕型別 1、選單說明 1)自定義選單最多包括3個一級選單,每個一級選單最多包含5個二級選單。 2)一級選單最多4個漢字,二級選單最多7個漢字,多出來的部分將會以“...”代替。 3)建立自定義選單後,選單的重新整理策略是,在使用者進入公

公眾平臺開發教程(含java程式碼)》下載

2018年11月02日 14:23:40 茹粿鰅莧丨你 閱讀數:7 標籤: 程式設計 資料 區

Java公眾平臺開發之素材管理

微信素材管理和群發這塊文件對Java很不友好。本文只對新增臨時素材,新增永久素材做介紹,其餘獲取、刪除、修改自行補充公眾號經常有需要用到一些臨時性的多媒體素材的場景,例如在使用介面特別是傳送訊息時,對多媒體檔案、多媒體訊息的獲取和呼叫等操作,是通過media_id來進行的。素

【備忘】【No5】公眾平臺開發入門到實戰開發視訊教程(Java+PHP)

(1)微信入門視訊 共14節課 (2)微信公眾平臺搭建與開發揭祕 共50節課 (3)深入淺出微信公眾平臺實戰開發(微網站、LBS雲、Api介面呼叫、服務號高階介面) 共16節課 (4)微信公眾平臺搭建與開發揭祕50集 (5)兄弟連24集 微信開發VIP教程 (6)微信jav

Java公眾平臺開發(三)--接收訊息的分類及實體的建立

轉自:http://www.cuiyongzhi.com/post/41.html 前面一篇有說道應用伺服器和騰訊伺服器是通過訊息進行通訊的,並簡單介紹了微信端post的訊息型別,這裡我們將建立訊息實體以方便我們後面的使用! (一)訊息實體基礎類

Java公眾平臺開發(二)--伺服器post訊息體的接收

轉自: http://www.cuiyongzhi.com/post/39.html 在上一篇的文章中我們詳細講述瞭如何將我們的應用伺服器和微信騰訊伺服器之間的對接操作,最後接入成功,不知道你有沒有發現在上一篇的【controller】中我定義了一個get方法和一個post方法,但是在使用過程中我

Java公眾平臺開發(一)--接入微公眾平臺

轉自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我們的開發過程中無論如何最好的參考工具當然是我們的官方文件了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

Java公眾平臺開發(四)--回覆訊息的分類及實體的建立

轉自:http://www.cuiyongzhi.com/post/42.html 前面有說道對接收到微信伺服器訊息後對訊息的分類,當時主要分為普通訊息和事件訊息,這裡我們要講述的是我們在給使用者回覆的訊息型別,在這裡也可以大致分為兩類:一種為不需要上傳資源到微信伺服器的這裡成為【普通訊息回覆】;還有一種需

Java公眾平臺開發之生成帶參二維碼

微信官方提供的生成二維碼介面得到的是當前公眾號的二維碼。 目前有2種類型的二維碼: 1、臨時二維碼,是有過期時間的,最長可以設定為在二維碼生成後的30天(即2592000秒)後過期,但能夠生成較多數量,主要用於帳號繫結等不要求二維碼永久儲存的業務場景 2

Java公眾平臺開發(五)--文字及圖文訊息回覆的實現

轉自:http://www.cuiyongzhi.com/post/43.html 上篇我們說到回覆訊息可以根據是否需要上傳檔案到微信伺服器可劃分為【普通訊息】和【多媒體訊息】,這裡我們來講述普通訊息的回覆實現,在訊息回覆中存在一個關鍵欄位【openid】,它是微信使用者對於公眾號的唯一標識,這裡不做過多解

Java公眾平臺開發【番外篇】(七)--公眾平臺測試帳號的申請

轉自;http://www.cuiyongzhi.com/post/45.html 前面幾篇一直都在寫一些比較基礎介面的使用,在這個過程中一直使用的都是我個人微博認證的一個個人賬號,原本準備這篇是寫【多媒體訊息回覆】的,後來主要到我個人賬號的介面許可權不夠,所以在這裡插入一篇【公眾平臺測試帳號的申請】的文章

Java公眾平臺開發(六)--開發中的token獲取

轉自:http://www.cuiyongzhi.com/post/44.html (一)token的介紹 引用:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。acce

Java公眾平臺開發(八)--多媒體訊息回覆

轉自:http://www.cuiyongzhi.com/post/46.html 之前我們在做訊息回覆的時候我們對回覆的訊息簡單做了分類,前面也有講述如何回覆【普通訊息型別訊息】,這裡將講述多媒體訊息的回覆方法,【多媒體訊息】包含回覆圖片訊息/回覆語音訊息/回覆視訊訊息/回覆音樂訊息,這裡以圖片訊息的回覆

公眾平臺開發Java實現群發訊息

這裡會分步介紹程式碼所實現的功能,在文章最後會附上完整的類以及用到的其他類。 1. 獲取AccessToken access_token是公眾號的全域性唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善

公眾平臺開發之模板訊息(Java)

由於柳峰老師的新書還沒有出來,網上也沒有過多介紹基於Java語言的開發微信公眾平臺模板訊息的例子,因此有了本文。由於個人表達能力和程式設計能力有限,請多多包涵。本文僅介紹擁有模板訊息許可權的微信公眾賬號開發。 本文分為以下兩部分: 1.開發模板訊息SDK 2.構造模板訊息併

Java公眾平臺開發(九)--關鍵字回覆以及客服介面實現(該公眾號暫時無法提供服務解決方案)

轉自:http://www.cuiyongzhi.com/post/47.html 我們在微信公眾號的後臺可以發現微信給我們制定了兩種模式,一種是開發者模式(也就是我們一直在做的開發),還有一種模式是編輯模式,然而很蛋疼的是有些功能一旦我們切換到開發者模式下就無法使用了,比較典型的就是關鍵字回覆以及伺服器無