一、OAuth介绍

在微信开发中,当打开一个页面是,业务场景一般会基于粉丝绑定用户信息,即页面需要基于粉丝和用户的身份处理业务逻辑。

在微信中打开一个页面有三个场景:

1.文本回复中直接包含url

2.图文回复中携带url

3.微信菜单直接打开一个url

对于前两者,因为使用的是请求和回复的方式,回复可以在后台在页面中通过url的参数传递粉丝的openId等身份标识数据。而对于微信菜单的url,因为没有后台的处理,所以无法在url中附加openId,导致菜单打开的页面无法实现粉丝和用户的身份识别。

微信提供了oauth方式,可以用来在微信菜单中打开的url进行粉丝和用户身份的标识。需要说明的是只有微信服务号才支持oauth,对于订阅号是不支持oauth的,即订阅号菜单对应的url中无法识别粉丝和用户的身份。本文介绍的是netsharp.weixin开发下的微信服务号oauth的处理机制。

另外:用户点击一个微信菜单的时候,可以发送一个消息,也可以打开一个url,本文主要介绍打开url的情况

如下场景:

1.业务中微信打开的业务菜单:如http://www.netsharp.org/nav/weixin/index?originalId=gh_cd4d099926d5,本文称之为"redirect_uri"(和微信oauth下的叫法一致)

2.微信要求url必须配置成这样的:https://open.weixin.qq.com/connect/oauth2/authorize?from=weixin&appid=wx19a3e7936ff4ec13&redirect_uri=http%3A%2F%2Fwww.netsharp.org%2Fnav%2Faddins%2Fweixin%2Findex%3ForiginalId%3Dgh_cd4d099926d5&response_type=code&scope=snsapi_base&state=#wechat_redirect,本文称之为oauth_url,在oauth_url中 redirect_uri作为一个参数(即上面的第一点提到的redirect_uri),并且在oauth_url中的redirect_uri部分需要编码

用户点击微信菜单场景:

1.用户点击一个菜单

2.微信打开oauth_url

3.oauth_url页面进行oauth验证

4.oauth_url页验证通过后,跳转到redirect_uri,并且给redirect_uri页面追加了一个参数"code"

5.redirect_uri中,开发人员基于code,调用微信的api得到粉丝的信息

6.基于粉丝信息处理业务

7.结束

二、OAuth示例

下面是redirect_url也的demo代码,首先netsharp会自动把"originalId"参数传递给redirect_url,在redirect_url如果想获取openId则通过oauth_url给redirect_url追加的一个参数“code”获取,netsharp把根据code获取粉丝信息给封装了,参见业务页面的代码:

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@page import="org.netsharp.wx.pa.base.IFansService" %>
<%@page import="org.netsharp.communication.ServiceFactory" %>
<%@page import="org.netsharp.wx.pa.entity.Fans" %>
<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"><meta name="format-detection" content="telephone=no" /><title>oauth测试页面</title></head><body > <%String originalId = (String)request.getParameter("originalId");response.getWriter().write("originalId:"+originalId+"<br/>");String code = (String)request.getParameter("code");response.getWriter().write("code:"+code+"<br/>");//oauth中必须根据code才能得到粉丝信息IFansService fansService = ServiceFactory.create(IFansService.class);Fans fans = fansService.attachByOpenId(code, originalId);response.getWriter().write("openId:"+fans.getOpenId()+"<br/>");response.getWriter().write("nickname:"+fans.getNickname()+"<br/>");response.getWriter().write("img:<img src='"+fans.getHeadImgUrl()+"' style='width:60px;height:60px' /><br/>");%></body>
</html>

测试页的效果如下:

三、Netsharp下微信菜单的配置

因为oauth的页面拼接很麻烦,netsharp.weixin工具把这些工作给封装了,在微信菜单的配置,只要配置redirect_url就可以了,参见如下界面:

转载于:https://www.cnblogs.com/Netsharp/p/5778384.html

Netsharp下微信菜单以及OAuth相关推荐

  1. php 类似微信下拉菜单,微信小程序模拟下拉菜单开发实例

    本文主要和大家分享微信小程序模拟下拉菜单开发实例,希望能帮助到大家. 一.知识点 1.实现动态显示和隐藏某个控件 列表1data:{ open:false }, showitem:function() ...

  2. 为什么微信截图无法截取其他软件中的下拉菜单

    原因终于找到了: 想要截取其他软件中的下拉菜单,不能使用微信默认的截屏快捷键!!! 改一下快捷键就可以了!!!

  3. 微信小程序实现下拉菜单效果

    问题 下拉菜单在各类网页,app或者小程序中都是比较常见的输入控件.下拉菜单的下拉选项的多少可以根据自身需求进行调节,常运用于时间范围选择,地点区域选择,价格区间选择,等等.提供下拉菜单的目的是帮助用 ...

  4. 微信小程序仿闲鱼『下拉菜单』

    下拉菜单我们非常常见了,但是要在微信小程序中实现并不容易,今天带来的是仿闲鱼下拉菜单,相信对您有一定的帮助~~ 先看效果: 麻雀虽小五脏俱全,此效果很复杂,我们将其拆分为多个步骤来分析~ 1)tab状 ...

  5. 微信截取下拉菜单图片时,下拉菜单总是消失,无法成功截取

    问题描述: 微信截取下拉菜单图片时,下拉菜单总是消失,无法成功截取 原因分析: 在下拉框弹出后按Alt键,会自动收回下拉框,而微信默认的截屏快捷键刚好是Alt+A的组合,因此无法使用默认快捷键对下拉框 ...

  6. qml中使用combobox实现多级菜单_excel实用技巧:如何构建多级下拉菜单

    编按:哈喽,大家好!说到做下拉菜单,小伙伴们都知道直接使用Excel中的数据验证就可以实现,但是二级.三级,甚至更多级的下拉菜单,可能就有点蒙圈了.其实用Excel制作三级下拉菜单,一点都不难,它就跟 ...

  7. java 微信 菜单_java微信开发API第四步 微信自定义个性化菜单实现

    微信如何实现自定义个性化菜单,下面为大家介绍 一.全局说明 详细说明请参考前两篇文章. 二.本文说明 本文分为五部分: * 工具类AccessTokenUtils的封装 * 自定义菜单和个性化菜单文档 ...

  8. 如何让图片充满excel单元格_如何在Excel单元格建立下拉菜单

    对于一些常用的数据我们往往会希望能够尽量快速的输入,下拉菜单就是一个最简单的解决办法.那么如何实现下拉菜单呢?跟随以下步骤,建立属于自己的下拉菜单吧! 如何建立下拉菜单? 一.确定内容:在单元格中,输 ...

  9. web前端页面——移动端简单登录页面、下拉菜单(代码详细注释)

      今天跟着专业老师复习了一下前端,感觉好多都已经忘记了,我将今天复习的一些重点整理出来. https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微 ...

最新文章

  1. Apache Spark 介绍的演讲ppt (slice),全英文
  2. tensorflow 入门经典实例
  3. SpringBoot入门教程(十)应用监控Actuator
  4. php考察新人的题目,PHP面试指南2020-sql考察题
  5. #,#x,\u开头的unicode介绍
  6. matlab randi 函数,MATLAB中的randi函数
  7. ecos中的spl同步机制
  8. 计算机显卡驱动全部卸载,怎么卸载显卡驱动
  9. envi神经网络分类原理,ENVI神经网络分类
  10. 各种软件以及插件官网地址 echarts Vscode 阿里云图标库 鼠标图标
  11. linux 中压缩文件夹命令行,Linux下压缩文件夹命令使用
  12. windows开始菜单打不开,搜索打不开
  13. 5分钟,关于Python 解包,你需要知道的一切
  14. 灰度图转bmp文件 C++
  15. 易语言mysql修改语句_易语言-MySQL-update源码例程
  16. How To install a NAV Application Server (NAS)?
  17. Django-使用富文本编辑器
  18. 台式计算机那里可以录音,电脑录音器的位置在哪里 电脑录音器怎么使用
  19. 关于java代码中执行js脚本
  20. 【调剂】澳门科技大学空间大数据硕士接收调剂研究生

热门文章

  1. ACM 模板--邻接表 有向图 搜索算法
  2. 基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型
  3. golang内置函数
  4. go语言的goconvey
  5. MySQL笔记4:desc命令的两个用法
  6. linux命令:nslookup 、tar、route , tracert, traceroute, netstat、write、mesg、touch
  7. 《深入理解计算机系统》读书笔记八:程序结构和执行
  8. mybaits九:自定义结果映射规则
  9. thinkphp-add方法错误
  10. Eclipse 中查看一个方法被哪些对象引用了