android微信支付

由于近日項(xiàng)目中要用到微信支付,而且遇到的坑比較多,就寫了這一篇博文(PS:文采不好,勿噴勿噴),希望還處在坑中的朋友有所幫助。

1、先去微信公眾平臺申請應(yīng)用 ,成功之后,你還要去商戶平臺進(jìn)行驗(yàn)證,具體可以參考:http://kf.qq.com/faq/120911VrYVrA150906F3qqY3.html

成功之后,你就可以得到

appid、mch_id、app_key等一系列參數(shù)

注意:這里有一個(gè)坑,那就是你的應(yīng)用簽名要用一個(gè)簽名工具來獲取,之后我會上傳上去,還有微信規(guī)定調(diào)試的時(shí)候,你的簽名必須要和微信公眾平臺上面的簽名一致,這點(diǎn)很重要,簽名文件路徑為:C:\Users\Huang\.Android

如果在別的電腦上要測試的話,就必須替換掉這個(gè)debug.keystore簽名文件,但是每次更換簽名文件時(shí)必須重啟一下Android Studio或者eclipse。

2、先配置好權(quán)限和微信回調(diào)類WXPayEntryActivity,注意微信規(guī)定路徑必須是包名下面的wxapi文件夾的路徑,不然會造成回調(diào)不成功。

(2)獲取預(yù)支付交易會話id,并且根據(jù)微信官網(wǎng)查看需要傳的值,這點(diǎn)也很重要,不然調(diào)不起微信支付界面。

在此我封裝了一個(gè)WxUtil工具類,不知道要怎么傳的可以稍后去查看我寫的一個(gè)demo

然后用post方式綁定packageParams參數(shù)并訪問https://api.mch.weixin.qq.com/pay/unifiedorder,然后把返回來的內(nèi)容轉(zhuǎn)化為xml格式并進(jìn)行二次簽名,隨后通過sendReq方法調(diào)取微信支付。

3、不成功原因分析

(1)沒有調(diào)起支付界面,請檢查下有沒有WXPayEntryActivity注冊。

(2)簽名錯(cuò)誤

可以把自己的簽名與微信官網(wǎng)測試地址的簽名進(jìn)行對比,https://pay.weixin.qq.com/wiki/tools/signverify/,若為正確的話,可以檢查下自己的包名與密鑰,實(shí)在保證沒錯(cuò)的話可以試著重置一下密鑰。

(3)返回-1:

1、解決方法同上,再注意檢查一下lib下面的包有沒有導(dǎo)入進(jìn)來,appid有沒有錯(cuò)誤,參數(shù)有沒有傳錯(cuò)之類的,大部分都是由于簽名不對造成的;

2、建議清理一下微信緩存。

最后,由于微信不斷更新,目前此版本基于2016.5.3的版本。

(4)

1、請求的時(shí)候獲取不到prepayid。

原因:setParameter("total_fee", "1"); //商品金額,以分為單位

total_fee里面的參數(shù)是否有小數(shù)點(diǎn),或者測試的時(shí)候修改為了0.01;

需檢查:total_fee傳入的參數(shù)是否為整數(shù);

2、請求支付跳轉(zhuǎn)到微信支付時(shí),商品描述為亂碼:

原因:.setParameter("input_charset", "GBK"); //字符編碼

修改編碼為UTF-8 ,

3、total_fee 錢數(shù)*100 精度丟失問題

String.valueOf((int)(moeny * 100)?

應(yīng)為

float moeny=19.79f;

BigDecimal re1=new BigDecimal(Float.toString(moeny));

BigDecimal re2=new BigDecimal(Float.toString(100.00f));

System.out.println((int)re1.multiply(re2).floatValue());

另外如果使用了微信支付的demo的方法,需將TenpayUtil中的getCharacterEncoding放回編碼修改為utf-8

4、當(dāng)描述為中文時(shí),應(yīng)該將xml轉(zhuǎn)碼下,變成

return newString(xmlstring.toString().getBytes(),"ISO8859-1");

效果如下:

源碼下載:http://download.csdn.net/detail/u013158983/9508889(內(nèi)含簽名工具)

說明:org.apache.http網(wǎng)絡(luò)訪問包已經(jīng)被android淘汰,如果想用須在gradle加上useLibrary 'org.apache.http.legacy'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.后臺設(shè)置 商戶在微信開放平臺申請開發(fā)應(yīng)用后,微信開放平臺會生成APP的唯一標(biāo)識APPID。由于需要保證支付安全...
    丶Lost_Deer閱讀 1,217評論 0 1
  • 準(zhǔn)備工作在應(yīng)用集成微信支付之前,我們在微信開放平臺必須要個(gè)開發(fā)者賬戶1.注冊完之后創(chuàng)建一個(gè)移動應(yīng)用,并獲取APPi...
    小碼哥教育520it閱讀 1,184評論 0 4
  • 由于公司運(yùn)營需要,Android客戶端要增加微信支付。在看了幾遍官方文檔之后,加上之前有集成微信分享的經(jīng)驗(yàn),所以很...
    Kerry202閱讀 1,499評論 2 8
  • 現(xiàn)在的支付潮流莫過于微信跟支付寶了,最近我們項(xiàng)目涉及到會員需求,就用到微信支付跟支付寶支付,說實(shí)話接入之前會覺得這...
    Luke_單車閱讀 16,030評論 15 52
  • 前段時(shí)間寫過一篇關(guān)于安卓第三方登錄之微信登錄的文章,后面有朋友留言,希望出一篇關(guān)于微信支付的文章,有朋友發(fā)現(xiàn)微信支...
    萬戶猴閱讀 2,855評論 4 15

友情鏈接更多精彩內(nèi)容