原文链接:https://blog.csdn.net/qq_37936542/article/details/78981369

一:配置接口

注意:这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头,

二:定义一个公众号菜单,跳转授权页面(或者链接直接跳转)

  1. String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx59be073ef6eac757&redirect_uri=http://wx.intmote.com/debo_wx/index.html&response_type=code&scope=snsapi_base&state=123#wechat_redirect";
  2. CommonButton btn11 = new CommonButton();
  3. btn11.setName("跳转授权页面");
  4. btn11.setType("view");
  5. btn11.setUrl(url);

appid 公众号的唯一标识

redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理

response_type 返回类型,请填写code

scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )

state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

#wechat_redirect 是无论直接打开还是做页面302重定向时候,必须带此参数

三:获取code

点击菜单按钮后,页面将跳转至 http://wx.intmote.com/debo_wx/index.html/?code=CODE&state=STATE。

返回错误码说明:

10003 redirect_uri域名与后台配置不一致
10004 此公众号被封禁
10005 此公众号并没有这些scope的权限
10006 必须关注此测试号
10009 操作太频繁了,请稍后重试
10010 scope不能为空
10011 redirect_uri不能为空
10012 appid不能为空
10013 state不能为空
10015 公众号未授权第三方平台,请检查授权状态
10016 不支持微信开放平台的Appid,请使用公众号Appid

在index.html页面获取code

  1. var code = GetQueryString("code");
  2. //获取地址栏后面的参数
  3. function GetQueryString(name){
  4. var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
  5. var r = window.location.search.substr(1).match(reg);
  6. if(r!=null)return  unescape(r[2]); return null;
  7. }


四:根据code去获取access_token

前端ajax请求:

  1. //获取用户的openId
  2. $.ajax({
  3. url : "getOpenId.action",
  4. dataType : "json",
  5. type : "get",
  6. data : "code="+GetQueryString("code"),
  7. success : function(data){
  8. //返回的data即为openid,拿到openid实现业务
  9. }
  10. })

后台java代码:

Controller:

  1. /**
  2. * 网页授权获取用户openid
  3. * @Title: getOpenId
  4. * @param @param code
  5. * @throws
  6. */
  7. @RequestMapping(value = "getOpenId", method = RequestMethod.GET)
  8. @ResponseBody
  9. public String getOpenId(@RequestParam("code") String code)
  10. {
  11. System.out.println("cede="+code);
  12. //通过code获取openId
  13. JSONObject jsonDate = CommonUtil.getOpenId(code);
  14. if(jsonDate.isNull("errcode")){
  15. return jsonDate.getString("openid");
  16. }
  17. return "";
  18. }

CommonUtil:

  1. /**
  2. * 网页授权获取openId
  3. * @Title: getOpenId
  4. * @Description: TODO
  5. * @param code
  6. * @return JSONObject
  7. */
  8. public static JSONObject getOpenId(String code) {
  9. String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
  10. String requestUrl = url.replace("APPID", WeChatInfo.WX_APPID).replace("SECRET", WeChatInfo.WX_APPSECRET).replace("CODE", code);
  11. JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
  12. return jsonObject;
  13. }

appid公众号的唯一标识
secret公众号的appsecret
code填写第一步获取的code参数
grant_type填写为authorization_code

WeCharInfo:

  1. public class WeChatInfo {
  2. public static final String WX_APPID = "wx59bte0732ef6eeac757";
  3. public static final String WX_APPSECRET = "3ade4c386340aa47bb55dae0d9b9ac7d73";
  4. }

requestUrl请求完成返回的JSON数据包如下:

  1. { "access_token":"ACCESS_TOKEN",
  2. "expires_in":7200,
  3. "refresh_token":"REFRESH_TOKEN",
  4. "openid":"OPENID",
  5. "scope":"SCOPE" }

参数               描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

错误时微信会返回JSON数据包如下(示例为Code无效错误):

  1. {"errcode":40029,"errmsg":"invalid code"}

结束了,如果要获取用户的其他信息,参考微信开发文档,我是直接根据openid去数据库查询用户信息(关注时保存用户信息到数据库)

文末福利:

福利一:前端,Java,产品经理,微信小程序,Python等10G资源合集大放送:https://www.jianshu.com/p/e8197d4d9880

福利二:微信小程序入门与实战全套详细视频教程

【领取方法】

关注 【编程微刊】微信公众号:

回复【小程序demo】一键领取130个微信小程序源码demo资源。

回复【领取资源】一键领取前端,Java,产品经理,微信小程序,Python等资源合集10G资源大放送。



原文作者:祈澈姑娘
原文链接:https://www.jianshu.com/u/05f416aefbe1
创作不易,转载请告知

90后前端妹子,爱编程,爱运营,爱折腾。
坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。

微信测试号开发之九 微信网页授权:页面获取用户openid的更多相关文章

  1. PHP微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo(二)

    一.这个文件微信授权使用的是OAuth2.0授权的方式.主要有以下简略步骤: 第一步:判断有没有code,有code去第三步,没有code去第二步 第二步:用户同意授权,获取code 第三步:通过co ...

  2. php 微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo

    get_wx_data.php <?php /** * 获取微信用户信息 * @author: Lucky hypo */ class GetWxData{ private $appid = ' ...

  3. 微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆

    原创声明:本文为本人原创作品,绝非他处转账,转载请联系博主 从接触公众号到现在,开发维护了2个公众号,开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事, ...

  4. .NET轻松实现支付宝服务窗网页授权并获取用户相关信息

    前言: 最近在开发一个商业街区的聚合扫码支付功能,其中需要用到的有支付宝,微信两种支付方式,当然对于开发微信支付而已作为自己的老本行已经比较熟悉了,然而对于我来说支付宝支付还是头一次涉及到.这次项目中 ...

  5. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  6. 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)

    本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...

  7. 微信小程序button授权页面,用户拒绝后仍可再次授权

    微信小程序授权页面,进入小程序如果没授权跳转到授权页面,授权后跳转到首页,如果用户点拒绝下次进入小程序还是能跳转到授权页面,授权页面如下 app.js  中的 onLaunch或onShow中加如下代 ...

  8. 微信测试号开发入门配置问题java

    这个测试号配置弄了好几天了,入了无数坑,终于解决了...辛苦我了,手动安慰一下自己.. 为了萌新们以后不要再浪费时间绕半天做无用功.看看楼楼的艰苦历程吧. 此教程针对没有云服务器,没有自己的域名的.没 ...

  9. 微信网页授权,获取微信code,获取access_tocken,获取用户信息

    微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 ...

随机推荐

  1. MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4

    utf8mb4兼容utf8,且比utf8能表示更多的字符. 关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 因为utf8mb4是utf8的超集

  2. element-UI实现el-table-column百分比自定义分配

    1.把el-table-column的属性width换位min-width就支持百分比显示了.

  3. 数组-reduce方法

    转自: https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/139 实现 convert 方法,把原始 list ...

  4. 【AtCoder Regular Contest 082】Derangement

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 贪心. 连续一块的p[i]==i的话,对答案的贡献就应该为(这个连续块的长度+1)/2; 长度为1的也正确. (也即两两相邻的互换位置.) [错 ...

  5. 【Codeforces Round #299 (Div. 2) E】Tavas and Pashmaks

    [链接] 我是链接,点我呀:) [题意] 游泳+跑步比赛. 先游泳,然后跑步. 最先到终点的人是winner. 但是现在游泳的距离和跑步的距离长度都不确定. S和R. 给你n个人,告诉你每个人游泳的速 ...

  6. 飞镖忍者 quick-cocos2d-x3.2

    经典的入门小游戏.这里用quick-cocos2d-x3.2又一次写一遍,以便熟悉下quick 首先,创建project,假设不会自行百度啊. 1.编译效果例如以下: watermark/2/text ...

  7. 详解javascript: void(0);

    原文 简书原文:https://www.jianshu.com/p/08ae8cbeb3be 什么是javascript: void(0); 我们经常会使用到 javascript:void(0) 这 ...

  8. 3、在编译过程中出现no space left on device

    原因:通过df -h查看发现磁盘空间不错  删掉不需要的文件后执行sudo apt-get clean

  9. 任哲<<μC/OS>>

    从第二章开始啦: 程序控制块(TCB)  重要概念  相当于对应程序块的学生证,学号,,, 上面的图是一个简单的程序控制块,还会有复杂的程序控制块,也许是嵌套的两级的: 链表就相当于老师手中的花名册, ...

  10. arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

    风过无痕 原文  arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新 深入理解游标Cursors,实现数据的快速查找,插入,删除,更新 1.查找数据Search Cu ...