使用 composer(注意:他會自動檢索該目錄下的composer.json,請確認好安裝目錄):php
$ composer require overtrue/wechat:~3.1 -vvv
EasyWeChat 是一個通用的 Composer 包,因此不須要對框架單獨作修改,只要支持 Composer 就能直接使用,固然了,爲了更方便的使用,咱們收集了如下框架單獨提供的拓展包:html
我這裏使用的是laravel,安裝好後路徑是這樣的laravel
use EasyWeChat\Foundation\Application; $options = [ // ... ]; $app = new Application($options);
下面這裏是配置的完整列表:git
<?php return [ /** * Debug 模式,bool 值:true/false * * 當值爲 false 時,全部的日誌都不會記錄 */ 'debug' => true, /** * 帳號基本信息,請從微信公衆平臺/開放平臺獲取 */ 'app_id' => 'your-app-id', // AppID 'secret' => 'your-app-secret', // AppSecret 'token' => 'your-token', // Token 'aes_key' => '', // EncodingAESKey,安全模式下請必定要填寫!!! /** * 日誌配置 * * level: 日誌級別, 可選爲: * debug/info/notice/warning/error/critical/alert/emergency * file:日誌文件位置(絕對路徑!!!),要求可寫權限 */ 'log' => [ 'level' => 'debug', 'file' => '/tmp/easywechat.log', ], /** * OAuth 配置 * * scopes:公衆平臺(snsapi_userinfo / snsapi_base),開放平臺:snsapi_login * callback:OAuth受權完成後的回調頁地址 */ 'oauth' => [ 'scopes' => ['snsapi_userinfo'], 'callback' => '/examples/oauth_callback.php', ], /** * 微信支付 */ 'payment' => [ 'merchant_id' => 'your-mch-id', 'key' => 'key-for-signature', 'cert_path' => 'path/to/your/cert.pem', // XXX: 絕對路徑!!!! 'key_path' => 'path/to/your/key', // XXX: 絕對路徑!!!! // 'device_info' => '013467007045764', // 'sub_app_id' => '', // 'sub_merchant_id' => '', // ... ], /** * Guzzle 全局設置 * * 更多請參考: http://docs.guzzlephp.org/en/latest/request-options.html */ 'guzzle' => [ 'timeout' => 3.0, // 超時時間(秒) //'verify' => false, // 關掉 SSL 認證(強烈不建議!!!) ], ];
在微信公衆平臺開發的道路上,遍及着各類大大小小的坑,有的人掉坑裏,幾經折騰又爬出來了,而後拍拍屁股走人。然而坑還在那裏,還會繼續有後來人掉進去……github
這,是咱們不肯看到的。apache
因此在這裏,咱們將陸續將微信開發中可能遇到的各類疑難問題進行彙總,並給出對應的解決辦法。通常狀況下,這些問題均可以對號入座,輕鬆地解決。但也不排除特殊狀況,這時候你遇到的問題與文中某一個症狀一致,但文中所給的解決方案並不湊效,這種狀況下就須要發揮你本身的智慧,去……折騰了……json
咱們期待這一版塊爲各位的開發帶來便利,同時也但願各位本着開源、分享的精神對其進行補充和完善,將各類坑一一填小、填平,讓微信開發變得不那麼痛苦,甚至,變成一件快樂的事……ubuntu
date
能夠在服務器上查看當前時間,若是發現時區不對則須要修改時區:Setting The Correct Timezone In CentOS And Ubuntu Servers With NTP
這是 SSL 證書問題所致,在使用 SDK 調用微信支付等相關的操做時可能會遇到報 「SSL certificate problem: unable to get local issuer certificate」 的錯誤。centos
微信公衆平臺提供的文檔中建議對部分較敏感的操做接口使用 https 協議進行訪問,例如微信支付和紅包等接口中涉及到操做商戶資金的一些操做。
wechat SDK 遵循了官方建議,因此在調用這些接口時,除了按照官方文檔設置操做證書文件外,還須要保證服務器正確安裝了 CA 證書。api
下載 CA 證書
你能夠從 http://curl.haxx.se/ca/cacert.pem 下載 或者 使用微信官方提供的證書中的 CA 證書 rootca.pem
也是一樣的效果。
在 php.ini
中配置 CA 證書
只須要將上面下載好的 CA 證書放置到您的服務器上某個位置,而後修改 php.ini
的 curl.cainfo
爲該路徑(絕對路徑!),重啓 php-fpm
服務便可。
curl.cainfo = /path/to/downloaded/cacert.pem
注意證書文件路徑爲絕對路徑!以本身實際狀況爲準。
其它修改 HTTP 類源文件的方式是不容許的。
目前在 OSX 下,發現使用 HomeBrew 裝的 PHP 7.0 有這個問題,解決方案是從新 brew 安裝 PHP:
$ brew install homebrew/php/php70 --with-homebrew-openssl --with-homebrew-curl --without-snmp -vvv
驗證:
$ php -i | grep 'OpenSSL support' OpenSSL support => enabled OpenSSL support => enabled
公衆號可添加3個支付受權目錄,知足不一樣應用使用同一個公衆號進行支付的業務需求。
正確的【支付受權目錄】應以 http://
或 https://
開頭,並以正斜槓 /
結尾,受權目錄所包含的域名必須通過 ICP 備案。
支付受權目錄需細化至二級或三級目錄。
全部實際調起微信支付請求的頁面都必需要所配置的支付受權目錄之下。
在開發過程當中,也可使用測試受權目錄進行開發測試,此時還應該將參與測試的我的微信號添加到測試白名單中,不然將出現對應的錯誤提示……
配置前請先理解頁面、目錄、URL 以及域名等幾個基本概念,並對本身所使用的框架的路由機制有一個大體瞭解。這樣你纔會知道本身正在配置的參數是個啥玩意兒,有什麼卵用……
這是因爲程序使用了網頁受權而公衆號沒有正確配置【網頁受權域名】所致。此時你須要登陸微信公衆平臺,在【開發】->【接口權限】頁面找到網頁受權獲取用戶基本信息進行配置並保存。
網頁受權域名應該爲經過 ICP 備案的有效域名,不然保存時沒法經過安全監測。
網頁受權域名即程序完成受權得到受權 code 後跳轉到的頁面的域名,通常狀況下爲你的業務域名。
網頁受權域名配置成功後會當即生效。
公衆號的網頁受權域名只可配置一個,請合理規劃你的業務,不然你會發現……受權域名不夠用哈。
在使用 JS-SDK 進行開發時,每一個頁面都須要調用 wx.config() 方法配置 JSPAI 參數。若是沒有正確配置 JSAPI 安全域名而且開啓了調試模式,此時就報此錯誤。遇到這個問題時,開發者須要登陸微信公衆平臺,進入【公衆號設置】->【功能設置】頁面,將項目所使用的域名添加至 【JSAPI 安全域名】列表中。
一個公衆號同時最多可綁定三個安全域名,而且這些域名必須爲經過 ICP 備案的一級或一級以上的有效域名。
JSAPI 安全域名每月限修改三次,修改任何一個都算,因此,請謹慎操做。
若是須要使用 JSAPI 調起支付功能,則支付目錄必須也在所配置的安全域名之下,而且須要將支付目錄添加至支付受權目錄。
相信對接公衆號通常是微信開發者進行開發過程當中最早進行的工做,而在這看似簡單的配置操做中,也可能會掉坑裏。
最多見的兩種狀況就以下:
確認你 「啓用」 了開發模式, token 驗證經過不表明啓用,保存後也不表明啓用。看到紅色 「停用」 才真正的是啓用了。
配置好URL(服務器地址)以及Token(令牌)後,點擊保存時提示token驗證失敗,出現這種狀況的緣由有多種,其中之一即是網絡不穩定,因此可嘗試屢次保存,若始終沒法經過再排查其它可能因素。
配置保存成功以後,向公衆號發送消息無任何反應,本身的消息處理程序也沒有被調用的記錄(無對應日誌)。這種狀況下若是你嘗試反覆停用和啓用服務器配置,可能忽然間驚奇地了現,問題莫名其妙的解決了。
使用在線調試工具的消息接口,http://mp.weixin.qq.com/debug/, 只要返回綠色的「請求成功」,就表明你的代碼沒有問題,請重複上面第4項再測試。
若是你在用什麼本地開發工具,或者什麼 ngrok 代理到本機這樣的開發方式,那麼失敗就很正常了,微信服務器到你機器的網絡延遲太大(仍是用服務器開發吧)。
請開發者理解服務器 TOKEN 驗證原理(官方文檔有說明)並謹記服務器驗證時使用 GET 方式訪問,而公衆平臺向你的服務器發送消息/數據則使用 POST 方式,因此服務器驗證成功以後,在某些啓用了 CSRF 驗證的框架裏,接收消息時可能還會遇到 CSRF 相關的問題,請根據本身項目實際狀況進行排查。
另外有的朋友的 Laravel 裏使用了 laravel-debugbar,這個組件的原理是在頁面輸出時在後面添加 HTML 來實現的,因此它會改變咱們返回給微信的內容,此時要麼卸載,要麼禁用掉它。
在使用了 Xdebug 的環境下可能出現這個問題。這是因爲 Xdebug 限制函數嵌套的最大層級數(默認爲100),當嵌套次數達到該值便會觸發 Xdebug 跳出嵌套並報此錯誤。
爲避免這個問題,能夠將 Xdebug 的 max_nesting_level 參數適當設置大一些,一般設置爲200就能夠了(固然可根據本身實際狀況設置爲更大的值)。
以下,修改 php.ini 配置文件後,重啓 Apache 或 php-fpm 服務便可。
xdebug.max_nesting_level=200