微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github

本文涉及的产品
.cn 域名,1个 12个月
简介: 不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口。目前还在开发第三方微信平台,旨在使用户能够无需自己开发就能简易搭建微信平台。

不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口。目前还在开发第三方微信平台,旨在使用户能够无需自己开发就能简易搭建微信平台。

更新内容

1、增加支持语音识别

2、增加“网页授权获取用户基本信息

语音识别其实是对Voice信息的一个扩展,您必须启用语音识别功能,启用后会在VoiceMessage中增加一个Recongnition字段,我们可以判断这个字段的内容进行响应。因为其实对Voice的一个扩展,此次更新在VoiceMessageRequest中加入了Recongnition字段。

在“网页授权获取用户基本信息”中,我使用的是测试账号,但发现了bug,我不知道只存在于测试账号还是正式账号也存在bug,目前我只有未认证的服务号可以测试,等下个月认证后我会测试下的。bug将在后面介绍。

此次内容的测试,我使用的是申请的测试号,大家可以自行申请,也可以加入我的测试号:

image因测试号仅支持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规则。

接下来看下结果:

image 语音一:博客园

image 语音二:博客园文章

测试二:网页授权获取用户信息

通过文档,我们知道在使用网页授权这里,会使用OAuth2来完成授权的,文档中介绍如果使用Scope为Snsapi_userinfo可以不关注也能通过网页授权获取用户信息,经测试无效,必须为关注用户才能获取。网页授权用户信息步骤如下:

第一步:设置回调域名,测试账号在

image

进行修改,网页授权的域名仅对设置的域名有效,其下级域名都无效

image

第二步:用户同意授权,获取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类型,包含以下属性:

image

第四步:通过AccessToken获取用户信息:

SnsUserInfoRequest request = new SnsUserInfoRequest
            {
                OAuthToken = accesstoken,
Lang =
Language.CN, OpenId = OpenId }; SnsUserInfoResponse response = m_client.Execute(request);

这里要注意的是OAuthToken为第三步获取的Token,并非之前我们用的AccessToken。

SnsUserInfoResponse包含了如下用户信息:

image

至此,获取用户信息结束。

网页授权获取用户信息BUG

这个Bug我不知道是不是只在测试账号中出现,因为我没有正式账号,所以无法下判断。Bug如下:

1、Scope为Snsapi_Base时,也能获取用户基本信息(第四步),但在文档中说明是Base情况下是无法获取用户信息,只能获取到OpenId。

2、Scope为Snsapi_UserInfo时,必须为关注用户,但在文档中介绍,没有关注的用户在弹出授权窗口授权后也能进行浏览及获取用户信息。

以上Bug已提交至微信,但还未回复,或许会更近。

实战测试

请先加我的测试账号,然后使用微信扫一扫功能,扫描二维码:

image                image

      (Snsapi_Base)                             (Snsapi_Userinfo)

扫描后会转到相应链接,您可以点击“获取AccessToken”,“刷新AccessToken”和“获取用户信息”进行测试。结果截图如下:

image

 

 

 

写在最后

自从发布了微信快速开发框架以来,收到了很多朋友的关注,也在得到反馈后逐步的改善。在和朋友的探讨中,发觉在微信公众平台的开发中,难得不是开发,而且微信平台对接口的一些限制,我们只有到了认证的服务号后才能使用完全的高级接口,对于很多朋友来说,基本上都是认证过的订阅号,所以很多测试都无法进行,希望后续微信平台会放宽限制。

明天去坐邮轮去台湾了,大家以后想旅游,做签证之类都可以找我,可以加我私信:jamesying1,不定期会发些特价旅游线路。作为码农,必要的放松还是需要的,大家不要太累,身体是革命的本钱。

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
6天前
|
定位技术 开发工具 Python
代码让微信开屏地球转起来
这段内容介绍了如何使用Python制作一个动态旋转的地球图像,类似于微信启动画面中的地球。文章详细描述了所需准备的三个素材(地球表面、云图和微信地球的抠图),并解释了通过调整云层和地面的旋转速度来实现自然的相对运动效果的基本原理。文中还提供了一个GIF压缩工具的链接,以及部分代码示例。此外,文章最后提到了一些Python学习资源,包括学习路线、开发工具、视频教程、实战案例、练习题和面试资料。
20 0
|
1天前
|
存储 移动开发 监控
微信支付开发避坑指南
【9月更文挑战第11天】在进行微信支付开发时,需遵循官方文档,确保权限和参数配置正确。开发中应注重安全,验证用户输入,合理安排接口调用顺序,并处理异常。上线后需实时监控支付状态,定期检查配置,关注安全更新,确保系统稳定运行。
|
5天前
|
小程序 JavaScript Go
代码总有一个是你想要的分享63个微信小程序源
分享63个微信小程序源代码,包括电商系统、同城拼车、博客等多种应用,涵盖C#、Node.js、Golang等技术栈。每个项目附带源码和示例,适合初学者和开发者参考学习。提取码:8888,代码效果参考:http://www.603393.com/sitemap.xml。
23 2
|
7天前
|
移动开发 小程序 JavaScript
uni-app开发微信小程序
本文详细介绍如何使用 uni-app 开发微信小程序,涵盖需求分析、架构思路及实施方案。主要功能包括用户登录、商品列表展示、商品详情、购物车及订单管理。技术栈采用 uni-app、uView UI 和 RESTful API。文章通过具体示例代码展示了从初始化项目、配置全局样式到实现各页面组件及 API 接口的全过程,并提供了完整的文件结构和配置文件示例。此外,还介绍了微信授权登录及后端接口模拟方法,确保项目的稳定性和安全性。通过本教程,读者可快速掌握使用 uni-app 开发微信小程序的方法。
25 3
|
16天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
16天前
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
16天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
本文介绍如何在Taro项目中使用Nut UI的`<nut-uploader/>`组件实现图片上传功能,并通过示例代码展示了自定义上传逻辑的方法。
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
|
22天前
|
小程序 JavaScript Java
微信小程序的后端开发需要使用什么语言?
【8月更文挑战第22天】微信小程序的后端开发需要使用什么语言?
241 65
|
16天前
|
小程序 JavaScript
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
本文介绍了使用 Taro 和 Vue 创建轮播组件的两种方法:一是通过 `<swiper>` 实现,二是利用 Nut UI 的 `<nut-swiper>` 组件实现。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
|
16天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)