mac系统搭建微信公众平台的开发测试环境,支持接口测试调用及ngrok、nginx的简单说明

作者: admin 分类: 环境搭建 发布时间: 2019-09-03 17:22  阅读: 190 views

相关环境准备

  1. MAC电脑
  2. 微信公号的准备
  3. 本地项目环境(php或java) apache或者tomcat
  4. 花生壳或ngrok做内网穿透
  5. nginx服务器做端口转发
  6. vpn相关软件(翻过一面墙)
  7. 其他

背景说明

公司的部分业务是内容电商,通过公众号/订阅号进行内容的分发和引流。单个号还好说,多个号的情况下每天查看一些流量信息很是费劲。所以要通过微信的公众平台用api接口实现。正好自己也想利用公号的接口解放一些劳动力成本,所以阅读下文档,进行前期的准备。首先是满足公司业务部门的需求,做一些简单的统计接口调用。然后看看哪些接口比较好用,可以有效的利用起来解放人工成本。

操作步骤

  1. 先申请一个公号,开通开发功能。(略过)
  2. 登入公号后台 -> 开发 -> 基本配置,可以看到公众号开发信息。有重要的三个内容
    AppID,AppSecret,IP白名单。
其中AppId,AppSecret可以用来获取所有接口调用必传的token信息。
IP白名单是获取token时的访问源IP地址,必须设置,否则无法拿到token

注:
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

  1. 公众平台测试账号的开通,方便调试、测试。登入公号后台 -> 开发者中心 -> 公众平台测试账号进行基本的配置。主要是接口配置信息的配置。微信接口的调试需要有自己的服务器信息,且端口为80。(外网可以正常访问的)
域名配置(有正式域名和服务器)

现在一般用的服务器基本都是阿里云服务器,其他空间商也都行,最主要的是备案。不备案的域名会被禁止访问。备案流程一般15天左右(我备了几个,差不多都这个时间)。备好之后,在对应后台进行域名的解析,这个很快就会生效。

域名配置(没有域名、服务器,本地配置)

一般前期测试、试用,不太愿意直接购买服务器和域名做测试。这个时候可以借助一些强大的内网穿透工具。如花生壳、ngrok等,花生壳的配置在mac上稍显麻烦。直接使用ngrok测试。ngrok官方下载地址。解压后只有一个ngrok文件。先根据官网提供的信息进行命令行的操作

chenhailongdeMacBook-Pro:tools chenhailong$ ./ngrok authtoken 1QGls6IlzxqECOxUfn1VBIKJtob_7Zm1e7YTtpwGAbC6u7AE6

Authtoken saved to configuration file: /Users/chenhailong/.ngrok2/ngrok.yml

那个长字符串是存在在下载的界面上,官网会提供操作步骤。执行之后在本地生成了ngrok的配置。在去执行

chenhailongdeMacBook-Pro:tools chenhailong$ ./ngrok http 80

出现以下信息说明ngrok启动成功

ngrok by @inconshreveable                                                   
Session Status                online                                         
Account                       deathearth (Plan: Free)                        
Version                       2.3.34                                         
Region                        United States (us)                             
Web Interface                 http://127.0.0.1:4040                          
Forwarding                    http://46714085.ngrok.io -> http://localhost:80 
Forwarding                    https://46714085.ngrok.io -> 
http://localhost:80                                                          

Connections                   ttl     opn     rt1     rt5     p50     p90    
15      0       0.00    0.00    0.62    61.57                                                                                                             
HTTP Requests                                                                
-------------                                                                

GET  /wx/vaildate              200                                           
GET  /wx/vaildate              404                                           
POST /wx/vaildate              405                                           
GET  /wx/vaildate              200                                           
GET  /wx/get/user              404                                           
POST /wx/vaildate              405                                           
POST /wx/vaildate              405                                           
GET  /wx/vaildate              200                                           
GET  /wx/vaildate              200                                           
GET  /wx/vaildate              404 

注:
其中 http://46714085.ngrok.io 和 https://46714085.ngrok.io是对外可访问的域名
http://localhost:80是指向了本地的80端口服务。这里值得一提的是,如果前面的操作都正常,且本地开启了80端口的服务,并且http://localhost:80/url访问接口可以正常显示。而通过http://46714085.ngrok.io 访问没有反应。这就说明需要翻墙了。我这里翻墙之后可以正常访问接口信息。
每次关闭、重启的域名地址会不一样,注意调整

端口转发

一般服务器或者自己电脑上会运行多个软件,80端口经常会占用。这时没有必要关闭占用80端口的应用重新设置,或者重新弄一套干净的环境做公号的测试。可以使用iptables或者nginx进行端口转发的配置。根据不同的url映射到不同的端口上去。很方便也足够用了。nginx官方下载地址点这里。这里下载好的nginx是需要编译的,没法直接使用。解压后,进入nginx目录,输入以下2个命令。

1.编辑配置文件

./configure –prefix=/usr/local/nginx
出现以下信息说明成功

checking for OS
 + Darwin 17.7.0 x86_64
checking for C compiler ... found
 + using Clang C compiler
 + clang version: 9.1.0 (clang-902.0.39.2)
checking for -Wl,-E switch ... not found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
....

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

2.安装文件

make & make install
出现以下信息说明安装成功

...
test -d '/usr/local/nginx/logs' \
        || mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/logs' \
        || mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/html' \
        || cp -R html '/usr/local/nginx'
test -d '/usr/local/nginx/logs' \
        || mkdir -p '/usr/local/nginx/logs'
[1]+  Done                    make

根据实际情况配置端口转发

server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://127.0.0.1:8080;
        }

        location /wx/ {
            proxy_pass http://127.0.0.1:8888;
        }
}
接口配置

第3步中的操作是解决了域名、端口的问题。在将域名实际配置到接口配置中点击保存是会提示配置无效的。因为虽然域名可以访问,但是没有按照微信的要求返回所需的信息。这里可以查看 微信验证消息的相关说明。说明配置的url地址是需要做返回操作的。简单代码如下:

@RequestMapping(method = { RequestMethod.GET} , value = "/vaildate" )
public void vaildateURL(HttpServletRequest request,HttpServletResponse response) {

    // 微信加密签名
    String signature = request.getParameter("signature");
    // 时间戳
    String timestamp = request.getParameter("timestamp");
    // 随机数
    String nonce = request.getParameter("nonce");
    //随机字符串
    String echostr = request.getParameter("echostr");

    try {
        PrintWriter print = response.getWriter();
        print.write(echostr);
        print.flush();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

然后将地址 http://46714085.ngrok.io/wx/vaildate 配置到微信后台点击保存时,正常会提示配置成功。说明微信能够正常通过网络访问你本地的接口服务。

获取到的签名串、时间戳、随机数如下

9a60fd8d85766b8cfe7ea8297ed16f4883187dd5
1567502088
1824893630

到这里,就可以正常的使用公众平台的其他接口了。由于token的有效期目前是7200s,所以需要做一些特殊的处理,如主动定时更新等。否则在调用时会出现以下提示

{"errcode":42001,"errmsg":"access_token expired hint: [eC4COa0147hka5!]","statusCode":200}

其他的问题暂时没有碰到,有的话在进行整理。


   原创文章,转载请标明本文链接: mac系统搭建微信公众平台的开发测试环境,支持接口测试调用及ngrok、nginx的简单说明

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读