基于websocket实现扫描小程序码登录web页面和微信小程序(双端登录)

SpringBoot+WebSocket+Redis控制二维码失效时间

类似于腾讯文档网页版扫描小程序码登录的模式

在这里插入图片描述
腾讯文档采用的是轮询的方式,我在这里采用websocket的方式.
这里运用了github上基于微信SDK的更易用的SDK weixin-java-miniapp

第一步:导入需要的maven依赖
     <!--springboot整合了websocket-->
	   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>3.3.0</version>
        </dependency>
第二步:配置websocket
@Configuration
public class WebSocketConfig {
   
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
   
        return new ServerEndpointExporter();
    }
}

这里的socketKey对应@PathParam定义的名字,用来识别唯一的socket连接

@Component
@ServerEndpoint(value = "/socketLogin/{socketKey}")
public class LoginSocket {
   

    private static Logger log= LoggerFactory.getLogger(LoginSocket.class);

    private static ConcurrentHashMap<String, Session> sessionMap = new ConcurrentHashMap<>();

    private Session session;

    /**
     * 连接建立成功调用的方法*/
    @OnOpen
    public void onOpen(Session session, @PathParam("socketKey")String socketKey) {
   
        this.session=session;
        log.info("[微信小程序websocket]socketKey:{}",socketKey +"-->建立连接");
        sessionMap.put(socketKey,session);
    }
    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose(@PathParam("socketKey") String socketKey) {
   
        log.info("[微信小程序websocket]socketKey:{}",socketKey +"-->断开连接");
        sessionMap.remove(socketKey);
    }

    public ConcurrentHashMap<String, Session> getSessionMap() {
   

        return sessionMap;
    }
}
第三步:完成socket配置后,正式开始微信小程序开发

开发之前需要准备好申请的小程序APPID SECRET
编写工具类(整合weixin-java-miniapp),这个工具类根据自身需求,灵活设置WxMaInMemoryConfig里面的内容

@Configuration
public class WxMaConfiguration {
   
    private static String appId;

    private static String secret;

    @Value("${weixin.applet_appid}")
    public void setAppId(String appId) {
   
        WxMaConfiguration.appId = appId;
    }

    @Value("${weixin.applet_secret}")
    public void setSecret(String secret) {
   
        WxMaConfiguration.secret = secret;
    }

    private static WxMaService wxMaService=null;

    @Bean
    public Object services(){
   
        WxMaInMemoryConfig config = new WxMaInMemoryConfig();
        config.setAppid(appId);
        config.setSecret(secret);
        wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(config);
        return Boolean.TRUE;
    }
    public static WxMaService getWxMaService(){
   
        return wxMaService;
    }
}
第四步:网页端获取小程序二维码接口

建议小程序二维码里面的scene参数和建立websocket连接的key保持一致
pathStr:小程序登录成功后微信小程序的跳转地址,而不是网页的跳转地址.如:pages/index/index
注意此处:3.3.0之前版本的 weixin-java-miniapp无法通过createWxaCodeUnlimitBytes返回byte字节,返回的都是File文件

 /**
     * 
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值