微信快速开发框架(八)-- 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,不定期会发些特价旅游线路。作为码农,必要的放松还是需要的,大家不要太累,身体是革命的本钱。
微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github的更多相关文章
- 微信快速开发框架(七)--发送客服信息,版本更新至V2.2 代码已更新至github
在V2版本发布的博文中,已经介绍了大多数Api的用法,同时也收到了很多意见,其中发布了几个修正版本,修改了几个bug,在此感谢大家的使用,有了大家的支持,相信快速开发框架会越来越好,也会越来越完善的. ...
- 微信快速开发框架(九)-- V3.0发布,代码已更新至Github 新增微店功能
版本内容 1.修正了缺少对Event.View的支持 2.增加了用户UnionID 3.新增微信小店功能 4.多客服功能 5.单元测试 什么是UnionID 我们知道,每个用户针对一个微信公众账号都有 ...
- PHP微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo(二)
一.这个文件微信授权使用的是OAuth2.0授权的方式.主要有以下简略步骤: 第一步:判断有没有code,有code去第三步,没有code去第二步 第二步:用户同意授权,获取code 第三步:通过co ...
- php 微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo
get_wx_data.php <?php /** * 获取微信用户信息 * @author: Lucky hypo */ class GetWxData{ private $appid = ' ...
- 关于微信小程序拒绝授权后,重新授权并获取用户信息
最近公司做了一些有关微信小程序的项目,涉及到授权获取用户基本信息,但是在拒绝授权之后就不会再出现授权窗口: 看网上也有很多人遇到了同样的问题,所以记录下来我的处理方法,供大家和自己学习和记录: 当调用 ...
- 微信订阅号里实现oauth授权登录,并获取用户信息 (完整篇)
摘要 这段时间一直有人问我,订阅号实现的oauth授权登录的问题,之前写的比较简单,很多人不明白.众所周知,微信公众号分订阅号.服务号.企业号:每个号的用途不一样,接口开放程度也不一样.微信还有个扯淡 ...
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
- SoringCloud(四) - 微信获取用户信息
1.项目介绍 2.微信公众平台 和 微信开放文档 2.1 微信公众平台 2.1.1 网址链接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?ac ...
- 微信小游戏 小程序与小游戏获取用户信息接口调整 wx.createUserInfoButton
参考: 小程序•小故事(6)——微信登录能力优化 小程序•小故事(4)——获取用户信息 本篇主要是讲微信getUserInfo接口不再出现授权弹框 那么原来getUserInfo是怎么样?修改之后又是 ...
随机推荐
- 原生JS:Function对象(apply、call、bind)详解
Function对象(apply.call.bind) 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5850180.html 本文参考MDN做的 ...
- iOS如何用代码控制以不同屏幕方向打开新页面?
转载:http://blogread.cn/it/article/7765?f=wb#original 代码示例:https://github.com/johnlui/Swift-On-iOS/tre ...
- Eclipse开发环境设置(Maven+Spring MVC+Flex)
1. 环境设置 1.1. Java环境设置 1)JAVA_HOME D:\GreenSoftware\Java\Java8X64\jdk1.8.0_91 2)PATH ;%JAVA_HOME%/bin ...
- include的用法例子,以及include+merge的用法例子
[include+LinearLayout]的使用例子 AndroidIncludeLayout.java package com.AndroidIncludeLayout; import andro ...
- iOS之UI--富文本总结
文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 ...
- xCode5 在ios7模拟器中出现__cxa_throw _pthread_exit错误
xCode5 在ios7模拟器中出现__cxa_throw _pthread_exit错误 2013年10月28日 ⁄ 综合 ⁄ 共 233字 ⁄ 字号 小 中 大 ⁄ 评论关闭 在项目中用模拟器 ...
- sql 判断 函数 存储过程是否存在的方法
下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函数及数据库能够有所帮助.库是否存在if exists(select * from master..sys ...
- 关于Redis数据过期策略
1.Redis中key的的过期时间 通过EXPIRE key seconds命令来设置数据的过期时间.返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间.在key上设置了过期时间后ke ...
- [原创]纯CSS3打造的3D翻页翻转特效
刚接触CSS3动画,心血来潮实现了一个心目中自己设计的翻页效果的3D动画,页面纯CSS3,目前只能在Chrome中玩,理论上可以支持Safari. 1. 新建HTML,代码如下(数据和翻页后的数据都是 ...
- 3D坦克大战游戏iOS源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...