微信小程序登录授权(直接可用)

在这里插入图片描述

第一步:获取code
小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key。

//用户小程序注册,登录,授权操作(只要将自己的业务逻辑加在里面就可以)

public class test {

//用户小程序注册,登录,授权操作

private Map<String, Object> login(JSONObject data, Map<String, Object> resultMap, 
Map<String, Object> dataMap, Map<String, SystemProperty> systemPropertyMap) throws ParseException {
    User user = null;
    boolean paramError = false;
    boolean isNewUser = false;
    
    String code = data.getString("code");
    
    String encryptedData = data.getString("encryptedData");
    
    String iv = data.getString("iv");
    
    String appId = ((SystemProperty)systemPropertyMap.get("APP_ID")).getPropertyValue();
    
    String appsecret = ((SystemProperty)systemPropertyMap.get("APPSECRET")).getPropertyValue();
    
    String sessionKey = null;
    
    String openId = null;
    JSONObject jsonObject = null;
    
    dbUser = this.userService.getUserByOpenId(openId);
    if (dbUser != null) {
        jsonObject = new JSONObject();
        openId = dbUser.getOpenId();
        sessionKey = this.userService.getSessionKey(String.valueOf(dbUser.getUserId()));
    } else {
        jsonObject = this.weChatUtilGetSessionKeyOropenid(code, appId, appsecret);
        sessionKey = jsonObject.getString("session_key");
        openId = (String)jsonObject.get("openid");
        //注册用户
        user = new User();
        user.setOpenId(openId);
        user.setUserName("");
        user = userService.createUser(user, data, dataMap, systemPropertyMap, sessionKey);
        String key = user_session_key + userId;
        redisClient.setex(key, Constants.EXPIRE_DATE, sessionKey);
        //服务端需要返回自定义登录态给前端,不能返回SessionKey
        dataMap.put("token", Constants.REQUESR_TOKEN); 
    }
    if (null != jsonObject) {
        User referrerUser;
        boolean isUpdate = false;
        if (StringUtils.isNotBlank(encryptedData) && StringUtils.isNotBlank(iv) && StringUtils.isNotBlank(sessionKey)) {
            try {
                this.logger.info("uid" + dbUser.getUserId() + "sessionKey" + sessionKey);
                user = WeChatUtil.getUserInfo(encryptedData, sessionKey, iv);
                if (dbUser.getUserId() != 0) {
                    user.setUserId(dbUser.getUserId());
                    isUpdate = true;
                    dbUser.setUserHeadImg(user.getUserHeadImg());
                    dbUser.setUserName(user.getUserName());
                    this.redisClient.setObject("users_login_" + openId, dbUser, 7200);
                }
            } catch (Exception var31) {
                this.logger.error("授权失败!!" + dbUser.getUserId());
            }
        }
        //修改用户信息
        user = this.userService.updateUser(isUpdate, user, dbUser, data, dataMap, systemPropertyMap, sessionKey);
        dataMap.put("uid", user.getUserId());
        dataMap.put("userName", EscapeUnescapeUtil.escape((String)user.getUserName()));
        dataMap.put("headImg", user.getUserHeadImg());
        dataMap.put("token", "AHHGJKMLLLJ$%%^^&223!");
        resultMap.put("result", 0);
        resultMap.put("reason", "");
        resultMap.put("data", dataMap);
        resultMap.put("command", 100);
    } else {
        resultMap.put("data", dataMap);
        resultMap.put("result", 0);
        resultMap.put("reason", "openId error!");
    }
}
	return null;

}

/**
*通过 code ,appId,appsecret 获取 openid 和 session_key

  • @param
  • @return JSONObject sessionkey and unionid
    **/

public static JSONObject getSessionKeyOropenid(String code, String appId, String appsecret) {

String requestUrl1 = “https://api.weixin.qq.com/sns/jscode2session?appid=” + appId + “&secret=”+ appsecret + “&js_code=” + code + “&grant_type=authorization_code”;

  try {
  JSONObject jsonObject = JSON.parseObject(HttpUtil.sendPost(requestUrl1, "UTF-8"));
  String openId = (String) jsonObject.get("openid");
  logger.info("<----------------------------------------------------->");
  logger.info("normalCode:" + code);
  logger.info("requestUrl1:" + requestUrl1);
  logger.info(jsonObject.toString());
  logger.info("<----------------------------------------------------->");
  return jsonObject;

} catch (Exception e) {
logger.error(“An exception was found while getting the sessionkey”, e);
e.printStackTrace();
return null;
}**

/
* Decrypt user sensitive data and retrieves user data
获取用户信息
* @param sessionKey, The secret key
* @param encryptedData, Encrypted full user data
* @param iv, The offset of the encryption algorithm
* @return Map<String, Object>
* @author WY
/

**public static User getUserInfo(String encryptedData, String sessionKey, String iv) {
try{

		AES aes = new AES();
		byte[] resultByte = aes.decrypt(encryptedData, sessionKey, iv);
		if (resultByte != null && resultByte.length > 0) {
			String result = new String(resultByte, "UTF-8");
			JSONObject jsonData = JSON.parseObject(result);
			User user = new User();
			user.setOpenId(jsonData.getString("openId"));
			user.setUserName(jsonData.getString("nickName"));
			user.setUserGender(Integer.parseInt(jsonData.getString("gender")));
			user.setUserCity(jsonData.getString("city"));
			user.setUserProvince(jsonData.getString("province"));
			user.setUserCountry(jsonData.getString("country"));
			user.setUserHeadImg(jsonData.getString("avatarUrl"));
			user.setUnionId(jsonData.getString("unionId"));
			return user;
		}
	} catch (Exception e) {

// e.printStackTrace();
logger.error("", e);
return null;
}
return null;
}**

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值