微信公众号 语音转文字api_快速上手——微信公众号开发接入
資源
公眾號(hào)開(kāi)發(fā)文檔
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html小程序開(kāi)發(fā)文檔
https://developers.weixin.qq.com/miniprogram/dev/framework/消息加解密說(shuō)明
https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Message_Encryption/Message_encryption_and_decryption.html
公眾號(hào)開(kāi)發(fā)接入
????公眾號(hào)開(kāi)發(fā)最根本的業(yè)務(wù)邏輯就是接收消息、處理消息,與公眾號(hào)平臺(tái)建立聯(lián)系的憑據(jù)就是公眾號(hào)后臺(tái)設(shè)置的服務(wù)器URL,一個(gè)公眾號(hào)項(xiàng)目需要實(shí)現(xiàn)的功能入口全在這個(gè)URL上,可以按自己需求或喜好為公眾號(hào)寫一個(gè)獨(dú)立的WEB后端應(yīng)用,也可以將公眾號(hào)后端服務(wù)作為一個(gè)功能模塊,放到某一個(gè)網(wǎng)站中。
????*?除了消息處理接口,還需要準(zhǔn)備一個(gè)接入驗(yàn)證的接口,公眾號(hào)配置完成后,會(huì)發(fā)送驗(yàn)證消息對(duì)服務(wù)器URL進(jìn)行有效性驗(yàn)證,該過(guò)程只在接入時(shí)使用,一旦接入就再也用不到了。
????在公眾號(hào)后臺(tái)配置好IP白名單、服務(wù)器地址、令牌、消息加解密密鑰,再加上系統(tǒng)分配的開(kāi)發(fā)者ID和開(kāi)發(fā)者密碼,就可以進(jìn)行公眾號(hào)開(kāi)發(fā)了。
????其中服務(wù)器地址要求HTTP/HTTPS標(biāo)準(zhǔn)端口,這就有兩個(gè)選擇:備案過(guò)的國(guó)內(nèi)服務(wù)器,或無(wú)需備案的國(guó)外服務(wù)器(從網(wǎng)絡(luò)穩(wěn)定性上講,有條件的話,盡量使用備案過(guò)的國(guó)內(nèi)服務(wù)器)。這一項(xiàng)要求比WEB/小程序開(kāi)發(fā)要寬松,后者不僅要求使用80/443,而且要求域名必須備案,也就是國(guó)外服務(wù)器無(wú)法使用。
0.?超時(shí)
公眾號(hào)發(fā)往web后端的請(qǐng)求超時(shí)時(shí)間是5秒,一旦連續(xù)超時(shí)3次,本次請(qǐng)求即視為失敗。為了提高穩(wěn)定性,需要選擇響應(yīng)更快的服務(wù)器(一般而言,國(guó)內(nèi)服務(wù)器響應(yīng)速度遠(yuǎn)快于國(guó)外服務(wù)器),同時(shí)需要減少業(yè)務(wù)的等待時(shí)間(如果業(yè)務(wù)時(shí)間過(guò)長(zhǎng),可先返回響應(yīng),將業(yè)務(wù)放到后臺(tái)慢慢處理)。1.?接入驗(yàn)證
基本配置頁(yè)面中,填寫完服務(wù)器地址、令牌、消息加解密密鑰,并點(diǎn)擊保存時(shí),公眾平臺(tái)會(huì)主動(dòng)向服務(wù)器地址發(fā)送一個(gè)GET請(qǐng)求進(jìn)行接入驗(yàn)證,這個(gè)驗(yàn)證包含參數(shù):簽名signature、時(shí)間戳timestamp、隨機(jī)數(shù)nonce、隨機(jī)字符串echostr。這就是后端需要實(shí)現(xiàn)的第一個(gè)接口——接入驗(yàn)證:接受微信服務(wù)器GET請(qǐng)求,對(duì)請(qǐng)求中的參數(shù)進(jìn)行校驗(yàn),比對(duì)signature與校驗(yàn)結(jié)果是否一致,如果一致,證明請(qǐng)求來(lái)源于公眾平臺(tái),此時(shí)將echostr原值返回,一旦微信服務(wù)器收到返回值,即視為通過(guò)驗(yàn)證,至此,接入就完成了。校驗(yàn)算法是:timestamp、nonce、token進(jìn)行字典序排序并拼接,對(duì)拼接結(jié)果取sha1。public IActionResult Index() string token = WXToken; string timestamp = Request.Query["timestamp"]; string nonce = Request.Query["nonce"]; string signature = Request.Query["signature"]; string[] plain = { token, timestamp, nonce }; string echostr = Request.Query["echostr"]; Array.Sort(plain); using SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); string sig2 = BitConverter.ToString(sha.ComputeHash(Encoding.UTF8.GetBytes(string.Join("", plain)))).Replace("-", "").ToLower(); if (sig2 == signature) { return Content(echostr); } else { return Content("SIGNATURE_NOT_MATCH"); }}2.?交互業(yè)務(wù)交互,是指用戶在公眾號(hào)界面的所有操作,包含關(guān)注/取消關(guān)注公眾號(hào),發(fā)送文字、圖片、語(yǔ)音留言消息,點(diǎn)擊菜單項(xiàng)等動(dòng)作。一旦這些動(dòng)作發(fā)生,公眾平臺(tái)會(huì)將對(duì)應(yīng)的事件以特定的數(shù)據(jù)格式發(fā)送到web后端,web后端處理后,對(duì)此返回的響應(yīng)會(huì)經(jīng)由公眾號(hào)發(fā)送給客戶。
交互業(yè)務(wù)和接入驗(yàn)證均使用公眾號(hào)后臺(tái)配置的服務(wù)器URL,二者的區(qū)別是:交互產(chǎn)生的事件通知會(huì)使用POST發(fā)送具有固定的XML格式數(shù)據(jù),接入驗(yàn)證則是使用GET請(qǐng)求直接在URL傳送參數(shù)。
后端和微信服務(wù)器通信的消息加解密操作可選擇明文模式、兼容模式、安全模式,推薦使用安全模式,此時(shí)消息內(nèi)容會(huì)用公眾號(hào)后臺(tái)設(shè)置的加解密密鑰進(jìn)行AES加密,安全性更高。
關(guān)注公眾號(hào)時(shí)產(chǎn)生的事件(消息結(jié)構(gòu)示例1)
123456789用戶文本消息留言產(chǎn)生的事件(消息結(jié)構(gòu)示例2)
1348831860 1234567890123456上報(bào)地理位置產(chǎn)生的事件(消息結(jié)構(gòu)示例3)
123456789 23.137466 113.352425 119.385040通過(guò)上面的幾類事件不難看出,XML結(jié)構(gòu)固定不變的部分包含:接收人(公眾號(hào))、發(fā)送人(用戶)、時(shí)間、消息類型、事件類型。剩下的就是事件內(nèi)容,由于消息/事件類型不同,事件內(nèi)容也各不相同,處理的時(shí)候區(qū)別一下即可。處理完畢,回復(fù)的消息仍舊是以XML格式發(fā)送。
比如,新用戶關(guān)注的時(shí)候,會(huì)收到一條MsgType=Event,Event=subscribe的消息(格式可參考消息結(jié)構(gòu)示例1),這時(shí)HTTPResponse里返回一條Content為“歡迎關(guān)注”的文本消息XML,新關(guān)注的用戶即可收到“歡迎關(guān)注”的問(wèn)候語(yǔ)(消息結(jié)構(gòu)示例4):
12345678業(yè)務(wù)應(yīng)用
類似上面這種對(duì)任意事件通知、留言進(jìn)行處理的過(guò)程,即是公眾后臺(tái)開(kāi)發(fā)所需實(shí)現(xiàn)的業(yè)務(wù)過(guò)程。簡(jiǎn)單一點(diǎn),可以將公眾號(hào)打造成一個(gè)BOT;復(fù)雜一點(diǎn),則可以將公眾號(hào)打造成功能完備的可提供各類服務(wù)的全能型應(yīng)用中心。整個(gè)業(yè)務(wù)流程全部圍繞著收消息、執(zhí)行動(dòng)作、響應(yīng)三個(gè)環(huán)節(jié)。尤其是執(zhí)行動(dòng)作環(huán)節(jié),幾乎可以處理任何需求,無(wú)論是操作服務(wù)器本地資源(硬件、軟件、文件、數(shù)據(jù)庫(kù)),還是通過(guò)接口(HTTP、SOCKET、COM)收發(fā)消息或進(jìn)行設(shè)備控制,都可以和公眾號(hào)聯(lián)系起來(lái)。
消息/事件類型
正如前面所介紹,公眾號(hào)發(fā)往后端服務(wù)的消息分為兩類:普通消息,包含文本、圖片、語(yǔ)音、視頻、短視頻、地理位置、鏈接消息,MsgType對(duì)應(yīng)為text、image、voice、video、shortvideo、location、link;事件推送,包含關(guān)注/取消關(guān)注、掃描帶參數(shù)的二維碼、上報(bào)地理位置、自定義菜單相關(guān)操作的消息,MsgType統(tǒng)一為event,不同事件通過(guò)Event值進(jìn)行區(qū)分。
在對(duì)用戶進(jìn)行回復(fù)時(shí),消息類型也是多種多樣,支持的MsgType有文本(text)、圖片(image)、語(yǔ)音(voice)、視頻(video)、音樂(lè)(music)、圖文(news),可在回復(fù)時(shí)按需選擇。
語(yǔ)音轉(zhuǎn)文字
如果在接口權(quán)限中,開(kāi)啟了接收語(yǔ)音識(shí)別結(jié)果,voice類型的消息將會(huì)額外多出一個(gè)Recognaition字段,其值為語(yǔ)音識(shí)別結(jié)果。
Access token
除去以上涉及到用戶交互的業(yè)務(wù),公眾號(hào)開(kāi)發(fā)還支持管理類的業(yè)務(wù)操作(比如自定義菜單、素材管理、用戶管理、獲取統(tǒng)計(jì)數(shù)據(jù)等操作)。實(shí)現(xiàn)該類操作的時(shí)候,向指定API地址發(fā)送POST/GET請(qǐng)求即可。全局范圍的access_token是API請(qǐng)求中最重要的一個(gè)參數(shù),獲取方式是以GET方式請(qǐng)求?https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,有效期7200秒。
公眾平臺(tái)只接受來(lái)自白名單IP的access_token請(qǐng)求。
使用場(chǎng)景舉例,新增圖片類型的臨時(shí)素材
接口地址:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
TYPE按素材類型取不同的值:圖片(image)、語(yǔ)音(voice)、視頻(video)、縮略圖(thumb)。
新增素材需要以表單形式進(jìn)行POST提交到該接口,表單字段media即為需要上傳的素材文件,調(diào)用成功,服務(wù)器即會(huì)返回包含type、media_id、created_at的JSON格式消息。
加解密
在公眾號(hào)后臺(tái)設(shè)置消息加解密方式為安全模式時(shí),公眾平臺(tái)會(huì)向后端服務(wù)發(fā)送加密過(guò)的內(nèi)容,同時(shí)也要求后端返回消息時(shí)也進(jìn)行加密。加解密過(guò)程可以直接照搬官方提供的DEMO(c++, php, java, python, c#),下載地址:https://res.wx.qq.com/op_res/-serEQ6xSDVIjfoOHcX78T1JAYX-pM_fghzfiNYoD8uHVd3fOeC0PC_pvlg4-kmP
收到的消息格式如下,Encrypt為原始消息加密結(jié)果,服務(wù)器收到消息后,對(duì)Encrypt字段的內(nèi)容進(jìn)行解密即可還原出原始內(nèi)容(解密用到的參數(shù)從QueryString中獲取,QueryString形如
?signature=……×tamp=……&nonce=……&openid=……&encrypt_type=aes&msg_signature=……):返回消息時(shí),也要進(jìn)行加密:
???? xml>總結(jié)
以上是生活随笔為你收集整理的微信公众号 语音转文字api_快速上手——微信公众号开发接入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2016福州大学软件工程第四次团队作业-
- 下一篇: java 空文件夹删除_java创建文件