微信授权登录静默方式获取openid

微信授权登录静默方式获取openid

登录网站查看自己的appid和appsecret
网站地址: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
在这里插入图片描述
第一步获取code

 String redirect_uri =null;
        String appid="";
        try {
            redirect_uri = URLEncoder.encode("http://xcgege.com/wechat/transmainpage.do", "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        System.out.println(redirect_uri);
        StringBuffer url = new StringBuffer("https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri=" + redirect_uri +
                "&response_type=code&scope=snsapi_base&state=ilaswechatauth#wechat_redirect");

第2步通过code拿到openid

public class WeChat {
public static final String appid ="appid";
public static final String AppSecret="AppSecret";
public static final String OAUTH2_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
String url = WeChat.OAUTH2_URL + "?appid=" + appid  +
                "&secret=" + AppSecret + "&code=" + code + "&grant_type=authorization_code";
        String post = HttpClientUtil.post(url);
        try {
            Map<String, Object> data = JsonUtils.fromJson(post, new TypeReference<Map<String, Object>>() {
            });
            UserAuthData uad = new UserAuthData();
            uad.setAccessToken((String) data.get("access_token"));
            uad.setOpenId((String) data.get("openid"));
            return uad;
        } catch (Exception e) {
            e.printStackTrace();
            throw new SocketException("获取oauthToken失败,request->" + post);
        }
 }

利用HttpClient进行post请求的工具类`

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.HttpEntity;

public class HttpClientUtil {
     private static final String RESP_ENCODING = "UTF-8";

     //发送post请求
	 public static String post(String url) {
			CloseableHttpClient httpclient = HttpClientBuilder.create().build();
			String resStr = "";
			// 创建httppost
			HttpPost httppost = new HttpPost(url);
			httppost.setConfig(config);
			try {
				HttpResponse response;
				response = httpclient.execute(httppost);
				if (response.getStatusLine().getStatusCode()==200) {
					HttpEntity entity = response.getEntity();
					if (entity != null) {
						resStr = EntityUtils.toString(entity, RESP_ENCODING);
					}
				}else{
					System.out.println("请求错误,url:"+url);
				}
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e1) {
				e1.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				// 关闭连接,释放资源
				if (httpclient!=null) {
					try {
						httpclient.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			return resStr;
		}
}	

热门文章

暂无图片
编程学习 ·

操作系统——银行家算法

银行家算法安全性检测C++实现,求安全序列 #include <bits/stdc++.h>using namespace std; const int N = 100;const int total_resources = 3; //资源总数struct process {/* data */int resources_max[total_resources]; //每种资源的总大需求量int resources_a…
暂无图片
编程学习 ·

css实现瀑布流

一行代码实现瀑布流css 的 column-count 属性,将一个盒子分成 x 列,例如 column-count: 2; ,就是将一个div分成 2 列但是排列不是按照数组顺序排序,因为分成2列后是按照顺序从上往下排列,会自动计算,第一列按照数组顺序渲染完才接着渲染第二列,无关紧要 <template>…
暂无图片
编程学习 ·

Mathmatica多项式带余除法代码

几乎没有调用内置函数,除了求多项式最高次数时用了一下 Exponent[] (*解析多项式*) (*将f=a0+a1*x+...+an*x^n解析成{{a0,0},{a1,1},...,{an,n}}的形式*) polyCoefficients[f_] := Module[{rules1 = {c_*base_^power_ -> {c, power},base_^power_ -> {1, power},c_*x_ -…
暂无图片
编程学习 ·

IM即时通讯哇呼--解析

哇呼“Chat”是一款包含android客户端/ios客户端/pc客户端/WEB客户端的即时通讯系统。是由闪电云自主研发,服务器端源码直接部署在客户主机。非任何第三方IM通讯平台! 为各行业门户网站和企事业单位提供“一站式”定制解决方案,打造一个稳定,安全,高效,可扩展的即时通信系…
暂无图片
编程学习 ·

Docker 进阶篇(一)镜像加速器,镜像管理,私有镜像仓库

Docker 进阶篇(一)镜像加速器,镜像管理,私有镜像仓库为Docker 设置存储空间配置镜像加速器镜像管理使用离线镜像搜索镜像通过容器创建对象将本地镜像推送到公网Docker 镜像仓库中创建Docker Register 私有仓库 为Docker 设置存储空间 在使用Docker的时候,经常会遇到Docker…
暂无图片
编程学习 ·

2016 年实验班选拔试题

SUM(10 分) 题目描述:求出在 1 到 N 之间的所有整数的总和。 输入格式:输入包含多组测试数据。每行是一组测试数据,该数据是一个绝对值不 大于 10000 的整数 N。N=0 时,表示输入结束。 输出格式:对于每组测试数据,输出一行,改行包含一个整数,是所有在 1 到 N 之 间的…
暂无图片
编程学习 ·

MySql简单入门_第四篇(2)_存储

5、存储过程:为以后的使用而保存的一条或多条MySql语句的集合存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(…
暂无图片
编程学习 ·

mmdetection训练出现:IndexError: list index out of range 错误

mmdetection训练出现:IndexError: list index out of range 错误文章目录:1 问题分析1.1 尝试解决错误:第一次1.2 尝试解决错误:第二次2 我的问题解决方式我的环境:Ubuntu18.04 TorchVision: 0.6.0 OpenCV: 4.2.0 MMCV: 0.5.5 MMDetection: 2.0.0+d9c8f14 MMDetection Com…
暂无图片
编程学习 ·

数据结构之查找(期末复习)

【知识框架】一、查找的基本概念 1、查找表 查找表是由同一类的数据元素(或记录)构成的集合。集合中的数据元素之间存在着完全松散的关系,因此查找表是一种非常灵便的数据结构。 2、关键字 关键字是数据结构(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)…
暂无图片
编程学习 ·

vue.js 介绍 (一)

Vue.js 是一个 JavaScript 的渐进式框架(可以由浅入深,由简单到复杂的使用。 Vue.js优点:体积小 33K 更高的运行效率 基于虚拟dom, 基于 js进行各种计算,把最终dom计算出来 双向数据绑定 生态丰富,学习成本低 大量基于 vue.js 的 ui框架,常用组件。如Element, IView。Vu…
暂无图片
编程学习 ·

2020.7.1总结

前端知识: API: 判断是否为空: $.common.isEmpty() modal框: $.common.alertError() 弹层组件:layer layer.open({ title:false, type:1, closeBth:true, shadeClose:true,//阴影区域关闭 area:[‘auto’,‘atuo’]//宽,高 }) 以下是一些参数截图:layer组件:web弹层组…
暂无图片
编程学习 ·

神经网络架构搜索——可微分搜索 (Noisy-DARTS)

神经网络架构搜索——可微分搜索 (Noisy-DARTS)动机FairDARTS: Sigmoid函数替换Softmax函数NoisyDARTS:skip-connection注入噪声方法实现如何加噪声?加入怎样的噪声?实验结果架构参数可视化CIFAR-10实验结果ImageNet实验结果消融实验有噪声 vs. 无噪声无偏噪声 vs. 有偏噪…
暂无图片
编程学习 ·

Git上传项目到GitHub

windows上传文件到github的方法 文章目录windows上传文件到github的方法一、创建github的账号:二、安装git:三、上传简单来说就是以下几个命令:Git常见错误与操作:error: src ref spec master does not match any以及failed to push some refs to 。。。解决办法,再来一遍…
暂无图片
编程学习 ·

算法选择判断

目录模拟题判断选择 模拟题利用主定理计算时间复杂度函数的渐进时间复杂度: T(n)=16T(n/4)+n 【T(n)=kT(n / m)+nd k=16,m=4,d=1,有 k>md , T(n)=θ(n2) – T(n)=2T(n/3)+O(n) O(n)的规模是n,在主定理中,k=2,m=3,d=1,因为k<md , T(n)=n 分支限界法在活结点表按照优先…
暂无图片
编程学习 ·

12个高矮不同的人,排队问题。引出卡特兰数(Catalan)

12个高矮不同的人,排队问题。引出卡特兰数(Catalan)。等价问题1等价问题2【解法】 传闻是【阿里巴巴笔试题】:12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?网上看了很多解答,但理解起来仍然费劲。索性自己动手…
暂无图片
编程学习 ·

企业实战--kubernetes(八)---存储(ConfigMap)

一、Configmap简介 Configmap用于保存配置数据,以键值对的形式存储 Configmap资源提供了向Pod诸如配置数据的方法 旨在让镜像和配置文件解偶,以便实现镜像的可移植性和可复用性 典型的使用场景: 填充环境变量的值 设置容器内的命令行参数 填充卷的配置文件创建Configmap的方…