您当前的位置:首页 > 实时热点

微信公众登录,

发布时间:2022-04-28 16:58:47

导读: 如果用户在微信客户端访问第三方网页,那么公众号可以通过微信网页授权机制获取用户的基本信息,进而实现业务逻辑。 1第一步:用户同意授权并获得代码2第二步:用代码换取网页access_token的授权3第三步:刷新access_to。

微信公众登录,

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

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

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

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

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

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

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

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

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

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

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

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该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&code=CODE&grant_type=authorization_code

第三步:刷新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

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

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

请求方法

http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

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

请求方法

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

一、配置授权的域名

在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;这里我们用【微信公众平台测试账号】做测试,具体步骤如下【开发者工具】->【公众平台测试账号】->【网页授权获取用户基本信息】

微信公众登录,

​点击【修改】进入页面这里我们需要配置我们的允许被授权的域名,配置好后点击【确认】保存

微信公众登录,

​这里我用了NATAPP把本机地址映射到外网域名,所以这里我只能配置我的外网域名

微信公众登录,

​二、编写我们的跳转授权页面接口

这里我们新建一个Controller,在最后记得一定要redirect重定向

微信公众登录,

​说明:上面我们是采用前后端分离的方式,如果不是前后端分离注解改成@Controller最后返回成String类型,代码改成

return "redirect:"+url;

在上面,我们需要设置一个回调方法,在这个回调方法里,我们能获取到授权后返回给我们的参数

微信公众登录,

​说明:如果这里希望直接跳转到页面显示,跟上面一样@RestController注解改成@Controller注解,返回类型改成String(对应自己的页面即可)

WxAuthController.java

package com.xu.wemall.controller.weixin;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.xu.wemall.commons.constants.WXConstant;import io.swagger.annotations.Api;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.net.URLEncoder;/** * 类名称: LoginController * 类描述: 与微信对接登陆验证 * * @author RonnieXu * 创建时间:2017年12月5日上午10:52:13 */@Slf4j@RestController@Api(tags = "授权登录接口")@RequestMapping(value = "/wxAuth")public class WxAuthController { @Autowired private RestTemplate restTemplate; @RequestMapping("/login") public void wxLogin(HttpServletResponse response) throws IOException { //请求获取code的回调地址 //用线上环境的域名或者用内网穿透,不能用ip String callBack = "http://jialeyuan.nat300.top/wxAuth/callBack"; //请求地址 String url = "https://open.weixin.qq.com/connect/oauth2/authorize" + "?appid=" + WXConstant.TEST_APPID + "&redirect_uri=" + URLEncoder.encode(callBack) + "&response_type=code" + "&scope=snsapi_userinfo" + "&state=STATE#wechat_redirect"; //重定向 response.sendRedirect(url); } // 回调方法 @RequestMapping("/callBack") public void wxCallBack(HttpServletRequest request,HttpServletResponse response) throws IOException { String code = request.getParameter("code"); //获取access_token String url = "https://api.weixin.qq.com/sns/oauth2/access_token" + "?appid=" + WXConstant.TEST_APPID + "&secret=" + WXConstant.TEST_APPSECRET + "&code=" + code + "&grant_type=authorization_code"; String result = restTemplate.getForObject(url, String.class); System.out.println("请求获取access_token:" + result); //返回结果的json对象 JSONObject resultObject = JSON.parseObject(result); //请求获取userInfo String infoUrl = "https://api.weixin.qq.com/sns/userinfo" + "?access_token=" + resultObject.getString("access_token") + "&openid=" + resultObject.getString("openid") + "&lang=zh_CN"; String resultInfo = restTemplate.getForObject(infoUrl, String.class); //此时已获取到userInfo,再根据业务进行处理 log.info("请求获取userInfo:{}", resultInfo); }}

三、测试

我们用【微信开发者工具】进行测试(不能用PC浏览器,微信公众号监测到是PC浏览器会显示不支持对此发送此请求)

微信公众登录,

​在【微信开发者工具】地址栏中输入Controller中的第一个requestMapping请求http://jialeyuan.nat300.top/wxAuth/login,回车发送请求

微信公众登录,

​可以看到页面发生了跳转,页面出现了授权提示文字

微信公众登录,

​同时,我们的控制台也已经成功获取到了授权的用户信息

微信公众登录,

​至此整个调用全部走通,谢谢大家,下回再见!

总结:以上内容就是对于微信公众登录,的详细介绍,文章内容部分转载自互联网,希望对您了解微信公众登录有帮助和参考的价值。

声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。
标签:授权 获取 公众 网页 请求
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
热门点击
  • 小正太牛奶灌溉记,
  • adidas鞋,황진이무료야동
  • 流量君电影下载安装,用流量下载电影
  • 老人去世前拉屎对后代,老人临终前拉屎对后代有什么
  • 什么是美容,
  • 主刀医生一个月的收入,三甲医院主刀医生一个月的收
  • 遮天大帝实力排行,遮天大帝实力排行前50
  • 武汉女子联系乐翠玲,
  • 新闻结构的五部分,新闻结构的五部分包括
  • 金钱草图片和功效,金钱草图片和功效视频
  • 标签云
    鲁能队   期足彩   匹克   督战   德怀特   更衣   蒂安   压阵   到会   吃惊   幼年   热血沸腾   马基   此时此刻   急于   埃托奥   提供各种   勃列日涅夫   农博会   节衣缩食   疯魔   拿了   世界大学生运动会   诺布尔   教宗   同组   卡德罗夫   里尔克   振奋   大族   我看过   战前   都将   低估   这届   幕僚   队医   有约   图瓦   兰卡   亮出   奇耻大辱   讲理   啦啦队员   望而生畏   新华社发   意大利杯   独立日   仪仗队   数码产品   拉希德   伢子   抢下   无果   染红   克瑞   失单   负于   炮轰   福井   征召   养伤   合围   十件   三强   勃朗宁   义无反顾   北体大   运筹帷幄   萨利   苦练   哈姆   花样游泳   大官   以弱胜强   体育明星   马路上   限令   十强   蓄势待发   高度评价   士气   圆月   好人家   策应   弗拉门   高居   合同期   民宅   披甲   中国体育   迷们   怎能不   上蹿下跳   伯顿   北京奥运   要她   一个女孩   有一套   施压
    大爱生活网 | 网站内容来自网络,如有侵权请联系我们,立即删除! | 沪ICP备15034965号