微信公众号平台单点登录开发

微信公众号平台单点登录开发

微信公众号平台地址:

https://mp.weixin.qq.com/

公众平台服务号、订阅号、企业微信以及小程序的相关说明地址(区别):

https://kf.qq.com/faq/120911VrYVrA130805byM32u.html

不同类型的微信公众号接口权限:

https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Explanation_of_interface_privileges.html

注:订阅号不能自定义网站链接,只能用微信自己的链接地址。

单点登录流程

微信公众号单点登录流程,这里主要是认证后的服务号,不注册公众号也可以通过测试账号做测试

只有服务号能获取用户基本信息(不过能获取的信息有限):

https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId

对比企业微信能获取的用户信息:

https://work.weixin.qq.com/api/doc/90001/90143/90332

一般公司有自己的服务号或企业号,要对外提供Web服务,配置自己的H5网站,必须是认证后的服务号。

测试账号配置

微信开发平台中提供了测试开发功能,测试开发的时候,不需要注册公众号,只是测试,而且开放所有权限。

如果有公众号账号(订阅号或者服务号都可以)
【开发】菜单中找到【开发者工具】
然后找到【公众平台测试账号】
没有公众号也可以直接用网址进入
https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

微信登录

5

配置消息接口,和js的安全域名,这里可以拿到测试的appID和appSecret,这两个是接口调用必需的。

配置网页授权登录,这个是用于单点登录的,一定要配置。

7

在微信开发者工具中测试的话可以用hosts配置本地的域名或者IP地址,正式环境只支持域名。

8

正式配置

要使用正式环境配置,需要用到服务号且必须认证通过的

绑定微信开发者

绑定微信开发者:

1

配置appID和appSecret

【开发】的【基本配置】中可以配置appID和appSecret,appSecret只会出现一次,需要复制保存下来,不然就只能重置生成了。

配置消息服务需要的服务器地址:

授权网页登录

授权后配置网页登录授权(必须是认证后的服务号):

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

配置REDIRECT_URI对应的域名,否则不能正常单点登录跳转。

【设置】》【公众号设置】》【功能设置】

网页授权域名需要下载这个txt文件放到根目录才能认证通过。

认证后在这里配置跳转域名,对应REDIRECT_URI

授权路径(上面配置的就是REDIRECT_URI的域名):

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

获取code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

配置IP白名单

没有配置Ip白名单,不能调用接口

9

没有配置Ip白名单调用接口报错:

错误代码:40164, 错误信息:invalid ip 116.214.32.226 ipv6 ::ffff:116.214.32.226, not in whitelist rid: 607002a4-787b5f8f-68776f86,微信原始报文:{"errcode":40164,"errmsg":"invalid ip 116.214.32.226 ipv6 ::ffff:116.214.32.226, not in whitelist rid: 607002a4-787b5f8f-68776f86"}

开发代码

目前可以使用第三方库来访问:

Github地址:https://github.com/Wechat-Group/WxJava

开发文档参考:https://github.com/Wechat-Group/WxJava/wiki/%E5%85%AC%E4%BC%97%E5%8F%B7%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3

引入依赖并使用

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp</artifactId>
    <version>${weixin-java-mp.version}</version>
</dependency>

接口调用获取用户信息:

String code = ""; // 前台跳转带过来的code,用于获取用户信息,code只能用一次
String appId = "wxxxxxxxxxxxxxxxx";
String appSecret = "4afa1xxxxxxxxxxxxxxxxxxxxxx";
WxMpService wxMpService = new WxMpServiceImpl();
WxMpDefaultConfigImpl wxMpConfigStorage = new WxMpDefaultConfigImpl();
wxMpConfigStorage.setAppId(appId);
wxMpConfigStorage.setSecret(appSecret);
wxMpService.setWxMpConfigStorage(wxMpConfigStorage);
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, "zh_CN");
System.out.println(wxMpUser);

WxMpOAuth2AccessToken中已经包含有openId,可以直接用于用户关联和单点登录,不用再次调用获取WxMpUser,首次注册时可能需要获取WxMpUser

如果已经绑定了openID到用户,可以用OpenId单点登录了。

sns/userinfo和cgi-bin/user/info区别

注意:这里使用的是sns/userinfo接口,这个接口是授权模式必须是,否则获取报错
公众号获取用户信息有两个地址:
关注用户可以用:
https://api.weixin.qq.com/cgi-bin/user/info

针对未关注的用户也可以,不过需要用户授权:
https://api.weixin.qq.com/sns/userinfo

上一篇
下一篇