引入企微api,如何进行本地调试?天坑!

写在前面,因业务需求需要引入企业微信api,官方资料不友好,资料少,踩了太多坑了,记录一下,再喷一下!

企业微信引入时的坑

1.引入分企业和应用,让人以为是两种,但是接口一样,只是部分接口需要先用agentConfig注册,导致在引入的时候都不知道选哪个

2.引入的agent等接口只能在微信浏览器环境或者微信开发者工具使用,你直接文档说明啊!

3.所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),且可信域名必须有ICP备案且在管理端验证域名归属,这就导致了本地我起的服务,域名都是我本地的,根本获取不了签名,使用不了js接口,调试放到线上才可以,可这样调试非常麻烦。本文主要讲的内容就是如何解决这个问题,在本地进行调试。

工具准备

要想进行本地调试要准备两个工具

switchHosts:https://github.com/oldj/SwitchHosts/releases

nginx:https://nginx.org/en/download.html

下载地址已经放上去,自行下载,具体安装教程可百度一下,这里不再具体讲了

实现过程

既然说要企业微信应用的可信域名下调用(包括子域名),就是我们当前地址栏要含有这个域名,在应用配置的这个域名image-20240912150832168

所以我们需要的方法就是模拟这个域名,但是访问的是本地的服务

第一步修改host

在switchHosts里添加你起服务的ip,一般是127.0.0.1,然后后面配置这个可信任域名,就我们要模拟的域名

image-20240912151012689

第二步配置nginx代理

打开nginx.conf文件,加入下列代码,替换server_name(xxxxxxx.cn)是你要访问的域名,和hosts内一致,proxy_pass对应的是你本地起的服务

这里注意,error.log日志中出现[emery] blind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 错误是端口被占用了,nginx默认是监听80端口的,需要将原来的kill掉

另外修改nginx.conf文件后要重启下或者重新加载下才能生效

  server {
        listen       80;
        server_name  xxxxxxx.cn;# 要访问的域名
		# 头信息
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://localhost:8080; # 转发请求到本地的8080端口
             #root   html;
             #index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
第三步在微信公众号开发工具内调试

将要访问的域名直接放微信公众号地址栏里就可以访问了

控制台出现下面输入,企业微信就引入成功

image-20240912153058337

实现原理

具体操作实现了,但为什么这样可以做呢,从输入域名到本地具体处理过程还是要了解一下

首先在浏览器地址栏输入域名,开始进行域名解析,因为会优先解析本地

而本地修改了hosts,刚好匹配解析到了127.0.0.1这个ip

于是请求开始往这个ip去发,而且用了默认端口80,

我们本地起的nginx服务也刚好一直在监听这个80端口,因此捕获这个请求

接着因为我们配置了反向代理,它将域名代理到了http://localhost:8080,因此请求转发到了本地服务

而本地起的服务刚好也是8080端口,监听到请求并对应处理,

接着把响应内容返回给nginx,nginx再返给浏览器,内容就呈现了

//localhost:8080,因此请求转发到了本地服务

而本地起的服务刚好也是8080端口,监听到请求并对应处理,

接着把响应内容返回给nginx,nginx再返给浏览器,内容就呈现了

写在结尾:这个方法其实不止可以用在企微本地调试上,任何需要变动域名来访问本地服务的都可以尝试,最后再吐槽下,企微微信api真坑!,接口调试过程中还有很多坑,这里就不再多说了😭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时雨.`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值