如何愉快的进行微信开发

这2天接触了微信服务号的开发, 分享一下我的小技巧

存在问题

由于需要和微信服务器进行主动和被动通信. 在做微信开发进行调试时会比较麻烦

  1. access token, 的获取需要到微信后台添加服务器ip白名单, 不在白名单中ip 无法获取, 而本地开发端的ip经常变化, 且添加ip到白名单还需要惊动公众号管理员
  2. 微信需要主动推消息给我们后台配的服务器地址, 而本地网络端通常不能被公网中其他端, 直接访问到.
  3. 开发中有时需要给其他人测试, 又是公网问题

解决方法

由于以上问题的存在, 很多人直接选择在服务器端调试. 不过这真的很烦, 每次改动都要上传. 首先去申请个测试公众号, 当然, 如果你开发的公众号还没开始运营,也可以不申请.

  1. 把本地端口暴露到公网, 且绑定一个固定公网ip

在开发端执行(如果是win下, putty也有建立隧道的方法,请自行百度之)

ssh -N -v -R 3000:127.0.0.1:80 [email protected]

app.dev.peterq.cn 是我的一台拥有公网ip的服务器
这个命令会让app.dev.peterq.cn监听127.0.0.1:3000, 并把所有数据传给本机ssh, shh再把数据转发到127.0.0.1:80(这里可以是任何你电脑能访问的ip和端口)
由于app.dev.peterq.cn监听的是它的本地端口, 外网还是访问不到这个代理端口的. 我们借助nginx(其他服务器软件也行啦)实现,新增nginx虚拟主机:

server {
    listen 80;
    listen [::]:80;

    server_name app.dev.peterq.cn;

    location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host:80;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Via "nginx";
     }
}

这样就能通过 http://app.dev.peterq.cn 直接访问到你本地开发的项目啦,而且不影响你服务器原有web应用, 你可以在微信后台把相关配置填写app.dev.peterq.cn这个域名的了, 微信将能正常的主动向你的开发端发起通信

  1. 解决获取access_token的ip限制. 由于本地开发端的公网ip时常变动, 而添加ip至白名单又不方便, 所以我们把app.dev.peterq.cn的服务器ip地址加入白名单并让其代理获取.
    app.dev.peterq.cn 这里可以写个脚本(这个脚本你就不要在转发到3000端口啦, 不然数据转一圈又回来了)例如:

然后本地端, 如果你使用easy wechat 包的话, 可以这样设置

$wechat = new \EasyWeChat\Foundation\Application($options);
$wechat->access_token->setToken(json_decode(file_get_contents('http://app.dev.peterq.cn/token.php?secret=your_secret'))->access_token);
  1. 同一份代码区分开发环境和线上环境.
    上面代理获取token是在开发环境下, 线上是不需要代理获取的, 那么怎么在用同一份代码的情况下区分呢. 可以用不同的配置文件. 而我是这样解决的:

在开发端的nginx配置添加:

location ~ \.php$ {
   fastcgi_param APP_DEV_MODE true;
}

修改上述提到的代码:

$wechat = new \EasyWeChat\Foundation\Application($options);
isset($_SERVER['APP_DEV_MODE']) and $wechat->access_token->setToken(json_decode(file_get_contents('http://app.dev.peterq.cn/token.php?secret=your_secret'))->access_token);

The end!


欢迎阅读及投稿: laravel5.5框架解析 (ps: 最近太忙, 好多天没更新了)

你可能感兴趣的:(如何愉快的进行微信开发)