由于我是后端开发人员 , 因此主要讲解的是后端操作
小程序端需要调用的接口
// 获取 临时登录凭证code ,并回传到开发者服务器。 wx.login()
后端调用接口
微信换取sessionKey和openId和unionId的接口
java 代码如下 ,使用的json序列化工具为 jackson
description="用户信息Dto") (publicstaticclassWxRegisterLoginUserimplementsSerializable { publicstaticlongREDIS_REPEAT_TIMEOUT=5; publicstaticStringREDIS_REPEAT_KEY_PREFIX="redis_repeat_key_"; // 微信获取 sessionKey openId unionId 的后缀privatestaticStringWX_LOGIN_URL="/sns/jscode2session"; privatestaticfinallongserialVersionUID=7658930891407547798L; description="用户唯一标识") ("openid") (privateStringopenId; description="会话密钥") ("session_key") (privateStringsessionKey; description="用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回") ("unionid") (privateStringunionId; description="错误码") ("errcode") (privateIntegererrCode; description="错误详情") ("errmsg") (privateStringerrMsg; publicstaticWxRegisterLoginUserinitByWxCode(Stringcode, StringwxUrl, StringwxAppid, StringwxSecret) { StringbuilderUrl=UrlBuilder.of(wxUrl+WX_LOGIN_URL) .addQuery("appid" , wxAppid) .addQuery("secret" , wxSecret) .addQuery("js_code", code) .addQuery("grant_type" , "authorization_code") .build(); log.info("BusUserDto-wxRegisterLogin-initByWxCode-builderUrl:{}" , builderUrl); StringwxLoginStr=HttpUtil.get(builderUrl); log.info("UserDomainServiceImpl-wxRegisterLogin-initByWxCode-wxLoginStr : {}", wxLoginStr); // 登陆操作WxRegisterLoginUserregisterLoginDto=JacksonUtil.toObject(wxLoginStr, WxRegisterLoginUser.class); Assert.isTrue(registerLoginDto.validateErrorCode(), () ->newBusException(BusErrorCode.WX_REGISTER_LOGIN_INFO_ERROR.getResultCode(), registerLoginDto.getErrMsg())); returnregisterLoginDto; } publicBooleanvalidateErrorCode() { // 微信官方文档 0 代表成功 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.htmlif (StrUtil.isNotEmpty(openId)) { returnBoolean.TRUE; } returnBoolean.FALSE; }
这个时候就能够拿到openId或者unionId去本地数据库查询是否存在该用户了
// 是否注册过Assert.isNull(userService.getUserByOpenId(registerLoginDto.getOpenId()), () ->newBusException(BusErrorCode.WX_REGISTER_REPEAT_ERROR));