微信快速開發框架V2.3--增加語音識別及網頁獲取用戶信息(八),代碼已更新至Github
不知不覺,版本以每周更新一次的腳步進行著,接下來應該是重構我的代碼及框架的結構,有朋友反應代碼有點亂,確實如此,當時寫的時候只是按照訂閱號來寫的,后來才慢慢增加到支持API接口。目前還在開發第三方微信平臺,旨在使用戶能夠無需自己開發就能簡易搭建微信平臺。
更新內容
1、增加支持 語音識別
2、增加“ 網頁授權獲取用戶基本信息 ”
語音識別其實是對Voice信息的一個擴展,您必須啟用語音識別功能,啟用后會在VoiceMessage中增加一個Recongnition字段,我們可以判斷這個字段的內容進行響應。因為其實對Voice的一個擴展,此次更新在VoiceMessageRequest中加入了Recongnition字段。
在“網頁授權獲取用戶基本信息”中,我使用的是測試賬號,但發現了bug,我不知道只存在于測試賬號還是正式賬號也存在bug,目前我只有未認證的服務號可以測試,等下個月認證后我會測試下的。bug將在后面介紹。
此次內容的測試,我使用的是申請的測試號,大家可以自行申請,也可以加入我的測試號:
?(
因測試號僅支持20個粉絲,請親測試后,自覺取消關注,方便其他用戶測試
)
測試一:語音識別
在先前的 框架介紹 中,我使用了框架然后獲取博客園首頁文章,在此基礎上,我改變了下,我只要發送的語音中含有博客園就讓其響應相同結果。
首先,創建一個VoiceMessageRole實現IMessageRole:
public class VoiceMessageRole : IMessageRole { public IMessageHandler MessageRole( MiddleMessage message) { var request = message.RequestMessage as RequestVoiceMessage ; if (request != null ) { //sMyLog.Log("語音識別:" + request.Recognition); if (! String .IsNullOrEmpty(request.Recognition)) { if (request.Recognition.IndexOf( "博客園文章" ) > -1) { return new CnblogsArticleNewsMessageHandler (); } if (request.Recognition.IndexOf( "博客園" ) > -1) { return new CnblogsTextMessageHandler (); } return new DefaultMessageHandler (); } else { return new VoiceMessageHandler (); } } else { return new DefaultMessageHandler (); } } }
?
?
規則的話可以自己定義,我這里就不重復造輪子了。在【MsgTypeMessageRole】規則中,增加對Voice的規則判斷,使其進入到VoiceMessageRole規則。
接下來看下結果:
測試二:網頁授權獲取用戶信息
通過文檔,我們知道在使用網頁授權這里,會使用OAuth2來完成授權的,文檔中介紹如果使用Scope為Snsapi_userinfo可以不關注也能通過網頁授權獲取用戶信息,經測試無效,必須為關注用戶才能獲取。網頁授權用戶信息步驟如下:
第一步:設置回調域名,測試賬號在
進行修改,網頁授權的域名僅對設置的域名有效,其下級域名都無效
第二步:用戶同意授權,獲取Code
這里我們就是生成一個鏈接,用戶使用手機微信進入后,就能獲取Code,鏈接是自己創建的,為了方便,我在框架中加了一個OAuthHelper類,您可以快速創建相應鏈接,使用方式如下:
new OAuthHelper( string appId).BuildOAuthUrl( string redirectUrl, OAuthScope scope, string state);
?
?
?
這個只是輔助類,您也可以自己寫一個
根據OAuthScope的不同,顯示也不同,Base方式下會直接跳轉到redirectUrl,userinfo方式下會顯示授權頁面,點擊同意后會跳轉到redirecturl。
第三步:獲取AccessToken和OpenId
Code可以通過Request[“Code”]獲取,獲取后,通過以下方式獲取AccessToken和OpenId:
var request = new SnsOAuthAccessTokenRequest { AppID = m_appIdent.AppID, AppSecret = m_appIdent.AppSecret, Code = Label1.Text }; var response = m_client.Execute(request);
response為SnsOAuthAccessTokenResponse類型,包含以下屬性:
第四步:通過AccessToken獲取用戶信息:
SnsUserInfoRequest request = new SnsUserInfoRequest { OAuthToken = accesstoken,
Lang = Language .CN, OpenId = OpenId }; SnsUserInfoResponse response = m_client.Execute(request);
這里要注意的是OAuthToken為第三步獲取的Token,并非之前我們用的AccessToken。
SnsUserInfoResponse包含了如下用戶信息:
至此,獲取用戶信息結束。
網頁授權獲取用戶信息BUG
這個Bug我不知道是不是只在測試賬號中出現,因為我沒有正式賬號,所以無法下判斷。Bug如下:
1、Scope為Snsapi_Base時,也能獲取用戶基本信息(第四步),但在文檔中說明是Base情況下是無法獲取用戶信息,只能獲取到OpenId。
2、Scope為Snsapi_UserInfo時,必須為關注用戶,但在文檔中介紹,沒有關注的用戶在彈出授權窗口授權后也能進行瀏覽及獲取用戶信息。
以上Bug已提交至微信,但還未回復,或許會更近。
實戰測試
請先加我的測試賬號,然后使用微信掃一掃功能,掃描二維碼:
????? (Snsapi_Base)???????????????????????????? (Snsapi_Userinfo)
掃描后會轉到相應鏈接,您可以點擊“獲取AccessToken”,“刷新AccessToken”和“獲取用戶信息”進行測試。結果截圖如下:
?
?
?
寫在最后
自從發布了微信快速開發框架以來,收到了很多朋友的關注,也在得到反饋后逐步的改善。在和朋友的探討中,發覺在微信公眾平臺的開發中,難得不是開發,而且微信平臺對接口的一些限制,我們只有到了認證的服務號后才能使用完全的高級接口,對于很多朋友來說,基本上都是認證過的訂閱號,所以很多測試都無法進行,希望后續微信平臺會放寬限制。
明天去坐郵輪去臺灣了,大家以后想旅游,做簽證之類都可以找我,可以加我私信:jamesying1,不定期會發些特價旅游線路。作為碼農,必要的放松還是需要的,大家不要太累,身體是革命的本錢。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
