overtue wechat curl: (60) SSL certificate problem: unable to get local issuer certificate

這是 SSL 證書問題所致,在使用 SDK 調用微信支付等相關的操做時可能會遇到報 「SSL certificate problem: unable to get local issuer certificate」 的錯誤。php

微信公衆平臺提供的文檔中建議對部分較敏感的操做接口使用 https 協議進行訪問,例如微信支付和紅包等接口中涉及到操做商戶資金的一些操做。
wechat SDK 遵循了官方建議,因此在調用這些接口時,除了按照官方文檔設置操做證書文件外,還須要保證服務器正確安裝了 CA 證書。laravel

    1. 下載 CA 證書api

      你能夠從 http://curl.haxx.se/ca/cacert.pem 下載 或者 使用微信官方提供的證書中的 CA 證書 rootca.pem 也是一樣的效果。安全

    2. 在 php.ini 中配置 CA 證書服務器

      只須要將上面下載好的 CA 證書放置到您的服務器上某個位置,而後修改 php.ini 的 curl.cainfo 爲該路徑(絕對路徑!),重啓 php-fpm 服務便可。微信

      curl.cainfo = /path/to/downloaded/cacert.pem

      注意證書文件路徑爲絕對路徑!以本身實際狀況爲準。網絡

      其它修改 HTTP 類源文件的方式是不容許的。php7

      cURL error 56: SSLRead() return error -9806

      目前在 OSX 下,發現使用 HomeBrew 裝的 PHP 7.0 有這個問題,解決方案是從新 brew 安裝 PHP:微信開發

      $ brew install homebrew/php/php70 --with-homebrew-openssl --with-homebrew-curl --without-snmp -vvv

      驗證:app

      $ php -i | grep 'OpenSSL support'
       
      OpenSSL support => enabled
      OpenSSL support => enabled

      支付失敗!當前頁面的 URL 未註冊

      這是因爲微信支付受權目錄未正確配置引發的。此時開發者應該登陸微信公衆平臺,進入【微信支付】->【開發設置】進行設置。

      1. 公衆號可添加3個支付受權目錄,知足不一樣應用使用同一個公衆號進行支付的業務需求。

      2. 正確的【支付受權目錄】應以 http:// 或 https:// 開頭,並以正斜槓 / 結尾,受權目錄所包含的域名必須通過 ICP 備案。

      3. 支付受權目錄需細化至二級或三級目錄。

      4. 全部實際調起微信支付請求的頁面都必需要所配置的支付受權目錄之下。

      5. 在開發過程當中,也可使用測試受權目錄進行開發測試,此時還應該將參與測試的我的微信號添加到測試白名單中,不然將出現對應的錯誤提示……

      配置前請先理解頁面、目錄、URL 以及域名等幾個基本概念,並對本身所使用的框架的路由機制有一個大體瞭解。這樣你纔會知道本身正在配置的參數是個啥玩意兒,有什麼卵用…… 

      redirect_url 參數錯誤

      這是因爲程序使用了網頁受權而公衆號沒有正確配置【網頁受權域名】所致。此時你須要登陸微信公衆平臺,在【開發】->【接口權限】頁面找到網頁受權獲取用戶基本信息進行配置並保存。

      1. 網頁受權域名應該爲經過 ICP 備案的有效域名,不然保存時沒法經過安全監測。

      2. 網頁受權域名即程序完成受權得到受權 code 後跳轉到的頁面的域名,通常狀況下爲你的業務域名。

      3. 網頁受權域名配置成功後會當即生效。

      4. 公衆號的網頁受權域名只可配置一個,請合理規劃你的業務,不然你會發現……受權域名不夠用哈。

      [JSAPI] config: invalid url domain

      在使用 JS-SDK 進行開發時,每一個頁面都須要調用 wx.config() 方法配置 JSPAI 參數。若是沒有正確配置 JSAPI 安全域名而且開啓了調試模式,此時就報此錯誤。遇到這個問題時,開發者須要登陸微信公衆平臺,進入【公衆號設置】->【功能設置】頁面,將項目所使用的域名添加至 【JSAPI 安全域名】列表中。

      1. 一個公衆號同時最多可綁定三個安全域名,而且這些域名必須爲經過 ICP 備案的一級或一級以上的有效域名。

      2. JSAPI 安全域名每月限修改三次,修改任何一個都算,因此,請謹慎操做。

      3. 若是須要使用 JSAPI 調起支付功能,則支付目錄必須也在所配置的安全域名之下,而且須要將支付目錄添加至支付受權目錄。

      token驗證失敗、向公衆號發送消息無任何反應

      相信對接公衆號通常是微信開發者進行開發過程當中最早進行的工做,而在這看似簡單的配置操做中,也可能會掉坑裏。
      最多見的兩種狀況就以下:

      1. 確認你 「啓用」 了開發模式, token 驗證經過不表明啓用,保存後也不表明啓用。看到紅色 「停用」 才真正的是啓用了。

      2. 配置好URL(服務器地址)以及Token(令牌)後,點擊保存時提示token驗證失敗,出現這種狀況的緣由有多種,其中之一即是網絡不穩定,因此可嘗試屢次保存,若始終沒法經過再排查其它可能因素。

      3. 配置保存成功以後,向公衆號發送消息無任何反應,本身的消息處理程序也沒有被調用的記錄(無對應日誌)。這種狀況下若是你嘗試反覆停用和啓用服務器配置,可能忽然間驚奇地了現,問題莫名其妙的解決了。

      4. 使用在線調試工具的消息接口,http://mp.weixin.qq.com/debug/, 只要返回綠色的「請求成功」,就表明你的代碼沒有問題,請重複上面第3項再測試。

      5. 若是你在用什麼本地開發工具,或者什麼 ngrok 代理到本機這樣的開發方式,那麼失敗就很正常了,微信服務器到你機器的網絡延遲太大(仍是用服務器開發吧)。

      請開發者理解服務器 TOKEN 驗證原理(官方文檔有說明)並謹記服務器驗證時使用 GET 方式訪問,而公衆平臺向你的服務器發送消息/數據則使用 POST 方式,因此服務器驗證成功以後,在某些啓用了 CSRF 驗證的框架裏,接收消息時可能還會遇到 CSRF 相關的問題,請根據本身項目實際狀況進行排查。
      另外有的朋友的 Laravel 裏使用了 laravel-debugbar,這個組件的原理是在頁面輸出時在後面添加 HTML 來實現的,因此它會改變咱們返回給微信的內容,此時要麼卸載,要麼禁用掉它。

      Maximum function nesting level of ‘100’ reached, aborting!

      在使用了 Xdebug 的環境下可能出現這個問題。這是因爲 Xdebug 限制函數嵌套的最大層級數(默認爲100),當嵌套次數達到該值便會觸發 Xdebug 跳出嵌套並報此錯誤。

      爲避免這個問題,能夠將 Xdebug 的 max_nesting_level 參數適當設置大一些,一般設置爲200就能夠了(固然可根據本身實際狀況設置爲更大的值)。

      以下,修改 php.ini 配置文件後,重啓 Apache 或 php-fpm 服務便可。

相關文章
相關標籤/搜索