【微信】网页授权,获取CODE,OPENID,

本文介绍如何配置微信公众号的授权回调域名,并详细解析了利用OAuth2.0进行网页授权的整个流程,包括获取code、通过code换取网页授权access_token等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改微信授权回调域名

1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的开发者中心页配置授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;

授权回调域名配置规范为全域名

2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://qq.com无法进行OAuth2.0鉴权

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

第一步:用户同意授权,获取CODE

   
参数是否必须说明
appid公众号的唯一标识
redirect_uri授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type返回类型,请填写code
scope应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数 

注:回调链接一定要urlencode,不然识别不出


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

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

请求方法

获取code后,请求以下链接获取access_token: 
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code


参数说明

参数是否必须说明
appid公众号的唯一标识
secret公众号的appsecret
code填写第一步获取的code参数
grant_type填写为authorization_code

返回说明
 

正确时返回的JSON数据包如下:

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE",
   "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}


 
参数描述
access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope用户授权的作用域,使用逗号(,)分隔
unionid只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)


	public static Authorize getAuthorize(String code){
		Authorize authorize  = null;
		try{
		Token token = Token.getInstance();
		HttpClient hc = new HttpClient();
		Map<String, String> params = new HashMap<String, String>();
		params.put("appid", token.getAppid());
		params.put("secret", token.getSecret());
		params.put("code", code);
		params.put("grant_type", "authorization_code");
		String url = "https://api.weixin.qq.com/sns/oauth2/access_token";
		authorize =  hc.post(url, params, new JsonParser<Authorize>(Authorize.class));
		} catch (Exception e) {
			log.error("getOpenid erro message:" + e.getMessage(), e);
		}
		return authorize;
	}
	public class Authorize {
		private String errcode;
		private String errmsg;
		private String access_token;
		private String expires_in;
		private String refresh_token;
		private String openid;
		private String scope;
		// get set
	}
注:HttpClient 是被封住带工具类。我们获取openid,和相应带用户绑定,那么接下来就可以实现发送消息.


### Java 实现微信网页授权获取 Code 为了实现微信网页授权并成功获取 `code` 参数,在Java项目中通常遵循特定的流程。此过程涉及创建一个重定向URL,该URL引导用户微信登录页面,并允许他们同意权限请求。一旦用户授予访问权,则会跳转回指定的应用回调地址,并附带临时票据——即`code`参数。 #### 创建用于获取Code的链接 构建这个链接时需注意几个关键部分: - **AppID**: 应用程序唯一标识符。 - **redirect_uri**: 用户确认授权后将被重定向至此URI。请注意对特殊字符进行URLEncode处理。 - **response_type**: 设置为`code`表示期望返回的是授权码。 - **scope**: 授权作用域,对于静默授权可设为`snsapi_base`仅获取OpenID;若要获得更多信息则应设置成`snsapi_userinfo`。 - **state**: 可选状态参数,可用于保持前后端交互的一致性和安全性校验[^1]。 下面是一个简单的例子展示如何拼接这样的URL字符串: ```java import java.net.URLEncoder; public class WeChatAuthUrlBuilder { private static final String APP_ID = "your_app_id"; private static final String REDIRECT_URI_BASE = "http://example.com/callback"; // 替换成自己的服务器域名下的路径 public static void main(String[] args) throws Exception{ StringBuilder urlBuilder = new StringBuilder(); urlBuilder.append("https://open.weixin.qq.com/connect/oauth2/authorize?"); urlBuilder.append("appid=").append(APP_ID); urlBuilder.append("&redirect_uri=").append(URLEncoder.encode(REDIRECT_URI_BASE, "UTF-8")); urlBuilder.append("&response_type=code"); urlBuilder.append("&scope=snsapi_userinfo"); // 或者 snsapi_base 如果只需要基础信息 urlBuilder.append("&state=STATE#wechat_redirect"); System.out.println(urlBuilder.toString()); } } ``` 这段代码将会打印出完整的OAuth 2.0授权链接,可以将其嵌入到HTML中的<a>标签作为超链接提供给前端使用,当点击时就会触发整个授权流程[^3]。 完成这一步骤之后,下一步就是等待来自微信平台携带`code`参数的回调通知了。此时应该已经在项目的相应位置设置了接收这些回调消息的服务端逻辑来解析传来的GET请求参数列表,并从中提取所需的`code`值以便后续操作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值