微信扫码 - 关注公众号后网站自动注册并登录的实现
在自己网站上点击微信登录,网站自己弹出一个二维码、扫描二维码后弹出公众号的关注界面、只要一关注公众号网站自动登录、第二次扫描登录的时候网站直接登录。
注:需先准备一个已经认证过的公众号
一.由于我们自己服务,需要接管微信服务器的推送,所以需要在微信公众号后台配置服务器通知地址
如上图,需要配置这三项,请注意第一个,服务器地址(url)非常关键,后续微信推送的事件都会进此接口。
但是正常开发环境测试起来都非常费劲,微信访问不到你本地的代码。这边我用的花生壳做的内网穿透,直接就可以访问到本地电脑,开发调试相对方便。
注:上图设置微信会发送一个请求到你的服务器进行验签,验签成功才能设置成功,上代码:
//设置或修改服务器地址验签方法(微信会发送get请求)注:下方会有一个地址相同的post接口用于接收后续微信推送事件
@RequestMapping(value = {
"/token.do" }, method = {
RequestMethod.GET })
public String tokenGet(final HttpServletRequest request, final HttpServletResponse response) {
String resultEchostr = "error";
try {
// 微信加密签名
final String signature = request.getParameter("signature");
// 时间戳
final String timestamp = request.getParameter("timestamp");
// 随机数
final String nonce = request.getParameter("nonce");
// 随机字符串
final String echostr = request.getParameter("echostr");
if (timestamp != null && nonce != null) {
//此处token应与上图用于验签的token相同才能验签成功,否则会出现token认证失败
final String[] sortStr = {
timestamp, nonce, DWSurveyConfig.DWSURVEY_WEIXIN_SERVER_TOKEN };
final String str = SHA1.sortStr(sortStr);
final String sha1_0 = SHA1.getSha1(str);
if (sha1_0.equals(signature)) {
resultEchostr = echostr;
}
}
response.getWriter().write(resultEchostr);
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
二.相关接口调式
1.获取access_token
调用微信接口获取access_token,请求为get:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET.这里的appid和secret就是上面"基本配置"中公众号开发信息的内容.正常情况下,微信会返回下述JSON数据包给公众
{“access_token”:“61_ZY9o2E1YnN_fZFK6XjR26J9ahssKTfYQXN2Eb_vuHH3VckYGEnHMGOX6vqQieini47Og3M-loDwHKHf89OEwBVhsI2kOO7_NNVnd1Nhdn9e1o0gDkKSfg4LO08BpKw1Z-4b-tllwvrFs3kTkKNKhAFAGJG