微信支付中文簽名錯誤

最近由於公司須要,要作一個微信支付,碰到一個簽名的問題。 折騰了我兩天,鬱悶呀java

一、先說一下,簽名的問題,按照規則排序就不說了,最後說一下編碼  tomcat

data=new String( data.getBytes( "UTF-8"),"ISO8859-1" ); 微信

二、第二個是重點函數

這個也是對的,關鍵是這個改完了,還簽名錯誤 最奇葩的是junit 單元測試時過了的,可是 在生產環境中,就是有問題。而後就是各類折騰,首先仍是測試,把中文換掉,OK的,說明仍是編碼的問題。而後再檢查httpclient ,提交時候的編碼,各類比對,問題之後。後來發現,在沒有提交的時候,簽名已經有問題了,比對內容,UE,而後人眼比對,各類無奈呀,最後,直接兩個str equals,竟然是true ,而後傻臉了,最後就是想tomcat 和junit 有什麼不一樣,既然是java ,那麼默認的確定是UTF-8,一個噢然的機會,撇了一個簽名函數 Md5 簽名的參數是 byte ,須要把 String 轉爲byte ,而後就改了.getBytes("UTF-8") ,而後就OK了 ,後來就像這個問題。單元測試

三、結論測試

在junit  下 str.getBytes()==str.getBytes("UTF-8")微信支付

在tomcat7 下str.getBytes()==str.getBytes("GBK"),編碼

tomcat 版本是 7   排序

不是說java 默認下都是UTF-8 麼,爲何會這樣呢?get

相關文章
相關標籤/搜索