用户点击一个微信菜单的时候,可以发送一个消息,也可以打开一个页面链接,下面说页面链接的情况
如果微信菜单打开这个url的话:http://www.netsharp.org/nav/weixin/index?originalId=gh_cd4d099926d5
微信要求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
其中:redirect_uri部分是开发人员真正想让客户看到的链接,而且需要编码
微信打开菜单以后,页面先跳转到微信的oauth认证页,然后再跳转到业务页面,首先netsharp会自动把"originalId"参数传递过去,在业务页面如果想获取openId则通过oauth认证页给业务页面追加的一个参数“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>
测试页的效果如下:

原文:http://www.cnblogs.com/Netsharp/p/5778384.html