微信公众号开发之配置菜单跳转到自定义页面

需求:

用户点击公众号菜单跳转到自定义带引流码的链接

公众号相关文档:

网页授权 | 微信开放文档

大致流程: 

1.在公众号菜单配置链接:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXXXXXX&redirect_uri=https%3A%2F%2F测试域名%2Fws_dabai%2Fweixin%2Fcallback%2FredirectInsurePage&response_type=code&scope=snsapi_userinfo&state=XXXXXXXXXXXXhttps://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXXXXXX&redirect_uri=https%3A%2F%2Fopen.anyitech.ltd%2Fws_dabai%2Fweixin%2Fcallback%2FredirectInsurePage&response_type=code&scope=snsapi_userinfo&state=wx689e5802c3e14e5c#wechat_redirect

上面浅蓝色部分需替换为当前公众号id,和测试环境对应的域名,测试域名https开头.

2.点击菜单用户会请求到后台服务: 根据返回的code 获取当前用户的openId, 然后根据openId查询引流人员编码 marketingCode, 最后根据 marketingCode查询对应推广员的链接


/**
 * @Title: 公众号回调 Controller
 * @Author: ken
 * @Description:
 * @Date: 2023/7/26  18:14
 **/
@Api(value = "获取微信openId总入口", tags = "获取微信openId总入口")
@Slf4j
@RestController
@RequestMapping("/callback")
public class WechatCallController {

    @Autowired
    private MarketingService marketingService;


    @ApiOperation("微信回调获取openId并跳转投保H5链接")
    @GetMapping(value = "/redirectInsurePage")
    public void  redirectInsurePage(@RequestParam String code, @RequestParam String state, HttpServletResponse response) {
        log.info("WechatPageController--> redirectInsurePage--> code:{}, state:{}", code, state);
        String url = marketingService.getUrl(code, state);
        log.info("WechatPageController--> redirectInsurePage--> url:{}", url);

        //重定向页面到投保连接页面(url 需要解码)
        String urlEncoder = "";
        try {
            urlEncoder = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
            log.info("WechatPageController--> redirectInsurePage--> urlEncoder:{}", urlEncoder);
        } catch (UnsupportedEncodingException e) {
            log.error("WechatPageController --> redirectInsurePage  URLEncoder.encode error:{}", e.getMessage(), e);
        }

        try {
            response.sendRedirect(url);
        } catch (IOException e) {
            log.error("WechatPageController --> redirectInsurePage  response.sendRedirect error:{}", e.getMessage(), e);
        }
        /*RedirectView redirectView = new RedirectView();
        // 设置重定向的URL
        redirectView.setUrl(urlEncoder);
        return redirectView;*/
    }
}

实现类:


    @Override
    public String getUrl(String code, String appId) {

        //获取用户openId
        CommonWechatByCodeReq commonWechatByCodeReq = new CommonWechatByCodeReq(code, appId);
        CommonWechatInfoByCode commonWechatInfoByCode = cbsWechatRemoteService.getAccessToken(commonWechatByCodeReq);
        log.info("MarketingServiceImpl-->getUrl--> cbsWechatRemoteService.getAccessToken :{}",
                JSONObject.toJSONString(commonWechatInfoByCode));
        String openId = commonWechatInfoByCode.getOpenid();

        //调用2b2a 根据open获取第一次绑定的 marketingCode
        String marketingCode = "";
        try {
            marketingCode = tbTaRemoteService.getMarketingCode(appId, openId);
        } catch (Exception e) {
            log.error("MarketingServiceImpl --> getUrl  tbTaRemoteService.getMarketingCode error:{}", e.getMessage(), e);
        }

        log.info("MarketingServiceImpl --> getUrl  tbTaRemoteService.getMarketingCode--> marketingCode :{}", marketingCode);

        if(Objects.isNull(marketingCode) || StringUtils.isEmpty(marketingCode)){
            return DEFAULT_URL;
        }
        //根据 marketingCode 查询推广员对应的投保链接
        QueryWrapper<MarketingExt> wrapper = new QueryWrapper<>();
        wrapper.eq("marketing_code", marketingCode);
        List<MarketingExt> marketingExtList = marketingExtMapper.selectList(wrapper);

        if (CollectionUtils.isEmpty(marketingExtList)) {
            return DEFAULT_URL;
        }

        return marketingExtList.get(0).getUrl();
    }
}

3.通过重定向跳转到查询到的推广链接页面.

注意:这里返回的链接不能再编码

 👉 💐🌸 公众号请关注 "果酱桑", 一起学习,一起进步! 🌸💐

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值