关于Android 微信APP支付开发中遇到的问题
不得不說,微信真的很坑。首先,微信支付的類型有下面幾種。
如果你是做微信APP支付,也就是在你自己的APP中集成微信SDK,那你需要在微信開放平臺(注意是“開放平臺”,不是公眾平臺或其他的)申請,通過審核之后,你會得到一些接口開發(fā)中需要的東西,比如:
其中 APP_ID 是你在開放平臺上綁定你的APP成功后給你提供的,MCH_ID是你申請APP支付功能通過之后給你提供的,而最關(guān)鍵的API_KEY,這個是用來簽名的,非常重要注意別和AppSecret混淆了,API_KEY即你的商戶密鑰,是你在商戶平臺上自己設(shè)置的一個32位數(shù)字和英文字母組成的密鑰,在API安全中可以找到設(shè)置的地方。
一定要看最新的接口文檔,我寫這個的時候到V3版了。微信支付要簽兩次名,第一次是生成預支付訂單,第二次是用預支付訂單去調(diào)起微信支付。注意你簽名的數(shù)據(jù)字段
一定要符合要求,比如必須有的不能少,非必要的如果寫上去了就不能為空,拼接的順序必須按字母順序來,比如:
就是像appid→body→mch_id→nonce_str 這樣子的順序。
不知道你有沒注意我這個body中寫參數(shù)是中文,沒錯,當你的參數(shù)里有中文的時候,在第一步生成預支付訂單你就不會成功,永遠返回“簽名錯誤”,該死的微信就是不告訴你
是什么原因,直接是“簽名錯誤”。這其實是編碼問題,你只需要統(tǒng)一編碼為“UTF-8”就可以了。不要去單獨將body的內(nèi)容改為“UTF-8”編碼,像這樣:
注意,我這里是直接將簽名之后,genPackageSign(packageParams)這個方法就是將參數(shù)簽名,然后通過toXml(packageParams)拼接成XML格式,最后將得到的xmlstring用
new String(xmlstring.getBytes("UTF-8"),"ISO-8859-1"); 處理之后再去請求預支付訂單,就不會出現(xiàn)簽名錯誤的問題了。
最后提一點,你應(yīng)用的簽名和包名一定要和你在微信開放平臺綁定的簽名、包名一致,不然也會“簽名錯誤”或無法完成支付。至于AndroidManifest里怎么設(shè)置,相信你看
一看微信提供的APP支付demo應(yīng)該能弄明白。
總結(jié)
以上是生活随笔為你收集整理的关于Android 微信APP支付开发中遇到的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五分钟读懂UML类图
- 下一篇: 课外知识----浏览器存储技术