写点什么

开发微信公众号本地调试 +-+cpolar 内网穿透

作者:程思扬
  • 2023-07-18
    北京
  • 本文字数:2617 字

    阅读完需:约 9 分钟

开发微信公众号本地调试+-+cpolar内网穿透

@[TOC]


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

前言

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


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

1. 配置本地服务器

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


  • JDK1.8

  • maven

  • springboot

  • tomcat


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



在 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 ""; }


}
复制代码


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


2. 内网穿透

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

2.1 下载安装 cpolar 内网穿透

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


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


2.2 创建隧道

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


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


  • 隧道名称:可自定义,注意不要与已有隧道名称重复

  • 协议:http 协议

  • 本地地址:80

  • 域名类型:免费选择随机域名

  • 地区:选择 China VIP


点击创建



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


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


3. 测试公网访问

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



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



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


4. 固定域名

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


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

4.1 保留一个二级子域名

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


  • 地区:选择 China VIP

  • 二级域名:可自定义填写

  • 描述:即备注,可自定义填写


点击保留



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


4.2 配置二级子域名

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



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


  • 域名类型:选择二级子域名

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


点击更新



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


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

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



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



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



发布于: 刚刚阅读数: 8
用户头像

程思扬

关注

会的越多,不会的越多 2022-01-03 加入

还未添加个人简介

评论

发布
暂无评论
开发微信公众号本地调试+-+cpolar内网穿透_微信公众号_程思扬_InfoQ写作社区