公众平台--扫描微信二维码,关注后自动登录

准备

接口配置信息:填写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接口如下(这个方法主要是操作自己的数据库等逻辑代码):

另外,代码有不足之处欢迎指教,谢谢观看!

开放平台的登录请看另外一篇:

经验分享 程序员 微信小程序 职场和发展