SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中

简介: SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中

这是Jerry 2020年的第87篇文章,也是汪子熙公众号总共第269篇原创文章。


本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上。


系列目录

(1) 微信开发环境的搭建


(2) 如何通过微信公众号消费API


(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据


(4) 如何将SAP C4C主数据变化推送给微信公众号


(5) 如何将SAP UI5应用嵌入到微信公众号菜单中


(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中(本文)


(7) 使用Redis存储微信用户和公众号的对话记录


(8) 微信公众号的地图集成


(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统


(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者


最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,重新发布在我的公众号上。


需要注意的是,时隔三年,微信公众号的开发流程可能有所变化,请大家自行鉴别。和微信公众号集成的系统,我三年前选择的是SAP Cloud for Customer.


这个系列的第五篇文章,我们已经将一个SAP UI5应用绑定到了微信公众号的一个菜单上。点击该菜单,该SAP UI5应用就会在微信app嵌入的浏览器里打开并运行。


本文我们更进一步,在打开的SAP UI5应用里,显示一些点击了该公众号菜单的微信用户的个人信息,比如微信昵称。


看一个例子:假设Jerry自己的个人微信号昵称为null:(这个昵称高居被前端工程师吐槽的用户昵称排名之首,原因大家都懂的)


image.png当我关注了测试微信公众号,点击公众号菜单打开SAP UI5应用后,我发现自己的微信昵称,null,出现在了SAP UI5应用的某个字段里:image.png本文余下部分,会详述这个场景的实现步骤。

在微信公众号后台开发中心的文档区域里,点击“网页授权获取用户基本信息”,即可查看微信的官方文档:image.png官方文档提到,如果用户在微信客户端中访问第三方网页(比如访问我们自行开发且部署在某云平台上的SAP UI5应用),并且该第三方应用会调用API获取微信用户个人信息时,公众号需要遵循微信定义的OAuth2 网页授权机制,即需要用户在微信app里手动点击“确认登录”之后,才能允许第三方应用调用微信API,获取当前登录用户的个人信息。


image.png用户的视角出发,其感知到的流程如下:


(1) 用户试图在微信app里通过微信公众号菜单访问第三方应用。

(2) 在微信app里,用户看到微信登录的对话框,包含文字“网页由该公众号开发,请确认授权以下信息”和一个“确认登录”的按钮。

(3) 用户点击“确认登录”之后,看到了自己想访问的第三方应用,且该应用页面上显示了自己的微信个人信息比如昵称字段。


以上三个步骤,背后其实发生了很多事情,也需要开发人员对应的编程去实现。


我认为用倒序的方式讲解这三个流程中发生的事情,大家会比较容易理解一些。


在步骤三里,第三方应用调用API获取用户微信昵称时,需要网页授权Access Token,该Token和普通的Access Token并不是一回事,二者获取方式也有差异:


image.png普通的Access Token的获取和使用方式,在Jerry这个系列之前的文章已经介绍过,通过微信公众号的app id和app secret去换取即可,这里不再重复。


而现在讨论的网页授权Access Token,除了微信公众号的app id和app secret之外,还需要另一个code才能换取成功。这个code从哪里来?步骤三里,微信用户点击了“确认登录”的按钮之后:


image.pngimage.png微信会自动生成一个code,并将该code传给我们的第三方应用。第三方应用通过编程,接收到微信传来的这个code之后,调用API,利用该code去换取网页授权Access Token,再使用后者,调用读取微信用户昵称的API,即可获取微信用户的昵称了。


所以,上图在微信app中弹出的对话框,技术上来说,作用有二:


(1) 显式征求用户的第三方网页访问授权;

(2) 用户授权后,将微信生成的code发送给第三方应用。


下面我们按照顺序,把完整的实现流程过一遍。


(1) 点击下图的“修改”链接,配置第三方应用的回调域名。


image.png用户在微信app里点击了“确认登录”之后,微信生成的code会发送到这个域名下的第三方应用去。


我用nodejs开发了一个应用,监听微信传递过来的code,该应用的url为:


https://wechatjerry.herokuapp.com/tokenCallback


因此对应的域名配置如下:


image.png2) 在用户首次访问第三方应用之前,需要在微信app里弹出网页授权请求窗口。这个窗口的弹出,需要进行一番配置。


微信官方文档里给出了一种方式,即推送如下的url给微信用户,用户点击之后,即可在微信app里,弹出网页授权访问的对话框:


https://open.weixin.qq.com/connect/oauth2/authorize?appid=&redirect_uri=&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect


上面的url模板需要根据实际情况,填充微信公众号的app id和第三方应用用于接收微信网页授权code的地址。


对于我这个例子来说,最后完整的url为:


https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx73b49bfe02fd3a17&redirect_uri=https://wechatjerry.herokuapp.com/tokenCallback&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect


当用户在微信app里点击了这个url之后,就会看到下面的网页授权对话框了:


image.pngimage.png用户点击“确认登录”之后,微信app就会将一个自动生成的code,发送到我之前url里指定的回调地址去:


https://wechatjerry.herokuapp.com/tokenCallback


在nodejs应用里,响应来自tokenCallback的HTTP POST请求:



image.png拿到了code之后,就可以在authorizeAndRedirect函数里,通过app id,app secret和code,三者一齐去换取网页授权的Access Token:image.png拿到Access Token之后,再调用getUserinfo函数,使用Access Token和微信用户的openID,调用获取微信用户个人信息的API,从而拿到用户昵称,在下图第68行打印出来,然后在第70行,将该昵称通过url参数的方式,重定向到SAP UI5应用:

image.png在SAP UI5应用的init钩子里,使用jQuery.sap.getUriParameters().get, 读取到这个传入的url参数,将其绑定到模型名称为modelForview内的MasterTitle字段上:

image.png最后,把SAP UI5应用Master List的页面标题控件的title属性,绑定到上述MasterTitle模型字段即可。这样,我的微信昵称null,就成功显示在SAP UI5 Master List的标题控件上了:image.png本文提到的源代码实现,在我的Github上。


本文提到的OAuth 2认证机制,如今已经广泛应用于各种第三方应用的授权登录场景中。


本系列的下一篇文章,Jerry会介绍,如何使用Redis, 存储用户和微信公众号的聊天记录,感谢阅读。


系列目录

(1) 微信开发环境的搭建


(2) 如何通过微信公众号消费API


(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据


(4) 如何将SAP C4C主数据变化推送给微信公众号


(5) 如何将SAP UI5应用嵌入到微信公众号菜单中


(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中(本文)


(7) 使用Redis存储微信用户和公众号的对话记录


(8) 微信公众号的地图集成


(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统


(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者


相关文章
|
6天前
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
16 1
|
14天前
|
存储 消息中间件 前端开发
Web2py框架下的神秘力量:如何轻松集成第三方API,让你的应用不再孤单!
【8月更文挑战第31天】在开发现代Web应用时,常需集成第三方服务如支付网关、数据存储等。本文将指导你使用Web2py框架无缝接入第三方API。通过实例演示从注册获取API密钥、创建控制器、发送HTTP请求到处理响应的全过程。利用`requests`库与Web2py的内置功能,轻松实现API交互。文章详细介绍了如何编写RESTful控制器,处理API请求及响应,确保数据安全传输。通过本教程,你将学会如何高效整合第三方服务,拓展应用功能。欢迎留言交流心得与建议。
28 1
|
13天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
66 0
|
13天前
|
开发者 图形学 前端开发
绝招放送:彻底解锁Unity UI系统奥秘,五大步骤教你如何缔造令人惊叹的沉浸式游戏体验,从Canvas到动画,一步一个脚印走向大师级UI设计
【8月更文挑战第31天】随着游戏开发技术的进步,UI成为提升游戏体验的关键。本文探讨如何利用Unity的UI系统创建美观且功能丰富的界面,包括Canvas、UI元素及Event System的使用,并通过具体示例代码展示按钮点击事件及淡入淡出动画的实现过程,助力开发者打造沉浸式的游戏体验。
30 0
|
13天前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
34 0
|
13天前
|
开发者 C# UED
WPF与多媒体:解锁音频视频播放新姿势——从界面设计到代码实践,全方位教你如何在WPF应用中集成流畅的多媒体功能
【8月更文挑战第31天】本文以随笔形式介绍了如何在WPF应用中集成音频和视频播放功能。通过使用MediaElement控件,开发者能轻松创建多媒体应用程序。文章详细展示了从创建WPF项目到设计UI及实现媒体控制逻辑的过程,并提供了完整的示例代码。此外,还介绍了如何添加进度条等额外功能以增强用户体验。希望本文能为WPF开发者提供实用的技术指导与灵感。
28 0
|
13天前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
19 0
|
13天前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
23 0
|
13天前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
25 0
|
13天前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
37 0

热门文章

最新文章