微信公众号开发:对接本地开发环境【内网穿透】

本文涉及的产品
.cn 域名,1个 12个月
简介: 微信公众号开发:对接本地开发环境【内网穿透】

前言


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


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


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


1. 配置本地服务器


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


JDK1.8

maven

springboot

tomcat

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


1687243898300.png


在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端口


1687243922895.jpg


2. 内网穿透


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


2.1 下载安装cpolar内网穿透


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


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


1687243963102.png


2.2 创建隧道


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


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


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

协议:http协议

本地地址:80

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

地区:选择China VIP

点击创建


1687244005770.jpg


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


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


1687244046184.png


3. 测试公网访问


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


1687244186684.png


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


1687244197007.png


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


1687244213160.png


4. 固定域名


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


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


4.1 保留一个二级子域名


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


地区:选择China VIP

二级域名:可自定义填写

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

点击保留


1687244224844.png


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


1687244239862.png


4.2 配置二级子域名


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


1687244252257.png


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


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

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

点击更新


1687244263518.png


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


1687244274148.png


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


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


1687244298626.png


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


1687244309130.png


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


1687244318171.png

目录
相关文章
|
7月前
【微信公众平台对接】有关【创建发票卡券模板】调用示例
【微信公众平台对接】有关【创建发票卡券模板】调用示例
112 0
|
7月前
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
172 0
|
7月前
【微信公众平台对接】有关上传pdf到微信
【微信公众平台对接】有关上传pdf到微信
77 0
|
7月前
【微信公众平台对接】有关上传pdf到微信
【微信公众平台对接】有关上传pdf到微信
100 0
|
7月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
475 0
|
8天前
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
25 3
|
7月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
172 0
|
6月前
|
PHP 移动开发 安全
PHP应用如何对接微信公众号JSAPI支付
本文介绍了微信支付的多种方式,包括JSAPI支付、APP支付、Native支付、付款码支付和H5支付。
81 8
|
6月前
|
Java API
java进行微信公众号开发
java进行微信公众号开发
155 0
|
7月前
|
安全 Java Linux
企业微信应用结合Cpolar内网穿透实现固定域名验证回调本地接口服务
企业微信应用结合Cpolar内网穿透实现固定域名验证回调本地接口服务