Netsharp下微信菜单以及OAuth
一、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就可以了,参见如下界面:

Netsharp下微信菜单以及OAuth的更多相关文章
- C#开发微信门户及应用(15)-微信菜单增加扫一扫、发图片、发地理位置功能
前面介绍了很多篇关于使用C#开发微信门户及应用的文章,基本上把当时微信能做的接口都封装差不多了,微信框架也积累了不少模块和用户,最近发现微信公众平台增加了不少内容,特别是在自定义菜单里面增加了扫一扫. ...
- C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据
我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...
- C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍
在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一 ...
- 小程序页面跳转传参-this和that的区别-登录流程-下拉菜单-实现画布自适应各种手机尺寸
小程序页面跳转传参 根目录下的 app.json 文件 页面文件的路径.窗口表现.设置网络超时时间.设置多 tab { "pages": [ "pages/index/i ...
- excel选择元角分下拉菜单选择框自动变更数字
excel选择元角分下拉菜单选择框自动变更数字 (M2列),数据-->数据有效性-->在“允许”栏中选择序列-->在“来源”栏中输入:分,角,元单位倍数公式(M4列):=IF(M2= ...
- [.Net] C#开发微信门户及应用之微信菜单的多种表现方式介绍
URL:http://www.it165.net/pro/html/201405/13997.html 在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一 ...
- DIV置底层或置最高层的方法下拉菜单被挡住
网站常会用到一些 下拉菜单,,幻灯片,,,飘浮广告等. 但经常会发现.幻灯片会挡住下拉菜单或者飘浮广告微信开店等. 解决办法有下 第一,可将幻灯片所在DIV 置于最底层.添加CSS如下 style=& ...
- 初学者--bootstrap(六)组件中的下拉菜单----在路上(10)
组件---下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 p ...
- Bootstrap3系列:按钮式下拉菜单
1. 基本实例 把按钮放入 .btn-group 中,加入适当的菜单标签,让按钮触发下拉菜单. 1.1 示例代码 <div class="btn-group"> < ...
随机推荐
- native和webview切换
native和webview 标签(空格分隔): native和webview 现在目前大部分的app都是native和webview混合,对应的native上的元素可以通过uiautomatorvi ...
- 安卓GreenDao框架一些进阶用法整理(转)
大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...
- C/s程序过时了吗?
目前的程序从原来的形态演变成了 C/s,B/s,和手机端. 其实应该各有自己的客户群,及定位. 比如C/s为单机版的可以完成个性化突出的复杂客户端应用,企业级别的应用. B/s的特点安装简单,功能制作 ...
- CentOS服务器,大访问量会造成日志文件迅速增大,半年左右得清除一下
今天早上一打开QQ,一大群客户说我的网站登录不了,谷歌了一下,原来是服务器不能存储SESSION.后来问一下服务器托管商,被告知我的VPS运行的时间太久并且访问量很大,因此访问日志爆满. 服务器托管商 ...
- Dedecms织梦内容页获取当前页面顶级栏目名称方法
Dedecms织梦做站的时候,需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称 ...
- input type='number'时,maxlength属性无效
<input type="number" oninput="if(value.length>11)value=value.slice(0,11)" ...
- Shell教程 之流程控制
1. if else 1.1 if if语句语法格式: if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): if ...
- 大数据入门推荐 - 数据之巅 大数据革命,历史、现实与未来等五本PDF
扫码时备注或说明中留下邮箱付款后如未回复请至https://shop135452397.taobao.com/联系店主
- VM虚拟机 安装linux系统
首先需要下载VMware10 和CentOS-6.4,我这边提供了百度网盘,可供下载链接:https://pan.baidu.com/s/1vrJUK167xnB2JInLH890fw 密码:r4jj ...
- 微信小程序开发——获取小程序带参二维码全流程
前言: 想要获取微信小程序带参数二维码,如这种: 官方文档只说了获取小程序码和二维码的三种接口及调用(参考链接:https://developers.weixin.qq.com/miniprogram ...