微信公众号开发--网页用户授权

相信官方文档,以前的接口错误已经改正,用最新的即可,这几篇随笔是一个项目中拿出来的,缺什么方法去其他随笔里找找就有

 1 import java.io.IOException;
 2 import java.io.UnsupportedEncodingException;
 3 import javax.servlet.ServletException;
 4 import java.net.URLEncoder;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10
11 import org.apache.http.HttpEntity;
12 import org.apache.http.HttpResponse;
13 import org.apache.http.client.methods.HttpGet;
14 import org.apache.http.impl.client.DefaultHttpClient;
15 import org.apache.http.util.EntityUtils;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18 import org.springframework.stereotype.Controller;
19 import org.springframework.web.bind.annotation.RequestMapping;
20 import org.springframework.web.bind.annotation.ResponseBody;
21
22 import com.fuyin.mp.utils.GetMenuJson;
23 import com.fuyin.mp.utils.NetWorkHelper;
24 import com.fuyin.mp.utils.WxaApi;
25 import com.google.gson.Gson;
26
27 import net.sf.json.JSONArray;
28 import net.sf.json.JSONObject;
29
30 @Controller
31 public class WxController {
32     private static final Logger logger = LoggerFactory.getLogger(WxController.class);
33     NetWorkHelper netWorkHelper=new NetWorkHelper();
34     /**
35      * 创建自定义菜单栏
36      */
37     @RequestMapping("creatmenus.action")
38     public String creatmenus(HttpServletRequest req,HttpServletResponse res){
39         logger.debug("自定义菜单栏");
40         NetWorkHelper netWorkHelper=new NetWorkHelper();
41         String u1=WxaApi.CreateMenus.replace("TOKEN", WxaApi.accessToken.getAccessToken());
42         String getruslt = netWorkHelper.getHttpsResponse(u1, "POST", new GetMenuJson().getMenuJson());
43         logger.debug("自定义菜单栏返回结果="+getruslt);
44         return "index.jsp";
45     }
46
47     /**
48      * 获取用户授权
49      */
50     @RequestMapping("Oauth.get")
51     public String Oauth2(HttpServletRequest request,HttpServletResponse response){
52         String newopenid = null;
53         String nickname = null;
54         String city = null;
55         try {
56             logger.debug("授权后的回调请求处理");
57             request.setCharacterEncoding("utf-8");
58             response.setCharacterEncoding("utf-8");
59             // 用户同意授权后,能获取到code
60             String code = request.getParameter("code");
61             String state = request.getParameter("state");
62             // 用户同意授权
63             if (!"authdeny".equals(code)) {
64              //通过code换取网页授权access_token
65              String reqUrl=WxaApi.codetotoken.replace("APPID", WxaApi.appID).replace("SECRET",WxaApi.appsecret).replace("CODE", code);
66              String httpsResponse = netWorkHelper.getHttpsResponse(reqUrl, "GET", "");
67              logger.debug("用户授权返回的TOKEN="+httpsResponse);
68              JSONObject jsonObject=JSONObject.fromObject(httpsResponse);
69              String access_token = jsonObject.getString("access_token");
70              String openid = jsonObject.getString("openid");
71              String url=WxaApi.getinfor.replace("ACCESS_TOKEN",access_token).replace("OPENID", openid);
72              JSONObject jsonbject = null;
73              DefaultHttpClient client = new DefaultHttpClient();
74              HttpGet httpget = new HttpGet(url);
75              HttpResponse respone = client.execute(httpget);
76              HttpEntity entity = respone.getEntity();
77              if(entity != null){
78                 String result = EntityUtils.toString(entity,"UTF-8");
79                 jsonbject = JSONObject.fromObject(result);
80                 }
81              newopenid = jsonbject.getString("openid");
82              city = jsonbject.getString("city");
83              nickname = jsonbject.getString("nickname");
84              logger.debug("用户授权返回的用户信息="+jsonbject);
85              nickname = URLEncoder.encode(nickname,"utf-8");
86              System.out.println("openid="+openid+"----nickname="+nickname);
87             }
88
89         } catch (UnsupportedEncodingException e) {
90             // TODO Auto-generated catch block
91             e.printStackTrace();
92         }catch (IOException e) {
93             // TODO Auto-generated catch block
94             e.printStackTrace();
95         }
96         // 跳转到index.jsp
97         return "redirect:"+WxaApi.WebUrl+"/demo/main.html?openid="+newopenid+"&nickname="+nickname;
98     }
99 }

授权以后通过重定向,去另一个域名的前端项目里,以后的交互全是跨域

原文地址:https://www.cnblogs.com/chaoswu/p/10174527.html

时间: 2024-08-02 15:16:22

微信公众号开发--网页用户授权的相关文章

微信公众号开发获取用户信息

一.获取用户基本信息接口 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称.头像.性别.所在城市.语言和关注时间. 获取用户基本信息 开发者可通过OpenID来获取用户基本信息.请使用https协议. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin

微信公众号开发--获取用户信息中文乱码的解决方案

在微信开发中我们会经常需要获取用户的信息. 微信给我们提供了获取用户信息的api, 地址为 https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 将其中的access_token替换为我们的access_token openid为关注用户的openid就可以获取到用户的信息了. 问题描述 不过获取到的数据却是中文乱码 而用Java程序获取的结果也是一样的

微信公众号开发之网页授权登录及code been used 解决!

首先微信公众号开发网页授权登录使用环境: 开发工具:eclipse:服务器:tomcat8,开发语言:JAVA. 我写的网页授权登录时用开发者模式自定义view类型按钮点击跳转链接的. 微信网页授权登录首先以官方微信开发文档为准,大体共分为4步: 先说第一步获取code: code说明:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5扽这未被使用自动过期. 微信公众开发文档给的有获取code的链接,建议直接复制来用,然后替换其中相应的参

微信公众号开发(二)用户关注

微信公众号开发之用户关注   前面讲了基本配置,如果配置成功,那么现在就进入我们的微信公众号开发之旅吧! 这个旅程应该从哪里开始比较好呢?想想....首先说用户关注吧 !毕竟这是入口. 用户关注公众号可以通过三种方式: 1.扫公众号的二维码 2.搜索公众号的名称 3.扫带参数的二维码,但是第一个用户只能通过前面两种方式关注. 一.扫公众号的二维码 用户扫了二维码之后,点击关注,微信服务器会向我们的服务器发送一串数据(对象形式): reqMap:{ FromUserName:xx, EventKe

PHP 微信公众号开发 - 消息推送

项目微信公众号开发,需要做用户消息推送,记录下来以便日后使用 1,接上一篇文章,可以查看如何获取用户openid PHP 微信公众号开发 - 获取用户信息 2,添加模板消息 3,查看模板详情 根据模板详情设置对应推送消息 4,代码实现 1 <?php 2 // 字符编码 3 header("Content-Type:text/html; charset=utf-8"); 4 5 // 微信接口类 6 class WeChat{ 7 private static $appid; 8

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(二)

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法如下: 第一步和之前讲的一样:获取code,但是scope使用方法是snsapi_userinfo; 第二步,根据code获取openid和access_token(此处的access_token是通过网页授权code换取的不是我们之前讲的全局的票据),代码: 1 /// <summary> 2

微信公众号开发简单的网页授权登陆获取用户基本信息

由于业务需要,近期在做微信公众号开发,其中一个模块是微信用户点击个人中心访问可以得到次微信用户的头像昵称国家省份等基本信息. 但由于业务需求,这块功能暂时用不上了,但这功能的实现毕竟是自己花费几天时间搞出来的,觉得以后会用的上,暂且记录一下实现过程. 首先:获取用户信息的过程属于微信网页授权登陆,再做这一块之前请先阅读微信开发文档以熟悉基本的开发过程: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 微信开发文档

微信公众号开发及时获取当前用户Openid及注意事项

目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及时获取当前用户Openid及注意事项 前言 这篇主要是承接上篇的网页授权获取用户基本信息的后文,也是对第一种静默授权之后,用户点击公众号内链接时,如何再次取得当前用户的OpenId的大致讲解和一些注意事项. 看过上一篇的小伙伴都知道,我们在用户关注的时候就已经将该用户的基本信息存入数据库中,那么如果

C#微信公众号开发 -- (五)自定义菜单创建

公众号中,底部都是有自己定义的功能按钮,通过点击某个按钮来实现指定的业务逻辑操作. 下面就来说说这些按钮是怎样放到微信公众平台的,还是先来看看微信的官方解释: 请注意: 1.自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 2.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替. 3.创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单, 如果菜单有更新,就会刷