Java微信公众号--3--网页授权的一些问题
2017-12-13 10:38
453 查看
前面在写微信公众号开发的时候,我一直有提到一个问题,那就是域名的问题,然后在补充下一个问题是,如果你看了 爱慕课上面讲的网页授权还是发现成功不了,那就可能是HTTPS请求的方式有问题了
目前以测试号为例
这个域名相对于来说就没有那么多的要求,就会简单很多
而关于这个域名,就不要出现二级域名的情况,避免跨域请求的出现;
如果你的域名不对的话可能会出现的问题:微信公众号—-多次请求,状态码(40001)
近段时间通过慕课的伙伴还发现一个这种问题,就是当你和慕课上面的代码一模一样的话,可能这个问题也会存在,就是微信公众号—-多次请求,状态码(40001)
debug了下发现问题出现在HTTPS请求这边,可以用这篇文章中HTTPS请求进行代替慕课网中的请求:Java—发送HTTPS请求
下面我贴一下我的代码:
接口配置信息的URL:花生壳
网页授权回调页面域名:NATAPP
jar包
代码结构:
util:
util里面的代码:Java—发送HTTPS请求这里面的是一样的
pojo:
Info.java
Token.java
servlet:
BaseServlet.java
LoginServlet.java
CallBackServlet.java
index.jsp
newjsp.jsp
网页授权大概就到这里了,后续有机会的话应该会帖微信支付的代码
Java微信公众号–1–基本配置接入开发者模式
Java微信公众号–2–微信菜单和消息管理
Java—发送HTTPS请求
目前以测试号为例
这个域名相对于来说就没有那么多的要求,就会简单很多
而关于这个域名,就不要出现二级域名的情况,避免跨域请求的出现;
如果你的域名不对的话可能会出现的问题:微信公众号—-多次请求,状态码(40001)
近段时间通过慕课的伙伴还发现一个这种问题,就是当你和慕课上面的代码一模一样的话,可能这个问题也会存在,就是微信公众号—-多次请求,状态码(40001)
debug了下发现问题出现在HTTPS请求这边,可以用这篇文章中HTTPS请求进行代替慕课网中的请求:Java—发送HTTPS请求
下面我贴一下我的代码:
接口配置信息的URL:花生壳
网页授权回调页面域名:NATAPP
jar包
代码结构:
util:
util里面的代码:Java—发送HTTPS请求这里面的是一样的
pojo:
Info.java
package pojo; import java.util.List; /** * 通过网页授权获取用户信息 * Created by admin on 2017/11/15. */ public class Info { // 用户标识 private String openid; // 用户昵称 private String nickname; // 性别(1是男性,2是女性,0是未知) private int sex; // 国家 private String country; // 省份 private String province; // 城市 private String city; // 用户头像链接 private String headimgurl; // 用户特权信息 private List<String> privilege; public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getHeadimgurl() { return headimgurl; } public void setHeadimgurl(String headimgurl) { this.headimgurl = headimgurl; } public List<String> getPrivilege() { return privilege; } public void setPrivilege(List<String> privilege) { this.privilege = privilege; } @Override public String toString() { return "Info{" + "openid='" + openid + '\'' + ", nickname='" + nickname + '\'' + ", sex=" + sex + ", country='" + country + '\'' + ", province='" + province + '\'' + ", city='" + city + '\'' + ", headimgurl='" + headimgurl + '\'' + ", privilege=" + privilege + '}'; } }
Token.java
package pojo; /** * 网页授权信息 * Created by admin on 2017/11/1 4000 5. */ public class Token { // 网页授权接口调用凭证 private String access_token; // 凭证有效时长 private int expires_in; // 用于刷新凭证 private String refresh_token; // 用户标识 private String openid; // 用户授权作用域 private String scope; public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public int getExpires_in() { return expires_in; } public void setExpires_in(int expires_in) { this.expires_in = expires_in; } public String getRefresh_token() { return refresh_token; } public void setRefresh_token(String refresh_token) { this.refresh_token = refresh_token; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } @Override public String toString() { return "Token{" + "access_token='" + access_token + '\'' + ", expires_in=" + expires_in + ", refresh_token='" + refresh_token + '\'' + ", openid='" + openid + '\'' + ", scope='" + scope + '\'' + '}'; } }
servlet:
BaseServlet.java
package servlet; import com.google.gson.Gson; import javax.servlet.http.HttpServlet; /** * Created by admin on 2017/12/7. */ public class BaseServlet extends HttpServlet { private String APPID = "wx2e****a800****"; private String APPSECET = "4****34****e****0c2****4f5****"; Gson gson = new Gson(); public String getAPPID() { return APPID; } public String getAPPSECET() { return APPSECET; } }
LoginServlet.java
package servlet; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/wxLogin") public class LoginServlet extends BaseServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String backUrl = "http://dqvzxy.natappfree.cc/WeixinAuth/callBack"; String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+getAPPID() + "&redirect_uri="+URLEncoder.encode(backUrl) + "&response_type=code" + "&scope=snsapi_userinfo" + "&state=STATE#wechat_redirect"; resp.sendRedirect(url); } }
CallBackServlet.java
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import pojo.Info; import pojo.Token; import util.HttpsREQUEST; @WebServlet("/callBack") public class CallBackServlet extends BaseServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String code = req.getParameter("code"); System.out.println("....." + code); // 页面授权第二步,通过code换取 access_token openid String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + getAPPID() + "&secret=" + getAPPSECET() + "&code=" + code + "&grant_type=authorization_code"; String s = null; try { // 发送HTTPS请求, GET请求这个文档有写,然后注意是GET或者POST都是大写 没有参数所以最后一个为null, s = HttpsREQUEST.HttpsRequest(url, "GET", null); } catch (Exception e) { e.printStackTrace(); } // Gson的使用 : Json字符串转化为到java实体的 Token token = gson.fromJson(s, Token.class); // 实体类的封装获取 String access_token = token.getAccess_token(); String openid = token.getOpenid(); // 页面授权第四步,通过 access_token openid 换取 用户信息 下面就和上面的一样了 String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN "; String info = null; try { info = HttpsREQUEST.HttpsRequest(infoUrl, "GET", null); } catch (Exception e) { e.printStackTrace(); } Info infos = gson.fromJson(info, Info.class); //1、使用用户信息直接登录,无需注册和绑定 req.setAttribute("info", infos); req.getRequestDispatcher("/newjsp.jsp").forward(req, resp); } }
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device--width,initial-scale=1.0"> <title>JSP Page</title> </head> <body style="font-size: 40px;text-align: center"> <a href="/WeixinAuth/wxLogin">微信登录</a> </body> </html>
newjsp.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> 登录成功! <div>用户昵称${info.nickname}</div> <div>用户头像<img style="vertical-align: top;" width="100px" height="100px" alt="" src="${info.headimgurl}"></div> </body> </html>
网页授权大概就到这里了,后续有机会的话应该会帖微信支付的代码
Java微信公众号–1–基本配置接入开发者模式
Java微信公众号–2–微信菜单和消息管理
Java—发送HTTPS请求
相关文章推荐
- JAVA微信公众号开发第6篇网页授权
- Java微信公众号开发:网页授权获取用户基本信息
- Java微信公众号开发之OAuth2.0网页授权
- 微信公众号用java中控服务器-实现用户网页授权和获取使用JS-SDK权限
- Java 微信公众号网页授权
- 微信公众号平台网页授权接口中获取到的授权code传递给(即一个微信公众号网页授权给)任何其他多个回调域名下的url,解决了只能设置一个网页授权回调域名的问题,解决了redirect_uri参数错误的问
- 微信公众号OAuth2.0网页授权问题浅析
- Java 微信公众号网页授权
- 微信公众号网页授权code been use问题
- PHP解决微信公众号网页授权域名只能填写一个的问题
- 初学java碰到的一些问题
- 大三下学期开学.近期linux,java,eclipse一些小问题的笔记.
- 一些有趣的JAVA问题!
- java环境变量设置即一些问题的解决
- java 抓取网页乱码问题处理
- java与c/c++进行socket通信的一些问题
- 网页中一些常见的问题与javascript解决代码
- 关于java中文乱码问题一些解决方案和经验
- 收集了一些有关网页设计的问题集
- 学习JAVA一个月来,所遇到的一些问题(不全)