• 如何远程通过内网穿透实现微信公众号在本地的完整调试


    前言

    微信公众号开发中,微信要求开发者需要拥有自己的服务器资源来响应微信发送的token验证,这个服务器只能通过域名访问,不能使用ip地址来进行访问,如果购买服务器,再购买域名,将是一笔比较大的开销,如果能将本地服务暴露出去,再使用域名去访问,不仅能简化配置,还能减少开销,达到快速开发的效果。

    幸运的是,Cpolar帮您搞定这一点。 启动Cpolar并将隧道的URL粘贴到微信公众号对接服务器的URL字段中,完成!

    1. 配置本地服务器

    创建本地服务,这里以java服务为例,环境配置:

    • JDK1.8
    • maven
    • springboot
    • tomcat

    根据微信开发者文档的接入指南中要求,对微信的发送的get请求参数进行加密对比

    202301161502

    在springboot服务controller编写一个微信验证的接口,根据要求获取微信传入的参数进行处理

    /**
     * 微信服务调用接口
     */
    @Controller
    @RequestMapping("/wechat")
    public class WeChatTest {
    
        private static String wxToken="flzabc123";
    
        @GetMapping("")
        public void weChatTestV(HttpServletRequest request, HttpServletResponse response) {
    
            // 1、验证消息的确来自微信服务器
            String signature = request.getParameter("signature");
            String timestamp = request.getParameter("timestamp");
            String nonce = request.getParameter("nonce");
            String echostr = request.getParameter("echostr");
    
            //将微信echostr返回给微信服务器
            try(OutputStream os = response.getOutputStream()) {
                String sha1 = getSHA1(wxToken, timestamp, nonce, "");
    
                //和signature进行对比
                if (sha1.equals(signature)){
                // 返回echostr给微信
                    os.write(URLEncoder.encode(echostr, "UTF-8").getBytes());
                    os.flush();
                    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
        /**
         * 用SHA1算法生成安全签名
         *
         * @param token     票据
         * @param timestamp 时间戳
         * @param nonce     随机字符串
         * @param encrypt   密文
         * @return 安全签名
         * @throws Exception
         */
        public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws Exception {
            try {
                String[] array = new String[]{token, timestamp, nonce, encrypt};
                StringBuffer sb = new StringBuffer();
                // 字符串排序
                Arrays.sort(array);
                for (int i = 0; i < 4; i++) {
                    sb.append(array[i]);
                }
                String str = sb.toString();
                // SHA1签名生成
                MessageDigest md = MessageDigest.getInstance("SHA-1");
                md.update(str.getBytes());
                byte[] digest = md.digest();
                StringBuffer hexstr = new StringBuffer();
                String shaHex = "";
                for (int i = 0; i < digest.length; i++) {
                    shaHex = Integer.toHexString(digest[i] & 0xFF);
                    if (shaHex.length() < 2) {
                        hexstr.append(0);
                    }
                    hexstr.append(shaHex);
                }
                return hexstr.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "";
        }
    
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78

    编写好接口后,接着启动服务,启动springboot,这里暴露的是8080端口

    202301161502

    2. 内网穿透

    这里我们使用cpolar内网穿透,将本地服务映射到公网,无需公网ip,也不用设置路由器,操作非常简单。【cpolar.cn已备案】

    2.1 下载安装cpolar内网穿透

    cpolar官网:https://www.cpolar.com/

    访问cpolar官网,注册一个账号,并下载安装cpolar客户端。详细可以参考文档教程进行下载安装.

    20230116153634

    2.2 创建隧道

    cpolar安装成功后,我们在浏览器上访问本地9200端口,登录Cpolar的web ui界面:http://localhost:9200

    点击左侧仪表盘的隧道管理——创建隧道,我们来创建一条隧道,将在本地8080端口下的web服务映射到公网:

    • 隧道名称:可自定义,注意不要与已有隧道名称重复
    • 协议:http协议
    • 本地地址:80
    • 域名类型:免费选择随机域名
    • 地区:选择China VIP

    点击创建

    202301161503

    提示隧道创建成功后,页面自动跳转至隧道列表,可以看到刚刚创建成功的tunnel-1隧道,状态active,表示为正常在线,注意无需再次点击启动。

    点击左侧仪表盘的状态——在线隧道列表,可以看到刚刚创建的隧道已经有生成了相应的公网地址,一个http协议,一个https协议(免去配置ssl证书的繁琐步骤),均可以访问到本地web服务,复制公网地址。

    202301161504

    3. 测试公网访问

    打开微信公众平台公众号页面,点击下面的基本配置,在URL框中填写复制的公网地址,

    202301161505

    出现提交成功表示验证成功

    202301161506

    点击启用服务器配置,出现操作成功表示启用成功

    202301161507

    4. 固定域名

    由于以上配置的公网地址使用的是随机地址,在24小时内会随机变化,为了使服务更稳定运行,建议必须配置固定域名地址。

    注意需要将cpolar套餐升级至基础套餐或以上。【cpolar.cn已备案】

    4.1 保留一个二级子域名

    访问Cpolar官网www.cpolar.com,登录cpolar官网后台,点击左侧的预留,找到保留二级子域名:

    • 地区:选择China VIP
    • 二级域名:可自定义填写
    • 描述:即备注,可自定义填写

    点击保留

    202301161508

    提示子域名保留成功,复制所保留的二级子域名

    202301161509

    4.2 配置二级子域名

    访问http://127.0.0.1:9200/,登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到刚刚创建的http微信开发隧道,点击右侧的编辑

    202301161510

    修改隧道信息,将保留成功的二级子域名配置到隧道中

    • 域名类型:选择二级子域名
    • Sub Domain:填写保留成功的二级子域名

    点击更新

    202301161511

    更新完后,再次打开在线隧道列表,此时可以看到,隧道变成了固定的二级子域名,名称是我们在官网保留的wechat,然后复制该域名

    202301161512

    5. 使用固定二级子域名进行微信开发

    打开微信公众平台——公众号页面,点击基本配置,修改URL的值,修改前需要点击停用服务器配置,替换后点击提交

    202301161513

    出现提交成功表示替换成功

    202301161514

    接着,点击启动服务器配置,出现操作成功表示成功,接下来就可以使用本地服务器进行微信开发啦

    202301161515

    转载自cpolar极点云文章:微信公众号开发:对接本地开发环境【内网穿透】

  • 相关阅读:
    QGIS 超级课程:从初学者到专家
    MIT课程分布式系统学习07——Fault Tolerance raft2
    Linux基本命令之修改主机名、用户名、密码
    VS code “import type“ 声明只能在 TypeScript 文件中使用
    CentOS7中原生Python2.7.5和Python3共存
    如何将C/C++代码转成webassembly
    HTML网页设计作业:文化网站设计——基于HTML古典中国风工艺美术网页设计(9页)
    ExtJS 数据处理-Associations(关联)
    ambari安装 本地源
    【动画进阶】巧用 CSS/SVG 实现复杂线条光效动画
  • 原文地址:https://blog.csdn.net/m0_72165281/article/details/133928081