微信小程序开发之配置菜单跳转到自定义页面

news2024/11/15 21:26:57

需求:

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

公众号相关文档:

网页授权 | 微信开放文档

 

大致流程: 

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%2F测试域名%2Fws_dabai%2Fweixin%2Fcallback%2FredirectInsurePage&response_type=code&scope=snsapi_userinfo&state=

上面浅蓝色部分需替换为当前公众号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.通过重定向跳转到查询到的推广链接页面.

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

i.MX6ULL(二十) linux platform 设备驱动

Linux 系统要考虑到驱动的可重用性&#xff0c;因 此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生了我们将来最常打交道的 platform 设备驱动&#xff0c;也叫做平台设备驱动。 1 Linux 驱动的分离与分层 1.1 驱动的分隔与分离 对于 Linux 这样一…

查看电脑上NET Framework最高版本

1、使用CMD工具 1、进入路径&#xff1a; cd %WINDIR%\Microsoft.NET\Framework\v4.0.303192、查看版本 MSBuild /version2、效果

【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin

在现代的企业网络中&#xff0c;网站安全和可靠性是至关重要的。一个不注意的SSL证书过期可能导致网站出现问题&#xff0c;给公司业务带来严重的影响。针对这个问题&#xff0c;手动检测每个域名和机器的证书状态需要花费大量的时间和精力。为了解决这个问题&#xff0c;我想向…

NAT详解(网络地址转换)

一句话说清楚它是干什么的&#xff1a; 网络地址转换&#xff1a;是指通过专用网络地址转换为公用地址&#xff0c;从而对外隐藏内部管理的IP地址&#xff0c;它使得整个专用网只需要一个全球IP就可以访问互联网&#xff0c;由于专用网IP地址是可以重用的&#xff0c;所以NAT大…

基于机器学习的供水管网水力模型

大数据、人工智能、物联网等前沿技术正推动人类社会发展发生深刻变革。2021年12月12日&#xff0c;国务院印发了《“十四五”数字经济发展规划》&#xff0c;进一步指明了各行业数字化转型发展的方向。作为传统的民生保障行业&#xff0c;供水行业也面临着向数字化智慧化转型的…

2023年的前端开发还好找工作么

首先可以明确写在前面的是&#xff0c;前端的确是不像之前一样&#xff0c;只会简单的基础就能轻轻松松的找到工作的&#xff0c;随着学习的人不断增多&#xff0c;市场自然会逐步提高对就业人员的要求&#xff0c;那么再以之前的要求来看待前端的话的确是不可取的 互联网在&a…

机器学习深度学习——多层感知机的从零开始实现

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——多层感知机 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助 为…

计算机二级Python基本操作题-序号41

1. 输入字符串s&#xff0c;按要求把s输出到屏幕&#xff0c;格式要求&#xff1a;宽度为30个字符&#xff0c;星号字符*填充&#xff0c;居中对齐。如果输入字符串超过30位&#xff0c;则全部输出。 例如&#xff1a;键盘输入字符串s为"Congratulations”&#xff0c;屏幕…

基于Kaggle训练集预测的多层人工神经网络的能源消耗的时间序列预测(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f308;3 Matlab代码实现 &#x1f389;4 参考文献 &#x1f4a5;1 概述 本文为能源消耗的时间序列预测&#xff0c;在Matlab中实现。该预测采用多层人工神经网络&#xff0c;基于Kaggle训练集预测未来能源消耗。 &am…

自动化测试如何做?分层自动化测试如何实施?一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 分层的自动化测试…

qt简易闹钟

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->stopBtn->setDisabled(true);this->setFixedSize(this->size()); //设置固定大小this->s…

【Spring Cloud Alibaba】限流--Sentinel

文章目录 概述一、Sentinel 是啥&#xff1f;二、Sentinel 的生态环境三、Sentinel 核心概念3.1、资源3.2、规则 四、Sentinel 限流4.1、单机限流4.1.1、引入依赖4.1.2、定义限流规则4.1.3、定义限流资源4.1.4、运行结果 4.2、控制台限流4.2.1、客户端接入控制台4.2.2、引入依赖…

(双指针) 剑指 Offer 57. 和为s的两个数字 ——【Leetcode每日一题】

❓ 剑指 Offer 57. 和为s的两个数字 难度&#xff1a;简单 输入一个递增排序的数组和一个数字 s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是 s。如果有多对数字的和等于 s&#xff0c;则输出任意一对即可。 示例 1&#xff1a; 输入&#xff1a;nums [2…

1400*C. Strong Password

Example input 5 88005553535123456 2 50 56 123412341234 3 111 444 1234 4 4321 4321 459 2 49 59 00010 2 10 11output YES NO YES NO YES解析&#xff1a; 题目要求有一种密码不在数据库中即可&#xff0c;所以枚举每一位的所有可能的数字&#xff0c;记录这一位数字在数…

帆软 FineReport/FineBI channel反序列化漏洞分析

事件背景 热点漏洞 漏洞说明 1. 漏洞原理&#xff1a;FineReport/FineBI channel接口能接受序列化数据并对其进行反序列化。配合帆软内置CB链会导致任意代码执行。 2. 组件描述&#xff1a;FineReport是一款企业级报表设计和数据分析工具&#xff0c;它提供了丰富多样的组件…

教你轻松又简单的绘制地铁线路图

地铁是主要以地下运输为主的交通系统。其轨道通常在地下隧道内。其中&#xff1a;地铁线路中的M,L,S,R分别代表&#xff1a;MMetro地&#xff0c;LLight轻轨&#xff0c;SSuburb市郊铁路&#xff0c;Rrapid&#xff0c;快速铁路。地铁线路图则可以简单理解为地铁的运行路线轨道…

基于Java+SpringBoot+vue前后端分离足球青训俱乐部管理后台系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【自动话化运维】Ansible常见模块的运用

目录 一、Ansible简介二、Ansible安装部署2.1环境准备 三、ansible 命令行模块3.1&#xff0e;command 模块3.2&#xff0e;shell 模块3.3&#xff0e;cron 模块3.4&#xff0e;user 模块3.5&#xff0e;group 模块3.6&#xff0e;copy 模块3.7&#xff0e;file 模块8&#xff…

Java阶段五Day15

Java阶段五Day15 文章目录 Java阶段五Day15分层其他依赖dao-apidao-implinfrustructuredomainadaptermain 测试整合项目main前台师傅功能luban-front配置师傅相关表格ER图ER练习案例鲁班表格ER关系&#xff08;非常重要&#xff09; 前台师傅接口——师傅入驻adapterdomaininfr…

【C语言】指针进阶(二)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …