如何愉快的進(jìn)行微信開發(fā)

這2天接觸了微信服務(wù)號(hào)的開發(fā), 分享一下我的小技巧

存在問題

由于需要和微信服務(wù)器進(jìn)行主動(dòng)和被動(dòng)通信. 在做微信開發(fā)進(jìn)行調(diào)試時(shí)會(huì)比較麻煩

  1. access token, 的獲取需要到微信后臺(tái)添加服務(wù)器ip白名單, 不在白名單中ip 無法獲取, 而本地開發(fā)端的ip經(jīng)常變化, 且添加ip到白名單還需要驚動(dòng)公眾號(hào)管理員
  2. 微信需要主動(dòng)推消息給我們后臺(tái)配的服務(wù)器地址, 而本地網(wǎng)絡(luò)端通常不能被公網(wǎng)中其他端, 直接訪問到.
  3. 開發(fā)中有時(shí)需要給其他人測(cè)試, 又是公網(wǎng)問題

解決方法

由于以上問題的存在, 很多人直接選擇在服務(wù)器端調(diào)試. 不過這真的很煩, 每次改動(dòng)都要上傳. 首先去申請(qǐng)個(gè)測(cè)試公眾號(hào), 當(dāng)然, 如果你開發(fā)的公眾號(hào)還沒開始運(yùn)營(yíng),也可以不申請(qǐng).

  1. 把本地端口暴露到公網(wǎng), 且綁定一個(gè)固定公網(wǎng)ip

在開發(fā)端執(zhí)行(如果是win下, putty也有建立隧道的方法,請(qǐng)自行百度之)

ssh -N -v -R 3000:127.0.0.1:80 root@app.dev.peterq.cn

app.dev.peterq.cn 是我的一臺(tái)擁有公網(wǎng)ip的服務(wù)器
這個(gè)命令會(huì)讓app.dev.peterq.cn監(jiān)聽127.0.0.1:3000, 并把所有數(shù)據(jù)傳給本機(jī)ssh, shh再把數(shù)據(jù)轉(zhuǎn)發(fā)到127.0.0.1:80(這里可以是任何你電腦能訪問的ip和端口)
由于app.dev.peterq.cn監(jiān)聽的是它的本地端口, 外網(wǎng)還是訪問不到這個(gè)代理端口的. 我們借助nginx(其他服務(wù)器軟件也行啦)實(shí)現(xiàn),新增nginx虛擬主機(jī):

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 直接訪問到你本地開發(fā)的項(xiàng)目啦,而且不影響你服務(wù)器原有web應(yīng)用, 你可以在微信后臺(tái)把相關(guān)配置填寫app.dev.peterq.cn這個(gè)域名的了, 微信將能正常的主動(dòng)向你的開發(fā)端發(fā)起通信

  1. 解決獲取access_token的ip限制. 由于本地開發(fā)端的公網(wǎng)ip時(shí)常變動(dòng), 而添加ip至白名單又不方便, 所以我們把a(bǔ)pp.dev.peterq.cn的服務(wù)器ip地址加入白名單并讓其代理獲取.
    app.dev.peterq.cn 這里可以寫個(gè)腳本(這個(gè)腳本你就不要在轉(zhuǎn)發(fā)到3000端口啦, 不然數(shù)據(jù)轉(zhuǎn)一圈又回來了)例如:
<?php 
$_GET['secret'] === 'your_secret' or die('access denied');
echo file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET');

然后本地端, 如果你使用easy wechat 包的話, 可以這樣設(shè)置

$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. 同一份代碼區(qū)分開發(fā)環(huán)境和線上環(huán)境.
    上面代理獲取token是在開發(fā)環(huán)境下, 線上是不需要代理獲取的, 那么怎么在用同一份代碼的情況下區(qū)分呢. 可以用不同的配置文件. 而我是這樣解決的:

在開發(fā)端的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: 最近太忙, 好多天沒更新了)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 名詞延伸 通俗的說,域名就相當(dāng)于一個(gè)家庭的門牌號(hào)碼,別人通過這個(gè)號(hào)碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,833評(píng)論 2 56
  • 要修煉平淡的心境,拿得起,放得下,如此便能舉重若輕,超然物外; 要追求平和的心態(tài),得之不大喜,失之不狂悲,世界還是...
    清竹霄霄z十只鷹貿(mào)易閱讀 291評(píng)論 0 0
  • 暮色四合,從九寨溝歸途中的大巴還在穿越諾爾蓋草原的公路上搖搖晃晃地行駛。有幾顆不太起眼的星星迫不及待地從夜幕中鉆了...
    一念清寧閱讀 1,133評(píng)論 12 22

友情鏈接更多精彩內(nèi)容