准备的材料
申请小程序
- 经营许可证
- 身份证
- 对公账户或
- 邮箱(没有注册过小程序/公众号等)
小程序上线
- HTTPS域名
登录
流程图
- 开发者服务器调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 会话密钥 session_key。
代码展示
/**
* 小程序登录
*
* @return
*/
@PostMapping("/applet/login")
public AjaxResult appletLogin(@Param("code") String code) {
AjaxResult ajaxResult = new AjaxResult();
String result = "";
String openId = "";
try {
result = HttpUtils.sendGet("https://api.weixin.qq.com/sns/jscode2session",
String.format("appId=%s&secret=%s&js_code=%s&grant_type=%s",
appletConfig.getAppId(),
appletConfig.getAppSecret(),
code,
"authorization_code"));
Map<String, String> appletResult = JSON.parseObject(result, new TypeReference<Map<String, String>>() {
});
openId = appletResult.get("openid");
// 判断该用户是否存在
if (StringUtils.isEmpty(openId)) {
return AjaxResult.error(HttpStatus.ERROR, "网络不稳定,请联系管理员或稍后重试");
}
String unique = sysUserService.checkOpenIdUnique(openId);
if (UserConstants.UNIQUE.equals(unique)) {
// 插入用户
SysUser sysUser = new SysUser();
sysUser.setUserName("BJ" + System.currentTimeMillis());
sysUser.setNickName("BJ" + System.currentTimeMillis());
sysUser.setOpenId(openId);
sysUserService.insertUser(sysUser);
}
} catch (Exception e) {
e.printStackTrace();
}
ajaxResult.put(Constants.OPEN_ID, openId);
// 授权代码省略...
return ajaxResult;
}
AjaxResult是封装的结果类