微信統一下單介面body為中文,報【簽名錯誤】的解決辦法
該處記錄的是本人在開發過程中遇到的問題以及解決的方案。
現象:微信支付,調微信的統一下單介面,本地jetty 和 tomcat 都可以調通,並能完成支付。但是部署到centos伺服器上之後,就一直報簽名錯誤。
解決:經反覆查詢,確定是請求介面時傳送的資料中,body是中文亂碼,進而查詢到xmap.toXML 方法生成xml 字串時,中文就已經是亂碼了。反覆修改編碼格式,無濟於事。
最終原因:tomcat搞得事,本地的tomcat是預設獲取本地機器的編碼格式,伺服器的tomcat使用的是伺服器的編碼格式。所以:在伺服器tomcat bin資料夾下修改
catalina.sh配置,JAVA_OPTS=
詳細說明:Tomcat執行jvm的編碼,為了保持專案在不同的環境下執行正常,不出編碼的問題,
Tomcat啟動的時候必須指定編碼,設定的編碼必須與開發的時候設定的編碼一致。
修改jvm編碼
Linux環境
在catalina.sh配置
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"
Windows環境
在catalina.bat配置
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8