苍穹外卖day6 微信登录 导入商品浏览
微信小程序开发 教程太老了...... 而且是直接导入 哈哈哈 白学家
微信登录

主要逻辑是用HttpClients工具 对项目中DTO封装和VO封装的数据进行存储 说实话没有完全看懂逻辑 自己也没办法复述出来 kimi 1.5助我!
微信小程序开发微信登录流程
-
小程序端获取
code:-
调用
wx.login()接口获取临时登录凭证code。 -
示例代码:
wx.login({ success(res) { if (res.code) { console.log("登录成功,code:", res.code); // 将 code 发送到开发者服务器 } else { console.error("登录失败:", res.errMsg); } } });
-
-
小程序端发送
code到后端服务器:-
使用
wx.request()将code发送到开发者服务器。 -
示例代码:
wx.request({ url: 'https://your-backend-server.com/login', // 替换为你的后端接口地址 method: 'POST', data: { code: res.code }, success(res) { console.log("后端返回的数据:", res.data); } });
-
-
后端服务器调用微信接口获取
openid和session_key:-
使用
HttpClient或其他 HTTP 客户端工具,向微信接口服务发送请求,携带appId、appSecret和code。 -
示例代码(Java):
public String getOpenid(String code) { String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + appSecret + "&js_code=" + code + "&grant_type=authorization_code"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity); JSONObject jsonObject = JSON.parseObject(result); return jsonObject.getString("openid"); }
-
-
后端服务器生成自定义登录态(如
token):-
根据业务需求生成自定义登录态,如
token,并返回给小程序 -
public UserLoginVO wxLogin(UserLoginDTO userLoginDTO) { String openid = getOpenid(userLoginDTO.getCode()); if (openid == null) { throw new LoginFailedException("登录失败"); } User user = userMapper.getByOpenid(openid); if (user == null) { user = User.builder().openid(openid).createTime(LocalDateTime.now()).build(); userMapper.insert(user); } Map<String, Object> claims = new HashMap<>(); claims.put("userId", user.getId()); String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims); return UserLoginVO.builder().id(user.getId()).openid(openid).token(token).build(); }
-
-
小程序端存储登录态:
-
将后端返回的
token存储到本地存储中。 -
示例代码:
wx.setStorageSync('token', res.data.token);
-
-
小程序端后续请求携带
token:-
在后续的业务请求中,携带
token进行身份校验。 -
示例代码:
wx.request({ url: 'https://your-backend-server.com/data', method: 'GET', header: { 'Authorization': 'Bearer ' + wx.getStorageSync('token') }, success(res) { console.log("返回的数据:", res.data); } });
-
后端服务实现思路
控制层(Controller)
-
功能:接收小程序端的请求,调用业务层方法处理业务逻辑,返回结果。
-
实现示例(Java):
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public Result<UserLoginVO> login(@RequestBody UserLoginDTO userLoginDTO) { UserLoginVO userLoginVO = userService.wxLogin(userLoginDTO); return Result.success(userLoginVO); } }
业务层(Service)
-
功能:处理具体的业务逻辑,如调用微信接口获取
openid,生成token,处理用户注册等。 -
实现示例(Java):
@Service public class UserServiceImpl implements UserService { @Autowired private WeChatProperties weChatProperties; @Autowired private UserMapper userMapper; @Autowired private JwtProperties jwtProperties; @Override public UserLoginVO wxLogin(UserLoginDTO userLoginDTO) { String openid = getOpenid(userLoginDTO.getCode()); if (openid == null) { throw new LoginFailedException("登录失败"); } User user = userMapper.getByOpenid(openid); if (user == null) { user = User.builder().openid(openid).createTime(LocalDateTime.now()).build(); userMapper.insert(user); } Map<String, Object> claims = new HashMap<>(); claims.put("userId", user.getId()); String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims); return UserLoginVO.builder().id(user.getId()).openid(openid).token(token).build(); } private String getOpenid(String code) { String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + weChatProperties.getAppid() + "&secret=" + weChatProperties.getSecret() + "&js_code=" + code + "&grant_type=authorization_code"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity); JSONObject jsonObject = JSON.parseObject(result); return jsonObject.getString("openid"); } }
数据访问层(Mapper)
-
功能:与数据库交互,执行增删改查操作。
-
实现示例(Java):
@Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE openid = #{openid}") User getByOpenid(String openid); @Insert("INSERT INTO user (openid, create_time) VALUES (#{openid}, #{createTime})") int insert(User user); }
导入商品浏览

结果到这里发现 他要要求前面很多的内容我没实现 还得从管理端和用户端分别做controller service servicelmpl mapper 以及mapperxml。。。 做了一下午 总算是学会流程了 而且也明白从哪发现错误和问题 优先看开发文档是最正确的选择 通过开发文档的需求一步步看 需要什么参数 返回什么类型 这个方法是post还是put还是get还是delete 每天都是收获 但是还是得快点 好好学
主要内容还是微信登录
更多推荐


所有评论(0)