bug隨筆
一 起因。
在做一個點餐類小程序,本地測試ok。上測試的時候,突然就報錯,微信退款失敗。
二 Debug。
1. Debug trace到頁面直接顯示的是 : Type is not supported。一個莫名其妙的錯誤。
2. 定位代碼,發現用的是 easywechat 庫。以為是測試環境 composer 安裝錯了版本,或依賴庫有沖突。於是重新安裝,無果。
3. 網上搜羅了一下,Guzzle json_encode Type is not supported; 出來有價值的答案是 StackOverflow的前2條。 仔細看了回答,又對比了代碼,發現不了問題。
4. 嘗試不用 easywechat庫,使用微信支付SDK,結果調用微信退款,報錯 400 the ssl certificatie error;
5. 遂在微信開放社區搜索答案,但發現官方回答並不夠清晰,很多答案基本是這樣,然底下評論都在追問如何填寫。
6. 發現是證書路徑問題后,決定先使用 file_get_contents() 檢查所填路徑是否能夠讀取到文件。結果發現路徑下並無文件。
7. 問題一下明確了,再深入排查,發現點餐系統的會將 所填寫的微信配置,放入到 runtime/ 里面,然后后台有個清理緩存功能,點了清理后,runtime下所有文件被刪除。真相大白。重新將證書放入到此目錄后,問題解決。
三 反思。
1. Guzzle json_encode Type is not supported; 這個錯誤, StackOverflow 給出的解決方案是正確的。但是,並不適合我遇到的情況,嘗試了上面給的方案,依舊無效。
2. 微信退款,報錯 400 the ssl certificatie error;這個錯誤的排查方式是:首先,確保 證書 放在了可讀寫目錄,可使用 file_get_contents() 檢查所填路徑是否能夠讀取到文件 ;其次,使用SDK時,需要配置 app_id , secret_key,證書路徑等參數, 此時最好填上證書的絕對路徑。
完。