微信公眾平臺的口號是:再小的個體,也" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 微信公眾平調(diào)試開發(fā)部署實戰(zhàn)(Java)

微信公眾平調(diào)試開發(fā)部署實戰(zhàn)(Java)

時間:2023-05-28 12:09:01 | 來源:網(wǎng)站運營

時間:2023-05-28 12:09:01 來源:網(wǎng)站運營

微信公眾平調(diào)試開發(fā)部署實戰(zhàn)(Java):內(nèi)容介紹:微信公眾平臺、Java開發(fā)環(huán)境搭建、多站點Nginx反向代理、內(nèi)網(wǎng)隧道穿透NAT、任務(wù)型對話系統(tǒng)、圖靈機器人、開發(fā)者微信公眾消息體結(jié)構(gòu)。

微信公眾平臺的口號是:再小的個體,也有自己的品牌。微信公眾平臺實現(xiàn)了信息通知、用戶連接和用戶管理的功能,可以與用戶互動起來。

微信公眾號已經(jīng)成為了一個人找信息、信息找人、信息找信息、人找人的多向交流工具,毫無疑問微信公眾號在為用戶提供有價值的內(nèi)容信息、進行客戶管理、提高用戶粘性等都發(fā)揮了巨大價值。而且微信公眾號、小程序、視頻號、微信支付等形成了閉環(huán),他們之間進行了互通,也為用戶提供了非常好的體驗。

微信公眾平臺是運營者通過公眾號為微信用戶提供資訊和服務(wù)的平臺,而公眾平臺開放接口則是提供服務(wù)的基礎(chǔ)。微信公眾號平臺提供了基礎(chǔ)的如自定義菜單,消息回復(fù)等功能。想要定制化為用戶提供服務(wù)還是需要搭建自己的微信公眾號服務(wù)器來為用戶提供服務(wù),而這塊兒是需要編碼部署,域名申請備案等。大部分微信公眾號博主只能借助第三方,成本也是比較高;本次分享也是希望能對大家有所幫助。

對于微信公眾號平臺開發(fā)者一般都是在局域網(wǎng)進行開發(fā),那么和外網(wǎng)是不互通的,所以能有免費的內(nèi)網(wǎng)穿透工具還提供域名以及域名解析方案肯定能使得開發(fā)效率大大提高。

1 公眾號功能介紹

為了識別用戶,每個用戶針對每個公眾號會產(chǎn)生一個安全的OpenID,如果需要在多公眾號、移動應(yīng)用之間做用戶共通,則需前往微信開放平臺,將這些公眾號和應(yīng)用綁定到一個開放平臺賬號下,綁定后,一個用戶雖然對多個公眾號和應(yīng)用有多個不同的OpenID,但他對所有這些同一開放平臺賬號下的公眾號和應(yīng)用,只有一個UnionID,可以在用戶管理 - 獲取用戶基本信息(UnionID機制)文檔了解詳情。

1、微信公眾平臺開發(fā)是指為微信公眾號進行業(yè)務(wù)開發(fā),為移動應(yīng)用、PC端網(wǎng)站、公眾號第三方平臺(為各行各業(yè)公眾號運營者提供服務(wù))的開發(fā),請前往微信開放平臺接入。

2、在申請到認證公眾號之前,你可以先通過測試號申請系統(tǒng),快速申請一個接口測試號,立即開始接口測試開發(fā)。

3、在開發(fā)過程中,可以使用接口調(diào)試工具來在線調(diào)試某些接口。

4、每個接口都有每日接口調(diào)用頻次限制,可以在公眾平臺官網(wǎng) - 開發(fā)者中心處查看具體頻次。

5、在開發(fā)出現(xiàn)問題時,可以通過接口調(diào)用的返回碼,以及報警排查指引(在公眾平臺官網(wǎng) - 開發(fā)者中心處可以設(shè)置接口報警),來發(fā)現(xiàn)和解決問題。

6、公眾平臺以access_token為接口調(diào)用憑據(jù),來調(diào)用接口,所有接口的調(diào)用需要先獲取access_token,access_token在2小時內(nèi)有效,過期需要重新獲取,但1天內(nèi)獲取次數(shù)有限,開發(fā)者需自行存儲,詳見獲取接口調(diào)用憑據(jù)(access_token)文檔。

公眾號主要通過公眾號消息會話和公眾號內(nèi)網(wǎng)頁來為用戶提供服務(wù)的,下面分別介紹這兩種情況:

1、公眾號消息會話

公眾號是以微信用戶的一個聯(lián)系人形式存在的,消息會話是公眾號與用戶交互的基礎(chǔ)。目前公眾號內(nèi)主要有這樣幾類消息服務(wù)的類型,分別用于不同的場景。

1)群發(fā)消息:公眾號可以以一定頻次(訂閱號為每天1次,服務(wù)號為每月4次),向用戶群發(fā)消息,包括文字消息、圖文消息、圖片、視頻、語音等。

2)被動回復(fù)消息:在用戶給公眾號發(fā)消息后,微信服務(wù)器會將消息發(fā)到開發(fā)者預(yù)先在開發(fā)者中心設(shè)置的服務(wù)器地址(開發(fā)者需要進行消息真實性驗證),公眾號可以在5秒內(nèi)做出回復(fù),可以回復(fù)一個消息,也可以回復(fù)命令告訴微信服務(wù)器這條消息暫不回復(fù)。被動回復(fù)消息可以設(shè)置加密(在公眾平臺官網(wǎng)的開發(fā)者中心處設(shè)置,設(shè)置后,按照消息加解密文檔來進行處理。其他3種消息的調(diào)用因為是 API 調(diào)用而不是對請求的返回,所以不需要加解密)。

3)客服消息:用戶在公眾號內(nèi)發(fā)消息/觸發(fā)特定行為后,公眾號可以給用戶發(fā)消息。具體發(fā)送規(guī)則見公眾號客服消息文檔:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html

4)模板消息:在需要對用戶發(fā)送服務(wù)通知(如刷卡提醒、服務(wù)預(yù)約成功通知等)時,公眾號可以用特定內(nèi)容模板,主動向用戶發(fā)送消息。

2、公眾號內(nèi)網(wǎng)頁

許多復(fù)雜的業(yè)務(wù)場景,需要通過網(wǎng)頁形式來提供服務(wù),這時需要用到:

1)網(wǎng)頁授權(quán)獲取用戶基本信息:通過該接口,可以獲取用戶的基本信息(獲取用戶的 OpenID 是無需用戶同意的,獲取用戶的基本信息則需用戶同意)

2)微信JS-SDK:是開發(fā)者在網(wǎng)頁上通過 JavaScript 代碼使用微信原生功能的工具包,開發(fā)者可以使用它在網(wǎng)頁上錄制和播放微信語音、監(jiān)聽微信分享、上傳手機本地圖片、拍照等許多能力。

1.1 類型介紹

圖1 類型介紹
微信開放文檔

不同的公眾號類型具備不同的接口權(quán)限,具體如下表: 請注意:

  1. 微博認證視作未認證,因此微博認證的公眾號不會擁有微信認證公眾號特有的接口。
  2. 微信認證分為資質(zhì)認證和名稱認證兩部分,只需要資質(zhì)認證通過,就可獲得接口。
接口名稱未認證訂閱號微信認證訂閱號未認證服務(wù)號微信認證服務(wù)號
基礎(chǔ)支持 - 獲取access_token
基礎(chǔ)支持 - 獲取微信服務(wù)器 IP 地址
接收消息 - 驗證消息真實性、接收普通消息、接收事件推送、接收語音識別結(jié)果
發(fā)送消息 - 被動回復(fù)消息
發(fā)送消息 - 客服接口
發(fā)送消息 - 群發(fā)接口
發(fā)送消息 - 模板消息接口(發(fā)送業(yè)務(wù)通知)
發(fā)送消息 - 一次性訂閱消息接口
用戶管理 - 用戶分組管理
用戶管理 - 設(shè)置用戶備注名
用戶管理 - 獲取用戶基本信息
用戶管理 - 獲取用戶列表
用戶管理 - 獲取用戶地理位置
用戶管理 - 網(wǎng)頁授權(quán)獲取用戶openid/用戶基本信息
推廣支持 - 生成帶參數(shù)二維碼
推廣支持 - 長鏈接轉(zhuǎn)短鏈接口
界面豐富 - 自定義菜單
素材管理 - 素材管理接口
智能接口 - 語義理解接口
多客服 - 獲取多客服消息記錄、客服管理
微信支付接口需申請
微信小店接口需申請
微信卡券接口需申請需申請
微信設(shè)備功能接口需申請
微信發(fā)票接口
微信 JS-SDK- 基礎(chǔ)接口
微信 JS-SDK- 分享接口
微信 JS-SDK- 圖像接口
微信 JS-SDK- 音頻接口
微信 JS-SDK- 智能接口(網(wǎng)頁語音識別)
微信 JS-SDK- 設(shè)備信息
微信 JS-SDK- 地理位置
微信 JS-SDK- 界面操作
微信 JS-SDK- 微信掃一掃
微信 JS-SDK- 微信小店
微信 JS-SDK- 微信卡券
微信 JS-SDK- 微信支付

1.2 公眾號申請

微信注冊申請:微信公眾平臺

圖2 微信公眾號注冊
圖3 官方平臺
官方文檔:微信公眾平臺開發(fā)概述 | 微信開放文檔

圖4 微信公眾號官方文檔

1.3 編輯模式和開發(fā)者模式

編輯模式:編輯模式指所有的公眾號運營者都可以通過簡單的編輯,設(shè)置“按關(guān)鍵字回復(fù)”等功能。您可以設(shè)定常用的文字/語言/圖片/錄音作為回復(fù)消息,并制定自動回復(fù)的規(guī)則。當訂閱用戶的行為符合自動回復(fù)規(guī)則的時候,就會收到自動回復(fù)的消息。

開發(fā)模式:開發(fā)模式是為開發(fā)者提供與用戶進行消息交互的能力。對于成功接入消息接口的公眾賬號,當用戶發(fā)消息給公眾號,微信公眾平臺服務(wù)器會使用http請求對接入的網(wǎng)址進行消息推送,第三方服務(wù)器可通過響應(yīng)包回復(fù)特定結(jié)構(gòu),從而達到回復(fù)消息的目的。

微信公眾平臺編輯模式和開發(fā)模式互相切換后對原保存在內(nèi)容不會做更改的,原來保存的內(nèi)容是不會丟失的。

1.4 消息回復(fù)例子(編輯模式)




圖5 公眾號消息回復(fù) 編輯模式

1.5 自定義菜單例子(編輯模式)




圖6 自定義菜單 編輯模式

1.6 開發(fā)者模式接入指南

接入概述 | 微信開放文檔

接入微信公眾平臺開發(fā),開發(fā)者需要按照如下步驟完成:

1、填寫服務(wù)器配置

2、驗證服務(wù)器地址的有效性

3、依據(jù)接口文檔實現(xiàn)業(yè)務(wù)邏輯

下面詳細介紹這3個步驟。(如你已有小程序,并且已開通小程序云開發(fā),也可以使用 公眾號環(huán)境共享 能力,在公眾號中使用云開發(fā)。)

步驟一、填寫服務(wù)器配置

登錄微信公眾平臺官網(wǎng)后,在公眾平臺官網(wǎng)的開發(fā) - 基本設(shè)置頁面,勾選協(xié)議成為開發(fā)者,點擊“修改配置”按鈕,填寫服務(wù)器地址(URL)、Token和EncodingAESKey,其中 URL 是開發(fā)者用來接收微信消息和事件的接口URL。Token可由開發(fā)者可以任意填寫,用作生成簽名(該 Token 會和接口 URL 中包含的 Token 進行比對,從而驗證安全性)。EncodingAESKey由開發(fā)者手動填寫或隨機生成,將用作消息體加解密密鑰。

圖7 公眾號服務(wù)器配置
步驟二、驗證服務(wù)器地址的有效性

開發(fā)者提交信息后,微信服務(wù)器將發(fā)送 GET 請求到填寫的服務(wù)器地址 URL 上,GET請求攜帶參數(shù)如下表所示:




參數(shù)描述
signature微信加密簽名,signature結(jié)合了開發(fā)者填寫的 token 參數(shù)和請求中的 timestamp 參數(shù)、nonce參數(shù)。
timestamp時間戳
nonce隨機數(shù)
echostr隨機字符串



開發(fā)者通過檢驗 signature 對請求進行校驗(下面有校驗方式)。若確認此次 GET 請求來自微信服務(wù)器,請原樣返回 echostr 參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。加密/校驗流程如下:

1)將token、timestamp、nonce三個參數(shù)進行字典序排序 2)將三個參數(shù)字符串拼接成一個字符串進行sha1加密 3)開發(fā)者獲得加密后的字符串可與 signature 對比,標識該請求來源于微信

檢驗 signature 的JAVA示例代碼:

String result = ""; /** 判斷是否是微信接入激活驗證,只有首次接入驗證時才會收到echostr參數(shù),此時需要把它直接返回 */ // 隨機字符串 String echostr = request.getParameter("echostr"); if (echostr != null && echostr.length() > 1) { String signature = request.getParameter("signature");// 微信加密簽名 String timestamp = request.getParameter("timestamp");// 時間戳 String nonce = request.getParameter("nonce");// 隨機數(shù) String checkSignature = WeChatUtil.checkSignature(timestamp,nonce); if (signature.equals(checkSignature)) { result = echostr; //請求驗證成功,返回隨機碼 } else { result = ""; } } else { //正常的微信處理流程 if (!xml.equals("")) result = new WechatProcess().processWechatMag(xml); }


public static String checkSignature(String timestamp,String nonce){ // 重寫toString方法,得到三個參數(shù)的拼接字符串 List<String> list = new ArrayList<String>(3) { private static final long serialVersionUID = 2621444383666420433L; public String toString() { return this.get(0) + this.get(1) + this.get(2); } }; list.add(Utils.TOKEN); list.add(timestamp); list.add(nonce); Collections.sort(list);// 排序 String newSignature = new MySecurity().encode(list.toString(), MySecurity.SHA_1);// SHA-1加密 return newSignature; }步驟三、依據(jù)接口文檔實現(xiàn)業(yè)務(wù)邏輯

根據(jù)官方文檔接口開發(fā)實現(xiàn)自己的業(yè)務(wù)邏輯,比如我們會使用對接圖靈機器人實現(xiàn)智能助手功能

1.7 微信平臺交互消息體接口

文本消息 | 微信開放文檔

當普通微信用戶向公眾賬號發(fā)消息時,微信服務(wù)器將 POST 消息的 XML 數(shù)據(jù)包到開發(fā)者填寫的 URL 上。

  1. 關(guān)于重試的消息排重,推薦使用 msgid 排重。
  2. 微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會斷掉連接,并且重新發(fā)起請求,總共重試三次。假如服務(wù)器無法保證在五秒內(nèi)處理并回復(fù),可以直接回復(fù)空串,微信服務(wù)器不會對此作任何處理,并且不會發(fā)起重試。詳情請見“發(fā)送消息 - 被動回復(fù)消息”。
  3. 如果開發(fā)者需要對用戶消息在5秒內(nèi)立即做出回應(yīng),即使用“發(fā)送消息 - 被動回復(fù)消息”接口向用戶被動回復(fù)消息時,可以在公眾平臺官網(wǎng)的開發(fā)者中心處設(shè)置消息加密。開啟加密后,用戶發(fā)來的消息和開發(fā)者回復(fù)的消息都會被加密(但開發(fā)者通過客服接口等 API 調(diào)用形式向用戶發(fā)送消息,則不受影響)。
各消息類型的推送 XML 數(shù)據(jù)包結(jié)構(gòu)如下:

普通文本消息

<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> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType消息類型,文本為text
Content文本消息內(nèi)容
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



使用網(wǎng)頁調(diào)試工具調(diào)試該接口

圖片消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType消息類型,圖片為image
PicUrl圖片鏈接(由系統(tǒng)生成)
MediaId圖片消息媒體id,可以調(diào)用獲取臨時素材接口拉取數(shù)據(jù)。
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



使用網(wǎng)頁調(diào)試工具調(diào)試該接口

語音消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <Format><![CDATA[Format]]></Format> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType語音為voice
MediaId語音消息媒體id,可以調(diào)用獲取臨時素材接口拉取數(shù)據(jù)。
Format語音格式,如amr,speex等
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



使用網(wǎng)頁調(diào)試工具調(diào)試該接口

請注意,開通語音識別后,用戶每次發(fā)送語音給公眾號時,微信會在推送的語音消息 XML 數(shù)據(jù)包中,增加一個 Recognition 字段(注:由于客戶端緩存,開發(fā)者開啟或者關(guān)閉語音識別功能,對新關(guān)注者立刻生效,對已關(guān)注用戶需要24小時生效。開發(fā)者可以重新關(guān)注此帳號進行測試)。開啟語音識別后的語音 XML 數(shù)據(jù)包如下:

<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType>< ![CDATA[voice] ]></MsgType> <MediaId>< ![CDATA[media_id] ]></MediaId> <Format>< ![CDATA[Format] ]></Format> <Recognition>< ![CDATA[騰訊微信團隊] ]></Recognition> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>參數(shù)說明:




參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType語音為voice
MediaId語音消息媒體id,可以調(diào)用獲取臨時素材接口拉取該媒體
Format語音格式:amr
Recognition語音識別結(jié)果,UTF8編碼
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



視頻消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[video]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>


參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType視頻為video
MediaId視頻消息媒體id,可以調(diào)用獲取臨時素材接口拉取數(shù)據(jù)。
ThumbMediaId視頻消息縮略圖的媒體id,可以調(diào)用多媒體文件下載接口拉取數(shù)據(jù)。
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



使用網(wǎng)頁調(diào)試工具調(diào)試該接口

小視頻消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[shortvideo]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>


參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType小視頻為shortvideo
MediaId視頻消息媒體id,可以調(diào)用獲取臨時素材接口拉取數(shù)據(jù)。
ThumbMediaId視頻消息縮略圖的媒體id,可以調(diào)用獲取臨時素材接口拉取數(shù)據(jù)。
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



使用網(wǎng)頁調(diào)試工具調(diào)試該接口

地理位置消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>


參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方帳號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType消息類型,地理位置為location
Location_X地理位置緯度
Location_Y地理位置經(jīng)度
Scale地圖縮放大小
Label地理位置信息
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)



使用網(wǎng)頁調(diào)試工具調(diào)試該接口

鏈接消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[link]]></MsgType> <Title><![CDATA[公眾平臺官網(wǎng)鏈接]]></Title> <Description><![CDATA[公眾平臺官網(wǎng)鏈接]]></Description> <Url><![CDATA[url]]></Url> <MsgId>1234567890123456</MsgId> <MsgDataId>xxxx</MsgDataId> <Idx>xxxx</Idx></xml>


參數(shù)描述
ToUserName接收方微信號
FromUserName發(fā)送方微信號,若為普通用戶,則是一個OpenID
CreateTime消息創(chuàng)建時間
MsgType消息類型,鏈接為link
Title消息標題
Description消息描述
Url消息鏈接
MsgId消息id,64位整型
MsgDataId消息的數(shù)據(jù)ID(消息如果來自文章時才有)
Idx多圖文時第幾篇文章,從1開始(消息如果來自文章時才有)
更多功能請查閱官方文檔:

文本消息 | 微信開放文檔

關(guān)注/取消關(guān)注事件 | 微信開放文檔

創(chuàng)建個性化菜單 | 微信開放文檔




2 內(nèi)網(wǎng)穿透技術(shù)

2.1 介紹

內(nèi)網(wǎng)穿透,又稱為NAT穿透,簡單來說就是將內(nèi)網(wǎng)外網(wǎng)通過穿透隧道打通,讓內(nèi)網(wǎng)的數(shù)據(jù)讓外網(wǎng)可以獲取。

NAT背后的設(shè)備,它們的主要特點是 ,可以訪問外網(wǎng),但不能被外網(wǎng)設(shè)備有效訪問?;谶@一特點,NAT穿透技術(shù)是讓NAT背后的設(shè)備,先訪問指定的外網(wǎng)服務(wù)器,由指定的外網(wǎng)服務(wù)器搭建橋梁,打通內(nèi)、外網(wǎng)設(shè)備的訪問通道,實現(xiàn)外網(wǎng)設(shè)備訪問到內(nèi)網(wǎng)設(shè)備。

該技術(shù)除了可以訪問隱藏在NAT后的設(shè)備,同樣可以穿透防火墻。這是因為防火墻一般只攔截了入站沒有攔截出站,所以也可以讓防火墻內(nèi)的設(shè)備對外提供服務(wù)。

由于內(nèi)網(wǎng)設(shè)備并不是與外網(wǎng)設(shè)備直接相連,所以在安全性上是毋庸置疑的,內(nèi)網(wǎng)穿透可以說是安全與效率兼得。

圖8 內(nèi)網(wǎng)穿透直觀理解
什么是內(nèi)網(wǎng)穿透? - NATAPP-內(nèi)網(wǎng)穿透 基于ngrok的國內(nèi)高速內(nèi)網(wǎng)映射工具

2.2 常用NAT穿透工具

ngrok方式:

參考教程: ngrok搭建指南


參考教程: NATAPP搭建指南


參考教程: Sunny-Ngrok使用教程


參考教程: 使用教程

SSH

SSH自動重新啟動SSH會話和隧道。SSH工具是一個非常強大的工具,除了能夠遠程連接,還能建立隧道,轉(zhuǎn)發(fā)端口。利用這個特性就可以把外網(wǎng)的端口請求,連接到內(nèi)網(wǎng)端口。SSH本身的連接并不穩(wěn)定,借助工具autossh可以很穩(wěn)定的建立隧道,因為失敗或者其他網(wǎng)絡(luò)情況下,autossh會自動維護和保持連接。

參考教程:SSH內(nèi)網(wǎng)穿透

花生殼

花生殼是一個動態(tài)域名解析軟件。當您安裝并注冊花生殼動態(tài)域名解析軟件,無論您在任何地點、任何時間、使用任何線路,均可利用這一服務(wù)建立擁有固定域名和最大自主權(quán)的互聯(lián)網(wǎng)主機?!盎ㄉ鷼討B(tài)域名解析軟件”支持的線路包括普通電話線、ISDNADSL、有線電視網(wǎng)絡(luò)、雙絞線到戶的寬帶網(wǎng)和其它任何能夠提供互聯(lián)網(wǎng)真實IP的接入服務(wù)線路,而無論連接獲得的IP屬于動態(tài)還是靜態(tài)。

2.3 NATAPP配置使用

圖9 natapp使用
推薦使用NATAPP,首先官方注冊獲authtoken,然后官方下載客戶端,并配置config.ini,接著執(zhí)行./natapp啟動,如需后臺啟動執(zhí)行nohup ./natapp & >natapp.log

圖9 natapp authtoken
[default]authtoken=xxxx #對應(yīng)一條隧道的authtokenclienttoken= #對應(yīng)客戶端的clienttoken,將會忽略authtoken,若無請留空,log=none #log 日志文件,可指定本地文件, none=不做記錄,stdout=直接屏幕輸出 ,默認為noneloglevel=ERROR #日志等級 DEBUG, INFO, WARNING, ERROR 默認為 DEBUGhttp_proxy= #代理設(shè)置 http://10.123.10.10:3128 非代理上網(wǎng)用戶請務(wù)必留空

3 開發(fā)調(diào)試環(huán)境搭建(Java)

3.1 JDK安裝

圖10 Unix JDK環(huán)境變量配置
參考教程 JDK Installation Guide

3.2 Maven安裝

圖11 Unix maven環(huán)境變量配置
參考教程 https://maven.apache.org/install.html

3.3 Tomcat安裝

官網(wǎng)下載安裝包,解壓,然后配置環(huán)境變量即可。

server.xml配置

圖12 server.xml配置
tomcat配置講解:

<!-- port: 接收shutdown指令的端口,默認僅允許通過本機訪問,默認為8005; shutdown:發(fā)往此Server用于實現(xiàn)關(guān)閉tomcat實例的命令字符串,默認為SHUTDOWN。 使用方式:telnet localhost 8005, 輸入SHUTDOWN即可關(guān)閉tomcat。 --> <Server port="8005" shutdown="SHUTDOWN"> <!-- 默認配置的Listener --> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- 應(yīng)用于整個服務(wù)器的JNDI映射,此可以避免每個Web應(yīng)用程序都需要在各自的web.xml創(chuàng)建, 這在web應(yīng)用程序以WAR的形式存在時尤為有用。 --> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <!-- Service是多個Connector和單個Container的組合。Container是一個抽象的概念,由Engine, Realm,Valve和Hosts主組組成。 在server.xml配置文件中可以同時配置多個Service標簽 --> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools --> <!-- 默認情況下,每個連接器connector會使用自己創(chuàng)建的線程池,我們也可以配置多個線程池讓連接器共享--> <!-- 如果想讓連接器connector組件使用這個線程池,需要在連接器組件中配置executor屬性. 另外,Executor元素的配置應(yīng)該放在Connector配置的前面,這樣才會先加載Executor的配置。 Executor的主要屬性包括: - name:該線程池的名稱id - maxThreads:線程池中最大活躍線程數(shù),默認值200 - minSpareThreads:線程池中保持的最小線程數(shù),最小值是25 - maxIdleTime:線程空閑的最大時間,當空閑超過該值時關(guān)閉線程(除非線程數(shù)小于 minSpareThreads),單位是ms,默認值60000(1分鐘) - daemon:是否后臺線程,默認值true - threadPriority:線程優(yōu)先級,默認值5 - namePrefix:線程名字的前綴,線程池中線程名字為:namePrefix+線程編號 --> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 --> <!-- Connector是Tomcat中請求接收和響應(yīng)返回的端點,Tomcat中支持HTTP、AJP和APR等協(xié)議。 下面的配置定義了一個支持Http協(xié)議的連接器,監(jiān)聽80端口 Connector組件支持以下組件的配置: - address:指定連接器監(jiān)聽的地址,默認為所有地址,即0.0.0.0; - port:監(jiān)聽的端口,默認為0; - protocol:連接器使用的協(xié)議,默認為HTTP/1.1,定義AJP協(xié)議時通常為AJP/1.3; - connectionTimeout:等待客戶端發(fā)送請求的超時時間,單位為毫秒,默認為60000,即1分鐘; - maxThreads:支持的最大并發(fā)連接數(shù),默認為200; - redirectPort:如果某連接器支持的協(xié)議是HTTP,當接收客戶端發(fā)來的HTTPS請求時, 則轉(zhuǎn)發(fā)至此屬性定義的端口; - enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名; 默認為true; - acceptCount:設(shè)置等待隊列的最大長度; - executor:指定共享的線程池組件; --> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" executor="tomcatThreadPool" /> <!-- 下面是進行支持Https的配置 --> <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 This connector uses the NIO implementation. The default SSLImplementation will depend on the presence of the APR/native library and the useOpenSSL attribute of the AprLifecycleListener. Either JSSE or OpenSSL style configuration may be used regardless of the SSLImplementation selected. JSSE style configuration is used below. --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> --> <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2 This connector uses the APR/native implementation which always uses OpenSSL for TLS. Either JSSE or OpenSSL style configuration may be used. OpenSSL style configuration is used below. --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" certificateChainFile="conf/localhost-rsa-chain.pem" type="RSA" /> </SSLHostConfig> </Connector> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> --> <!-- Tomcat內(nèi)部有4個級別的容器,分別是Engine、Host、Context和Wrapper。 Engine代表全局Servlet引擎,每個Service組件只能包含一個Engine容器組件, 但Engine組件可以包含若干Host容器組件 --> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <!-- This Realm uses the UserDatabase configured in the global JNDI resources under the key "UserDatabase". Any edits that are performed against this UserDatabase are immediately available for use by the Realm. --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <!-- 配置虛擬主機,可以配置多個--> <!-- 一個Host下面可以有多個Context,也就是可以部署多個Webapp應(yīng)用,一個webapp對應(yīng)一個Context, 用不同的ContextPath區(qū)分 --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <!-- Host下面也可以配置Context相關(guān)的配置 --> <Context path="/" docBase="../webapps/weixin_jueye.war" reloadable="true" crossContext="true" /> </Host> </Engine> </Service></Server> 部署時候,將war包放入$tomcat_home/webapps下

另外介紹Ubuntu20下生產(chǎn)環(huán)境安裝Tomcat例子

第1步:安裝Java

Tomcat要求在服務(wù)器上安裝Java,以便可以執(zhí)行任何Java Web應(yīng)用程序代碼??梢酝ㄟ^apt-get安裝OpenJDK。

#更新apt-get包索引:sudo apt-get update#安裝JDKsudo apt-get install default-jdk
圖13 檢查java是否成功安裝
第2步:創(chuàng)建Tomcat用戶

出于安全考慮,Tomcat應(yīng)該作為非特權(quán)用戶運行(即不是root用戶)。我們將創(chuàng)建一個將運行Tomcat服務(wù)的新用戶和組。

sudo groupadd tomcat#創(chuàng)建tomcat用戶,使該用戶成為tomcat組的成員,其主目錄為/opt/tomcat,#shell為 /bin/false(因此沒有人可以登錄該帳戶)sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat 第3步:安裝Tomcat

在Tomcat 8下載頁面上找到版本的Tomcat 8 。

圖14 tomcat下載
curl -O https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.81/bin/apache-tomcat-8.5.81.tar.gzsudo mkdir /opt/tomcat sudo tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1 第4步:更新權(quán)限

cd /opt/tomcat#在整個安裝目錄中授予tomcat組權(quán)限sudo chgrp -R tomcat /opt/tomcat#為tomcat組提供對conf目錄及其所有內(nèi)容的讀訪問權(quán)限,并執(zhí)行對目錄本身的訪問sudo chmod -R g+r conf sudo chmod g+x conf#將tomcat用戶設(shè)置為webapps,work,temp,和logs目錄的所有者:sudo chown -R tomcat webapps/ work/ temp/ logs/ 第5步:創(chuàng)建systemd服務(wù)文件

將Tomcat作為服務(wù)運行,可以設(shè)置systemd服務(wù)文件。

Tomcat需要知道Java的安裝位置。此路徑通常稱為“JAVA_HOME”。查找該位置的最簡單方法是運行此命令:

sudo update-java-alternatives -l java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64

可以通過獲取最后一列的輸出并附加/jre到結(jié)尾來構(gòu)造正確的變量JAVA_HOME。

JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre 創(chuàng)建systemd服務(wù)文tomcat.service的文件:

sudo nano /etc/systemd/system/tomcat.service


[Unit]Description=Apache Tomcat Web Application ContainerAfter=network.target[Service]Type=forkingEnvironment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jreEnvironment=CATALINA_PID=/opt/tomcat/temp/tomcat.pidEnvironment=CATALINA_HOME=/opt/tomcatEnvironment=CATALINA_BASE=/opt/tomcatEnvironment='CATALINA_OPTS=-Xms512M -Xmx2G -server -XX:+UseParallelGC'Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'ExecStart=/opt/tomcat/bin/startup.shExecStop=/opt/tomcat/bin/shutdown.shUser=tomcatGroup=tomcatUMask=0007RestartSec=10Restart=always[Install]WantedBy=multi-user.target


#重新加載systemd守護程序,以便它知道我們的服務(wù)文件:sudo systemctl daemon-reload#啟動Tomcat服務(wù):sudo systemctl start tomcat#檢查狀態(tài)sudo systemctl status tomcat 步驟6:調(diào)整防火墻并測試Tomcat服務(wù)器

Tomcat使用端口8080接受傳統(tǒng)請求。輸入以下內(nèi)容允許到該端口的流量:

sudo ufw allow 8080http://xxx:8080


使Tomcat跟隨系統(tǒng)啟動:

sudo systemctl enable tomcat Tomcat就已經(jīng)安裝好了,接下來部署應(yīng)用程序即可。

參考教程

Apache Tomcat 8 (8.5.81) - Tomcat Setup

如何在Ubuntu 16.04上安裝Apache Tomcat 8

3.4 Nginx反向代理安裝

3.4.1 docker方式

docker pull nginxocker run -p 80:80 --name nginx -v /Users/soledede/Documents/tool/nginx/html:/usr/share/nginx/html -v /Users/soledede/Documents/tool/nginx/nginx/nginx.conf:/etc/nginx/nginx.conf -v /Users/soledede/Documents/tool/nginx/logs/:/usr/share/nginx/logs -d nginx:latest 參考教程:Docker Hub

3.4.2 操作系統(tǒng)方式

這里我們以Ubuntu20為例。

sudo apt update#安裝nginxsudo apt install nginx#調(diào)整防火墻sudo ufw app listsudo ufw allow 'Nginx Full'sudo ufw statussudo systemctl status nginx參考教程:如何在 Ubuntu 20.04 上安裝 Nginx

反向代理配置例子:

user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events { worker_connections 768; # multi_accept on;}http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ##server { listen 80; server_name xhaijy.com; #定義服務(wù)器的默認網(wǎng)站根目錄位置 #jsp網(wǎng)站程序根目錄,一般nginx與tomcat在同一個目錄 root /opt/tomcat/webapps/ROOT; location / { #jsp網(wǎng)站程序根目錄,一般nginx與tomcat在同一個目錄 root /opt/tomcat/webapps/ROOT; index index.html index.jsp index.htm index.php; } location ~ .*.(jsp|do)$ { root /opt/tomcat/webapps/ROOT; index index.jsp; proxy_pass http://127.0.0.1:8080; #來自jsp請求交給tomcat處理 proxy_redirect off; proxy_set_header Host $host; #后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 100m; #允許客戶端請求的最大單文件字節(jié)數(shù) client_body_buffer_size 1024k; #緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù) proxy_connect_timeout 300s; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 32k; proxy_buffers 64 4k; proxy_buffering off; proxy_busy_buffers_size 128k; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; proxy_set_header X-Forwarded-Proto $scheme; } location ~ .*/.(gif|jpg|png|bmp|swf)$ #由nginx處理靜態(tài)頁面 { expires 30d; #使用expires緩存模塊,緩存到客戶端30天 } location ~ .*/.(jsp|js|css)?$ { expires 1d; }} include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;}

3.5 Mysql 安裝

sudo apt install mysql-server MySQL服務(wù)管理

sudo service mysql status # 查看服務(wù)狀態(tài)sudo service mysql start # 啟動服務(wù)sudo service mysql stop # 停止服務(wù)sudo service mysql restart # 重啟服務(wù)MySQL密碼重置

sudo mysqlALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';FLUSH PRIVILEGES; 開啟遠程登錄

#新建一個 host 為 % 的 root用戶create user 'root'@'%' identified by 'yourpassword';#授權(quán)GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;#刷新權(quán)限FLUSH PRIVILEGES;#查看用戶信息情況use mysqlselect host,user,authentication_string from user; 還需要修改配置文件,允許遠程登錄。

sudo systemctl stop mysqlsudo vim /etc/mysql/mysql.conf.d/mysqld.cnf#注釋掉bind-address這一行#bind-address = 127.0.0.1 可能遇到的問題:1251- Client does not support authentication protocol requested by server...

解決方法:

方法1.升級navicat驅(qū)動。

方法2.把mysql用戶登錄密碼加密規(guī)則還原成mysql_native_password。

方法2具體操作步驟如下:

#更新user為root,host為% 的密碼為yourpasswdALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpasswd';#更新user為root,host為localhost 的密碼為yourpasswdALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpasswd';或者#修改加密規(guī)則 ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpasswd' PASSWORD EXPIRE NEVER; #更新一下用戶的密碼 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpasswd'; #刷新權(quán)限FLUSH PRIVILEGES;

3.6 Idea本地開發(fā)調(diào)試環(huán)境配置

4 生產(chǎn)環(huán)境準備

4.1 服務(wù)器準備

自己購買服務(wù)器,或者購買阿里云、騰訊云、華為云、AWS、微軟云等;

4.2 域名以及網(wǎng)站備案

域名申請可以去阿里云或其他服務(wù)商進行申請即可。

國內(nèi)網(wǎng)站備案是指的根據(jù)國家的法律法規(guī)需要進行實名備案和內(nèi)容審核,國內(nèi)的網(wǎng)站備案主要分 ICP 備案和公安備案,網(wǎng)站備案與否是根據(jù)提供的服務(wù)器 IP 來分別的,只有國內(nèi)服務(wù)器的 IP 才需要進行備案,而國外服務(wù)器不屬于國內(nèi)也不用備案,國內(nèi)的港澳臺地區(qū)免備案屬于國內(nèi)僅有的特殊情況。

  國內(nèi)網(wǎng)站備案流程:提供域名實名認證信息,初審,短信驗證,終審,阿里云備案還要官方通過電話確定網(wǎng)站信息,比如:是否是本人,網(wǎng)站是做什么之類的。一般備案時間在 7-20 天左右,每個地區(qū)時間不一。

4.3 生產(chǎn)環(huán)境搭建

環(huán)境根據(jù)自己的開發(fā)語言和業(yè)務(wù)進行設(shè)置,如果是Java可以參考第3節(jié)。

5 對話系統(tǒng)介紹

小虎AI玨爺:論文解析 DIET:Dual Intent and Entity Transformer(2020)

小虎AI玨爺:多輪對話 Transformer Embedding Dialogue (TED) Policy 論文解析(2020)

Google對話系統(tǒng)平臺體驗:https://dialogflow.cloud.google.com/

6 代碼

課件以及github代碼倉庫,請在 小虎AI玨爺 公眾號聊天框輸入 微信公眾號 獲取。

現(xiàn)有華為云、阿里云服務(wù)器配置 內(nèi)存>=16G、CPU>=8核、帶寬>=3MBbps可以共享使用,以降低成本,成本在:0.8元/天(292元/年),也可以開放子域名您使用,感興趣的可以聯(lián)系我。

?

云廠商服務(wù)器618活動期間單獨租用成本如下:

華為云:







百度:




阿里云






關(guān)鍵詞:部署,實戰(zhàn),公眾

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉