业务背景是公司的运营在几个公司的公众号上投放了广告,当用户点击广告,会发送给用户用于注册的落地页连接。用户注册后会有销售或者客服来联系进一步的转换动作。但是要实现用户信息回传微信,用来让微信分析用户群体,知道啥样的群体转换率更高。三个公众号用户信息获取wxopenId的难点在于获取信息需要用对应公众号的一套公众号配置。如何在springboot中实现三套配置都注入成功,而且来回切换?
设计上,我让前端给我在注册的落地页里加上channel字段,不同的channel投放不同的公众号,通过channel来区分是那个公众号的用户,进而获取对应的公众号配置。实现对应配置的公众号来获取用户微信openId成功~
项目结构如下图
首先对于微信开发需要的微信依赖如下,代码中的WxMpService 就是来至这个包
<!-- wechat -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.通过@Bean和@Primary实现注入不同的配置bean名字 WechatMpConfig.java
package com.zhanglf.config;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
@Component
public class WechatMpConfig {
@Autowired
private WechatLingoAccountConfig wechatLingoAccountConfig;
@Autowired
private WechatPiPiAccountConfig wechatPiPiAccountConfig;
@Autowired
private WechatXiaoBaoAccountConfig wechatXiaoBaoAccountConfig;
@Primary
@Bean("lingoWxMpService")
public WxMpService lingoWxMpService(){
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(lingoWxMpCon