公众平台--扫描微信二维码,关注后自动登录
准备
接口配置信息:填写url和token
url作用1:
url作用2:
所以该url实际可以分成两个路径一样请求方式不一样的接口。
注意:
url的域名必须是可以外网访问的到的,也可以使用内网穿透工具,如natapp。 配置失败和成功都会有相应的提示!
配置成功如图所示:
写代码
<一> 获取二维码代码:
涉及的PublicUtil工具类如下(重要):
<二> 检测是否登录:
<三> 检查回调:上面的接口配置信息的url接口:get请求回调
这里涉及到SignUtil工具类如下:
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; /** * 验证签名 * */ public class SignUtil { /** * 验证签名 * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String signature, String timestamp, String nonce) { String[] arr = new String[] { "123456", timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典排序 Arrays.sort(arr); StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); // 将三个参数字符串拼接成一个字符串进行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // 将sha1加密后的字符串可与signature对比 return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } /** * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将字节转换为十六进制字符串 * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; } }
上面调用的publicThirdLoginService.publicWxCallback的代码如下:
上面涉及的checkLoginInfo接口如下(这个方法主要是操作自己的数据库等逻辑代码):
另外,代码有不足之处欢迎指教,谢谢观看!
开放平台的登录请看另外一篇:
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
支付宝小程序获取手机号授权