快速实现微信公众号认证授权开发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速实现微信公众号认证授权开发相关的知识,希望对你有一定的参考价值。

参考技术A 最近做微信公众号和小程序相关的开发。大家都知道微信开发调试起来比较麻烦,因此推荐给大家一个内网穿透的工具NATTAPP。附上官网一分钟快速上手地址:https://natapp.cn/article/natapp_newbie.。在这个平台上设置好一个域名。通过此域名可以映射到本地。 

微信开发之前首先要有一个经过备案的域名 比如 http://sjx.s2.natapp.cc

授权步走如下 

放到项目resource/static 目录下

在浏览器上访问 http://sjx.s2.natapp.cc/MP_verify_CchqzOKsBbk7hOMf.txt 会得到一串数字

返回公众号设置会看到网页授权域名上已经有值了。此时域名已经备案成功。

认证授权开发

demo 使用的是别人封装好的微信工具类可以实现快速开发

github地址: https://github.com/Wechat-Group/weixin-java-tools

新建url 配置类

yml 配置

编写授权接口

@GetMapping("/authorize")

public Stringauthorize(@RequestParam("returnUrl") String returnUrl)

String url =urlConfig.getWechatMpAuthorize() +"/sell/wechat/userInfo";  //用户授权之后回调地址

//方法执行完会重定向

    String redirectUrl =wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_USER_INFO,

            URLEncoder.encode(returnUrl));

    return "redirect:" + redirectUrl;



授权成功之后回调地址接口

/**

* 当用户授权过之后会回调这个方法,这个方法可以获取用户的openid

**/

@GetMapping("/userInfo")

public StringuserInfo(@RequestParam("code") String code, @RequestParam("state") String returnUrl)throws Exception

WxMpOAuth2AccessToken wxMpOAuth2AccessToken =new WxMpOAuth2AccessToken();

    try

wxMpOAuth2AccessToken =wxMpService.oauth2getAccessToken(code);

    catch (WxErrorException e)

e.printStackTrace();

        log.error("微信网页授权", e.getMessage());

        throw new SellException(ResultEnum.WECHAT_MP_ERROR);

   

WxMpUser wxMpUser =wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);

    wxMpUser.getNickname();

    String openId = wxMpOAuth2AccessToken.getOpenId();

    return "redirect;" + returnUrl +"?openid=" + openId;



已上两个接口便完成了授权认证获取用户信息

测试

打开微信公众平台

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

加粗斜体的是需要替换的。

个人测试地址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的appid&redirect_uri=微信上备注的域名/sell/wechat/authorize?returnUrl=https://www.baidu.com&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

将这些地址发送到微信上的微信传输助手

在手机上点击地址就会回调预先设置好的授权地址

授权完成之后就会回调这个设置好的获取用户信息的接口

微信昵称和openId也已经获取到了

微信公众平台开发教程_OAuth2.0认证

一.微信授权认证

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

关于网页授权的两种scope的区别说明

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。 

3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。 

关于网页授权access_token和普通access_token的区别

1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息; 

2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。 

关于特殊场景下的静默授权

1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知; 

2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。 

具体而言,网页授权流程分为四步:

1、引导用户进入授权页面同意授权,获取code 

2、通过code换取网页授权access_token(与基础支持中的access_token不同) 

3、如果需要,开发者可以刷新网页授权access_token,避免过期 

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) 

以上摘自官方开发文档。点击这里查看。

个人理解就是一旦用户在微信公众平台上进行操作,例如回复关键字,点击菜单或者图文消息时,均会触发认证。此时开发者需要引导用户打开如下地址来获取code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。 

 

以上是关于快速实现微信公众号认证授权开发的主要内容,如果未能解决你的问题,请参考以下文章

快速实现微信公众号认证授权开发

使用NodeJs开发微信公众号

教你3分钟快速开发微信公众号[订阅号][服务号]

教你3分钟快速开发微信公众号[订阅号][服务号]

如何使用jsp开发微信公众平台,或者使用java语言开发公众平台

微信公众平台 微信网页授权