微信小程序授权登录获取openid

public class VipUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 微信openid
     */
    private String openid;


    /**
     * 昵称
     */
    private String nickName;

    /**
     * 头像
     */
    private String headImg;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createAt;

    /**
     * 修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateAt;

    /**
     * 密码
     */
    private String password;


}

上述代码是用来存放用户信息的实体类

public class WXReturnAuthData implements Serializable {

    /**
     * 用户唯一标识
     */
    private String openid;

    /**
     * 会话密钥
     */
    private String session_key;

    /**
     * 用户在开放平台的唯一标识符
     */
    private String unionid;

    /**
     * 错误码
     */
    private int errcode;

    /**
     * 错误信息
     */
    private String errmsg;
}

上述代码是提前写好的实体类,用来存储微信返回的数据转化json

public JSONObject userInfo( JSONObject postParams) {

        logger.info("===小程序端上送的用户数据为===:"+postParams);
        String code = postParams.getString("code");
        JSONObject rawDataJson = postParams.getJSONObject("raw_data");
        //用户昵称
        String wxNickName = rawDataJson.getString("nickName");
        //头像图片地址
        String wxAvatarUrl = rawDataJson.getString("avatarUrl");

        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + WXConfigConstant.appid + "&secret=" + WXConfigConstant.secret + "&js_code=" + code + "&grant_type=authorization_code";

        RestTemplate restTemplate = new RestTemplate();

        String res = restTemplate.getForObject(url,String.class);

        //微信返回的数据为:{"session_key":"ahfoashohfd","openid":"asfoiashfoasihfohasf"}
        logger.info("微信返回的数据为:"+res);

        WXReturnAuthData wxRet = JSONObject.parseObject(res, WXReturnAuthData.class);
        logger.info("微信数据转化json:"+wxRet);

        if (wxRet == null) {
        	//抛出 授权错误,请获取授权或重试
            throw new UserDefinedException(ResultTypeEnum.WX_AUTH_ERROR);
        }
        if (0 != wxRet.getErrcode()) {
        	//抛出 授权错误,请获取授权或重试 以及错误信息
            throw new UserDefinedException(ResultTypeEnum.WX_AUTH_ERROR, WXConfigConstant.WX_CODE_MSG_MAP.get(wxRet.getErrcode()+""));
        }

        String openid = wxRet.getOpenid();

        VipUser vipUser = new VipUser();
        vipUser.setOpenid(openid);
        vipUser.setNickName(wxNickName);
        vipUser.setHeadImg(wxAvatarUrl);
        vipUser.setCreateAt(new Date());
        vipUser.setUpdateAt(new Date());


        VipUser user = vipUserService.queryByOpenId(vipUser.getOpenid());
        if (user == null ){
            vipUserService.save(vipUser);
        }else {
            if(!StringUtils.isEmpty(userPhone) || !StringUtils.isEmpty(wxNickName)){
                if(!StringUtils.isEmpty(userPhone)){
                    user.setPhoneNum(userPhone);
                }
                if(!StringUtils.isEmpty(wxNickName)){
                    user.setNickName(wxNickName);
                }
                vipUserService.saveOrUpdate(user);
            }

            vipUser = user;
        }
        JSONObject userJson = new JSONObject();
        
        userJson.put("id",id);
        userJson.put("avatar",vipUser.getHeadImg());
        userJson.put("openid",vipUser.getOpenid());
        userJson.put("user_nickname",vipUser.getNickName());

        return  userJson;
    }

上述代码中,WXConfigConstant.appid是提前写好的常量小程序ID,WXConfigConstant.secret是提前写好的常量小程序秘钥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值