首先说一下,这里的获取用户信息是从微信公众号跳转到第三方网站然后根据微信的api获取用户昵称,头像,手机号,地址,openid,unionid等信息。

1.服务器配置

首先登陆你的公众号,左下角的开发->基本配置,其中的服务器配置,点击添加或者修改,这里是必须配了公网解析,并且服务器nginx配置跳转

URL填写验证token的接口地址:你的网址/接口名称
Token随意填写,但是需要和你程序中验证的Token相同
点击随机生成,生成加密密钥

点击提交会向你的程序发送验证,需要按照微信的要求返回密文才能提交成功。

下面是我的controller

    @ResponseBody@GetMapping("/check")public String check(HttpServletRequest request) {// 微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if (SignUtil.checkSignature(signature, timestamp, nonce)) {log.info("echostr=" + echostr);return echostr;} else {return "fail";}}

其中的加密方法如下

public class SignUtil {// 与接口配置信息中的Token要一致private static final String TOKEN = "targetToken";/*** 方法名:checkSignature</br>* 详述:验证签名</br>* 开发人员:souvc</br>* 创建时间:2015-9-29  </br>* @param signature* @param timestamp* @param nonce* @return* @throws*/public static boolean checkSignature(String signature, String timestamp,String nonce) {// 1.将token、timestamp、nonce三个参数进行字典序排序String[] arr = new String[] { TOKEN, timestamp, nonce };Arrays.sort(arr);// 2. 将三个参数字符串拼接成一个字符串进行sha1加密StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md = null;String tmpStr = null;try {md = MessageDigest.getInstance("SHA-1");// 将三个参数字符串拼接成一个字符串进行sha1加密byte[] digest = md.digest(content.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}content = null;// 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;}/*** 方法名:byteToStr</br>* 详述:将字节数组转换为十六进制字符串</br>* 开发人员:souvc </br>* 创建时间:2015-9-29  </br>* @param byteArray* @return* @throws*/private static String byteToStr(byte[] byteArray) {String strDigest = "";for (int i = 0; i < byteArray.length; i++) {strDigest += byteToHexStr(byteArray[i]);}return strDigest;}/*** 方法名:byteToHexStr</br>* 详述:将字节转换为十六进制字符串</br>* 开发人员:souvc</br>* 创建时间:2015-9-29  </br>* @param mByte* @return* @throws*/private static String byteToHexStr(byte mByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(mByte >>> 4) & 0X0F];tempArr[1] = Digit[mByte & 0X0F];String s = new String(tempArr);return s;}}

即可提交成功

2.测试环境开发

微信是提供了测试环境公众号的
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

3.跳转外链

微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 微信网页开发下的微信网页授权。

从公众号跳转外链,直接填外链是打不开的,需要先像上面一样配置服务器,然后就可以打开这台服务器上的页面了,然后跳转的链接是这样的:

其中redirect_uri就是你要跳转的链接

4.获取用户信息

微信开发文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 下面微信网页开发/微信网页授权下面有5步:
1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

5 附:检验授权凭证(access_token)是否有效

根据说明发送http请求就行,这里代码就不全展示了,
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

举例根据code获取access_token:

 public Map<String, String> getAccessToken(String code) throws Exception {HttpUriRequest request = RequestBuilder.get("https://api.weixin.qq.com/sns/oauth2/access_token" + "?appid=" + APPID + "&secret=" + APPSECRET + "&code=" + code + "&grant_type=authorization_code").setConfig(HttpClientFactory.getDefaultRequestConfig()).build();HttpResponse response = client.execute(request);//EntityUtils.consumeQuietly(response.getEntity());int rspCode = response.getStatusLine().getStatusCode();log.info("rsqcode" + rspCode);Map<String, String> result = JSON.read(EntityUtils.toString(response.getEntity()), Map.class);log.info("" + result);if (rspCode / 100 != 2) {throw new IOException("unexpectedresponsecode:" + rspCode);} else {EntityUtils.consumeQuietly(response.getEntity());}return result;}

这里都返回成map,根据需要再取,取不到就抛出异常

大致就是这样,希望看到这里你有所得。

欢迎关注我的微博@住街对面的查理,我的生活很有趣,你要不要来看一看。

微信外链获取微信用户信息相关推荐

  1. 从微信服务器获取用户信息,微信小程序Ⅴ [获取登陆用户信息,重点openID(详解)]...

    ♩ 背景 其实这篇文章几个月前就写完了,可是这段时间,微信小程序官方文档有了更新,同事在我本身的实际操做过程当中,发现以前写的过于繁杂,因此如今进行简化梳理,欢迎指摘. 语言框架:ThinkPHP3. ...

  2. 微信小程序Ⅴ [获取登录用户信息,重点openID(详解)]

    ♩ 背景 其实这篇文章几个月前就写完了,但是这段时间,微信小程序官方文档有了更新,同事在我自己的实际操作过程中,发现之前写的过于繁杂,所以现在进行简化梳理,欢迎指摘. 语言框架:ThinkPHP3.2 ...

  3. springboot+h5页面+微信公众号获取微信用户信息

    springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...

  4. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

  5. 微信小程序获取住户地区信息

    微信小程序获取住户地区信息 微信小程序获取住户地区信息 微信小程序获取住户地区信息 1.现在app.js里面配置如下 { //向用户申请获取授权"permission": {&qu ...

  6. 微信小程序2022最新用户信息授权设置

    微信小程序2022最新用户信息授权设置 微信小程序中 用户信息授权 一直是一个非常重要的功能,它有着提升用户体验.进行用户身份认证.便于开发者进行数据分析等作用. -- 但是用户授权功能涉及到用户隐私 ...

  7. 基于区块链技术的数据安全共享网络体系研究_基于区块链技术的用户信息隐私保护与共享方案...

    随着互联网信息技术的飞速发展,网络数据量迅猛增长,不可避免的数据隐私保护成为用户关注的重点.在金融领域,经历了纸质信息到电子用户交易档案的转变,用户使用云服务器来存储个人数据,但是交易数据包含有众多的 ...

  8. 添加权限,获取到用户信息,就用户当前部门进行下拉选择

    1.在后端初始化的方法中添加获取到用户信息: @Override public EiInfo initLoad(EiInfo inInfo) {Uuser uuser = new Uuser();uu ...

  9. wordpress 外部数据接口_使用接口方式获取WordPress用户信息的方法

    今天WordPress主题站简单介绍一下WordPress系统中用户信息获取方式,今天就讲讲使用接口方式获取WordPress用户信息的方法. 接口文件如下: if ('POST' != $_SERV ...

最新文章

  1. 视频直播软件开发过程中需要解决的“老朋友”...
  2. RecyclerView的优化:RecycledViewPool
  3. mysql怎样循环插入数据_你向 Mysql 数据库插入 100w 条数据用了多久?
  4. Github 最新 AI 开源项目了解一下?
  5. android 单位转换工具,Android单位转换----常用单位转换工具类
  6. QQ无法安装,不用着急,用毒霸2011来解决
  7. 9.5 LSMW程序创建操作手册 第12 13 14步
  8. JQuery实现ajax跨域
  9. Tree UVA - 548(二叉树递归遍历)
  10. 度量 数据突变_使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?
  11. vSphere ESXI 7.0部署详细安装指南
  12. java 调用热敏打印机_java调用芯烨热敏打印机 TSPL2指令 打印没有反应
  13. 敏捷开发中如何进行团队绩效管理
  14. 易宝典——玩转O365中的EXO服务 之三十七 保留所有邮箱
  15. Ajax 改造,第 3 部分: 用 jQuery、Ajax 选项卡和照片 carousel 改进现有的站点
  16. Linux报错:tar: Error Is Not Recoverable: Exiting Now
  17. Vue-创建组件时报错:Component names should conform to valid custom element name in html5 specification.
  18. 3DMAX打开模型一直未响应
  19. validation校验 @NotNull @NotBlank及分组校验
  20. Contextual Transformer Networks for Visual Recognition论文以及代码解析

热门文章

  1. Linux安全之安装Snort(轻量级入侵检测系统)与使用
  2. 找到一个最大的轮廓(四边形)
  3. 多线程学习笔记(自用版)希望大家一起找找问题
  4. C语言中输入一组正整数,以-1作为结束标记,统计输入正整数的个数,并计算其平均值。
  5. linux之常用软件
  6. 假设我们在对有符号值使用补码运算的32位机器人运行代码。对于有符号值使用的是算术右移,而对于无符号值使用的是逻辑右移
  7. 提供“以图搜图”完整解决方案,博云视觉让各行业都可以方便地“以图搜图”
  8. JavaWeb基础系列(十)Ajax
  9. IGD+-EMOA:基于IGD+的多目标进化算法
  10. 在电脑中内存条DDR有什么作用 如何选择内存条?