马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一 题目引入
我们之前的登岸都是:网页http传来哀求,我们java来做这个哀求的校验。
但是假如微信小步伐登岸,就要用到干系的api来实现。
二 快速入门
1 引入依赖
官方依赖,在内里找符合的,去设置版本号。由于我这里在父工程就设置过了,以是省略
Maven Repository: com.github.binarywang » weixin-java-miniapp (mvnrepository.com)
- <dependencies>
- <dependency>
- <groupId>com.github.binarywang</groupId>
- <artifactId>weixin-java-miniapp</artifactId>
- </dependency>
复制代码
2 设置类
利用微信小步伐api要设置微信小步伐的id和密钥。我们在yml文件设置,并本身设置设置类来读取
- wx:
- miniapp:
- @Data
- @ConfigurationProperties(prefix = "wx.miniapp")
- public class WxConfigProperties {
- private String appId;
- private String secret;
- }
复制代码
3 将微信小步伐对象放入spring中
- package com.atguigu.daijia.customer.config;
- import cn.binarywang.wx.miniapp.api.WxMaService;
- import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
- import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.stereotype.Component;
- @Component
- public class WxConfigOperator {
- @Autowired
- private WxConfigProperties wxConfigProperties;
- @Bean
- public WxMaService wxMaService() {
- WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
- wxMaConfig.setAppid(wxConfigProperties.getAppId());
- wxMaConfig.setSecret(wxConfigProperties.getSecret());
- WxMaService service = new WxMaServiceImpl();
- service.setWxMaConfig(wxMaConfig);
- return service;
- }
- }
复制代码
4 详细实现登岸
service层
实现思绪:前端约定,从前端传来code,传归去用户的id。
我们先用微信小步伐的方法来分析code,得到openid。判定是否是第一次登岸。假如是,则将信息生存到数据库,并返回用户id。假如不是直接返回用户id。
- package com.atguigu.daijia.customer.service.impl;
- import cn.binarywang.wx.miniapp.api.WxMaService;
- import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
- import com.atguigu.daijia.customer.mapper.CustomerInfoMapper;
- import com.atguigu.daijia.customer.mapper.CustomerLoginLogMapper;
- import com.atguigu.daijia.customer.service.CustomerInfoService;
- import com.atguigu.daijia.model.entity.customer.CustomerInfo;
- import com.atguigu.daijia.model.entity.customer.CustomerLoginLog;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import lombok.extern.slf4j.Slf4j;
- import me.chanjar.weixin.common.error.WxErrorException;
- import org.checkerframework.checker.units.qual.A;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- @Slf4j
- @Service
- @SuppressWarnings({"unchecked", "rawtypes"})
- public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, CustomerInfo> implements CustomerInfoService {
- @Autowired
- private WxMaService wxMaService;
- @Autowired
- private CustomerInfoMapper customerInfoMapper;
-
-
- @Autowired
- private CustomerLoginLogMapper customerLoginLogMapper;
- @Override
- public Long login(String code) {
- //1 获取code值,使用微信工具包对象,获取微信唯一标识openid
- String openid = null;
- try {
- WxMaJscode2SessionResult sessionInfo =
- wxMaService.getUserService().getSessionInfo(code);
- openid = sessionInfo.getOpenid();
- } catch (WxErrorException e) {
- throw new RuntimeException(e);
- }
- //2 根据openid查询数据库表,判断是否第一次登录
- //如果openid不存在返回null,如果存在返回一条记录
- //select * from customer_info ci where ci.wx_open_id = ''
- LambdaQueryWrapper<CustomerInfo> lqw = new LambdaQueryWrapper<>();
- lqw.eq(CustomerInfo::getWxOpenId, openid);
- CustomerInfo customerInfo = customerInfoMapper.selectOne(lqw);
- //3 如果第一次登录,添加信息到用户表
- if(customerInfo == null) {
- customerInfo = new CustomerInfo();
- customerInfo.setNickname(String.valueOf(System.currentTimeMillis()));
- customerInfo.setAvatarUrl("https://oss.aliyuncs.com/aliyun_id_photo_bucket/default_handsome.jpg");
- customerInfo.setWxOpenId(openid);
- customerInfoMapper.insert(customerInfo);
- }
- //4 记录登录日志
信息 - CustomerLoginLog customerLoginLog = new CustomerLoginLog();
- customerLoginLog.setCustomerId(customerInfo.getId());
- customerLoginLogMapper.insert(customerLoginLog);
- //5 返回用户id
- return customerInfo.getId();
- }
- }
复制代码
|