返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信公众号授权登录的超详细步骤
  • 894
分享到

微信公众号授权登录的超详细步骤

摘要

目录第一步:用户同意授权,获取code第二步:通过code换取网页授权access_token第三步:刷新access_token(如果需要)第四步:拉取用户信息(需scope为 s

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

在确保公众账号拥有授权作用域(scope参数)的权限的前提下,引导关注者打开如下页面:

尤其注意:如果链接的参数顺序不对,授权页面将无法正常访问

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

若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

参考链接(请在微信客户端中打开此链接体验):

尤其注意:跳转回调redirect_uri,应当使用Https链接来确保授权code的安全性。

// scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize
?appid=wx520c15f417810387
&redirect_uri=https%3A%2F%2Fchong.qq.com%2FPHP%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60
&response_type=code
&scope=snsapi_base
&state=123#wechat_redirect

//scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize
?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.blueWEBgame.com%2Foauth_response.php
&response_type=code
&scope=snsapi_userinfo
&state=STATE#wechat_redirect

用户同意授权后

如果用户同意授权,页面将跳转至

redirect_uri/?code=CODE&state=STATE。

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

公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。

// 请求方法
// 获取code后,请求以下链接获取access_token: 
https://api.weixin.qq.com/sns/oauth2/access_token
?appid=APPID // 公众号的唯一标识
&secret=SECRET // 公众号的appsecret
&code=CODE // 填写第一步获取的code参数
&grant_type=authorization_code // 	填写为authorization_code

// 返回说明
// 正确时返回的JSON数据包如下:
{
  "access_token":"ACCESS_TOKEN", // 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
  "expires_in":7200, // access_token接口调用凭证超时时间,单位(秒)
  "refresh_token":"REFRESH_TOKEN", // 用户刷新access_token
  "openid":"OPENID", // 用户唯一标识
  "scope":"SCOPE"  // 用户授权的作用域,使用逗号(,)分隔
}

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

access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。

// 请求方法
// 获取第二步的refresh_token后,请求以下链接获取access_token: 
https://api.weixin.qq.com/sns/oauth2/refresh_token
?appid=APPID // 公众号的唯一标识
&grant_type=refresh_token // 填写为refresh_token
&refresh_token=REFRESH_TOKEN // 填写通过access_token获取到的refresh_token参数

//返回说明
//正确时返回的jsON数据包如下:
{ 
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

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

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

//请求方法
//http:GET(请使用https协议)
https://api.weixin.qq.com/sns/userinfo
?access_token=ACCESS_TOKEN // 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
&openid=OPENID // 用户的唯一标识
&lang=zh_CN // 国家地区语言版本

//返回说明
//正确时返回的JSON数据包如下:
{   
  "openid": "OPENID",
  "nickname": NICKNAME,
  "sex": 1,
  "province":"PROVINCE",
  "city":"CITY",
  "country":"COUNTRY",
  "headimgurl":"https://thirdwx.qloGo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
  "uNIOnid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

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

// 请求方法
// http:GET(请使用https协议) 
https://api.weixin.qq.com/sns/auth
?access_token=ACCESS_TOKEN
&openid=OPENID

示例:

<script>
	// 1、授权
	export default {
		onLoad() {
			this.wx_login();
		},
		methods: {
			//微信登录
			wx_login(){
				let appId= 'wxe1*******2d0d3d';
				let Host = encodeURIComponent('https://ceshi.com/pages/guide/getOpenid');
				console.log(Host);
				window.location.href =`https://open.weixin.qq.com/connect/oauth2/authorize?
				appid=${appId}
				&redirect_uri=${Host}
				&response_type=code
				&scope=snsapi_userinfo
				&state=STATE#wechat_redirect`
			},
		},
	}
	
	// getOpenid页面获取openid
	export default {
		onLoad(option) {
			var arr = window.location.search;
			var code = arr.split('=')[1].split('&')[0];
			this.$http.post("/api/WxPay/getOpenid",{
				code:code
			}).then(res=>{
				if(res.code == 1){
					uni.setStorageSync('openid', res.data.openid);
					this.$goBack(3,'/pages/index/index')
				}
			})
		},
	}
</script>

总结

到此这篇关于微信公众号授权登录的文章就介绍到这了,更多相关微信公众号授权登录内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 微信公众号授权登录的超详细步骤

本文链接: https://lsjlt.com/news/174663.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作