微信登录授权
2015-06-16 17:11
555 查看
在开发微信网页登陆授权时(如下图),由于对微信平台不熟悉,以为需要在微信开放平台新建一个网站应用以便获取Appid以及AppSecret,等提交材料审批通过后,拿Appid通过微信网页登录授权说明点击打开链接尝试操作后,发现总是提示scope错误或者无权限:
经网上查询,发现原来网页授权登录不是在微信开放平台新建应用,而是通过微信服务号进行操作,取得Appid也是微信服务号的Appid,回调地址也是在服务号中设置,这需要确保服务号有网页授权获取用户基本信息的接口权限,并填写回调地址:
相关服务开通之后,根据微信网页授权接口开发说明,一步步操作,就可以获取需要的用户信息进行相关操作,其中除了第一步是可以由用户点击操作外,其他三部都需要网站页面模拟get请求相应链接进行相关数据的获取,借网上搜寻的代码展示如下:
经网上查询,发现原来网页授权登录不是在微信开放平台新建应用,而是通过微信服务号进行操作,取得Appid也是微信服务号的Appid,回调地址也是在服务号中设置,这需要确保服务号有网页授权获取用户基本信息的接口权限,并填写回调地址:
相关服务开通之后,根据微信网页授权接口开发说明,一步步操作,就可以获取需要的用户信息进行相关操作,其中除了第一步是可以由用户点击操作外,其他三部都需要网站页面模拟get请求相应链接进行相关数据的获取,借网上搜寻的代码展示如下:
package com.javen.course.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import com.javen.course.entity.UserInfo_weixin; import com.javen.course.util.HttpUtil; /** * * @author 简爱微萌 * @Email zyw205@gmail.com * 接口权限中设置OAuth2.0网页授权 域名 如:www.wechat68.com * 授权访问的URL:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx614c453e0d1dcd12&redirect_uri=http://www.wechat68.com/Javen/OauthTest&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect */ public class Oauth2Servlet extends HttpServlet { private String get_access_token_url="https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=APPID" + "&secret=SECRET&" + "code=CODE&grant_type=authorization_code"; private String get_userinfo="https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; private static final long serialVersionUID = -644518508267758016L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); String code=request.getParameter("code"); get_access_token_url=get_access_token_url.replace("APPID", "wx614c453e0d1dcd12"); get_access_token_url=get_access_token_url.replace("SECRET", "fd00642f7a2fea32c5a7b060d9c37db1"); get_access_token_url=get_access_token_url.replace("CODE", code); String json=HttpUtil.getUrl(get_access_token_url); JSONObject jsonObject=JSONObject.fromObject(json); String access_token=jsonObject.getString("access_token"); String openid=jsonObject.getString("openid"); get_userinfo=get_userinfo.replace("ACCESS_TOKEN", access_token); get_userinfo=get_userinfo.replace("OPENID", openid); String userInfoJson=HttpUtil.getUrl(get_userinfo); JSONObject userInfoJO=JSONObject.fromObject(userInfoJson); String user_openid=userInfoJO.getString("openid"); String user_nickname=userInfoJO.getString("nickname"); String user_sex=userInfoJO.getString("sex"); String user_province=userInfoJO.getString("province"); String user_city=userInfoJO.getString("city"); String user_country=userInfoJO.getString("country"); String user_headimgurl=userInfoJO.getString("headimgurl"); // UserInfo_weixin userInfo=new UserInfo_weixin(user_openid, user_nickname, user_sex, user_province, user_city, user_country, user_headimgurl); response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(" "); out.println(" "); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method \n"); out.println("openid:"+user_openid+"\n\n"); out.println("nickname:"+user_nickname+"\n\n"); out.println("sex:"+user_sex+"\n\n"); out.println("province:"+user_province+"\n\n"); out.println("city:"+user_city+"\n\n"); out.println("country:"+user_country+"\n\n"); out.println("); out.println(">"); out.println(" "); out.println(""); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(" "); out.println(" "); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" "); out.println(""); out.flush(); out.close(); } }
相关文章推荐
- 关于微信开发的语音存储问题
- .NET平台下的微信SDK(Rabbit.WeiXin)开源发布
- 微信公众平台开发之环境搭建
- 谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版
- android代码混淆之微信分享不起作用
- 20150616完 一个测试注意力的小程序
- 微信公众平台获取用户地理位置之开发文档详解
- VSTO学习笔记(七)基于WPF的Excel分析、转换小程序
- Java与微信不得不说的故事——消息的接收与发送
- 第二讲 探秘微信公众号
- 如何站在使用者的角度来设计SDK-微信公众号开发SDK(消息处理)设计之抛砖引玉
- 微信JS-SDK Demo
- 转-Fragment+ViewPager组件(高仿微信界面)
- 转-ViewPager组件(仿微信引导界面)
- Android仿微信下拉列表实现
- ANDROID GRIDVIEW仿微信图片多选功能_显示本地相册图片多选效果
- .NET微信支付集成实例
- 微信公众号开发链接
- 微信支付.net官方坑太多,我们来精简
- 微信基本交互分析