1. 程式人生 > >Android微信支付整合和踩過的坑

Android微信支付整合和踩過的坑

近公司需要微信支付,所以不得不去看看微信支付文件。但是你懂得,那文件寫的真帶勁,看不懂。我直接放棄,開始整合。但是調起微信支付的時候:結果碼為-1,心裡一驚,肯定哪裡錯了,就開始找坑。所以把自己解決的過程分享給大家,讓整合微信支付成為很容易的一件事。

2、我們需要的資源其實有以下幾樣,在開始前,就這些轉備好吧
1)微信支付的APPID(還是在微信開放平臺檢視)


2)微信支付依賴包 libammsdk.jar(Demo中複製)
3)一個Activity類 >>> WXPayEntryActivity.java(Demo中複製,注意放的位置:必須在wxapi包下,就是這麼霸道)


3、這裡開始就可以寫程式碼了:

1)提交訂單資訊給後臺獲取加簽後的訂單資訊:這裡就是呼叫伺服器介面,看一下你需要傳給伺服器什麼收據了。比如我的專案中需要傳給伺服器一下的引數:

//票務id
mMap.put("TicketId",ticketId);
//
場次id mMap.put("SeasonId",seasonId); //主題id mMap.put("TeamId",teamId); //當前日期 mMap.put("BookingTime",date); //女士訂票人數 mMap.put("FemalePlayerCount",personTotalNv); //男士訂票人數 mMap.put("MalePlayerCount",personTotalNan); //支付型別:1:微信 mMap.put("PayType",1)等 這樣新增請求引數發起網路訪問。然後後去一般會給你還回一個是否提交訂單成功的Flag,如果提交訂單成功,這樣就可以獲取到加簽後
的訂單資訊(有可能專案根據是否提交訂單成功,如果成功還要發起一次網路訪問獲取加簽後的訂單資訊) 2)Gson解析獲取到的加簽訂單。如果用的是Retrofit那就是直接獲得到實體類(我的定義成WXOrderEntity),直接到第三步。 3)呼叫微信SDK
private IWXAPI api;
//呼叫微信SDK,發起支付
    private void doWXPay() {
        //例項化微信Api
        api= WXAPIFactory.createWXAPI(this,"wx6ba18110e2a3cbb2");
        //註冊
        api.registerApp("wx6ba18110e2a3cbb2");
        PayReq req = new PayReq();
        //應用的ID
        req.appId = mWXOrderEntity.getData().getAppid();
        //商戶號
        req.partnerId = mWXOrderEntity.getData().getPartnerid();
        //預支付交易會話
        req.prepayId = mWXOrderEntity.getData().getPrepayid();
        //拓展欄位
        req.packageValue = mWXOrderEntity.getData().getPackageX();
        //隨機字串
        req.nonceStr = mWXOrderEntity.getData().getNoncestr();
        //時間戳
        req.timeStamp = mWXOrderEntity.getData().getTimestamp();
        //簽名
        req.sign = mWXOrderEntity.getData().getSign();

        Logger.e(req.checkArgs()+"");//這是檢查你請求引數是否有誤,如果列印是false,請檢查你的請求引數是否是上面的幾個   
        Logger.e(api.sendReq(req)+""); //這表示能夠調起api,一般上面那個成功,這個沒有問題。兩個Log如果列印都是true,恭喜你離成功不遠了
        Toast.makeText(MyApp.getINSTANCE(), "正常調起支付", Toast.LENGTH_SHORT).show();
        api.sendReq(req);//這個是微信的api,傳送請求,這樣就交給微信了,剩下的就是使用者輸入密碼等,我們只要等著拿結果

    }

4)注意簽名,你要確認得到加簽後的訂單資訊,後臺是否已經簽名。如果伺服器端已經做過了簽名生成,那麼這裡直接拿著賦值給PayReq 物件即可,而且可以非常愉快的玩耍了,直接跳過這步。如果伺服器端沒有做,那麼還需要在本地進行簽名生成之後,再賦值。
簽名請參考:微信支付Demo

4、微信結果的回撥:
(1)必須在Manifest檔案中加入下面的:
  1. <!-- 微信支付回撥頁 -->  
  2.        <activity  
  3.            android:name="<span style="color:#FF0000;">.wxapi.WXPayEntryActivity</span>"
  4.            android:exported="true"
  5.            android:launchMode="singleTop">  
  6.        </activity>  
(2)確保WXPayEntryActivity在wxapi包下
(3)WXPayEntryActivity中拿到支付結果
  1. @Override
  2.     publicvoid onResp(BaseResp resp) {  
  3.         Logger.d(TAG, "onPayFinish, errCode = " + resp.errCode);  
  4.         if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {  
  5.             AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  6.             builder.setTitle("提示");  
  7.             builder.setMessage("微信支付結果" +String.valueOf(resp.errCode));  
  8.             builder.show();  
  9.         }  
  10.     }  
如果你的resp.errCode結果碼是1,那恭喜你支付成功了,可以大吉大利今晚吃雞。但是如果是-1,那也恭喜你和我一樣也掉進坑裡,支付失敗了。我們這時就需要去尋找失敗的原因了。
如果支付失敗並且你複製是我上面那段程式碼,應該是點選支付按鈕以後直接出現下面的介面:(而沒有調起微信,出現微信支付介面)


如果你是我上面描述的情況:一下我說的每一句話都非常的關鍵:
1、應用簽名的問題(如果你是按照我所說的添加簽名的,那就可以排除這個原因。如果你有整合微信登入或者分享,如果可以那也可以排除應用簽名的問題)
2、列印一下後臺簽名返回的資料,看看是否每一項都有資料。
3、訂單簽名問題。如果是訂單要自己簽名,請檢視官方Demo(一定仔細看看)。在生成簽名時,務必注意key的拼寫問題,比如必須拼appid而不是appId,必須拼prepayid而不是prepayId,如果拼接錯誤支付也是會失敗的。如果是後臺給的簽名請看下一步
4、後臺給的訂單簽名。我直接在這裡被坑。這是後臺的原因,應該是後臺拼接訂單的是否拼接錯誤導致的。(如果你也是後臺給的簽名請好好問一下後臺,特別是"noncestr",是否把它拼接成了"nonce_str",注意沒有下劃線,沒有下劃線,沒有下劃線,重要的事情說3遍。好多的後臺因為疏忽而拼接了下劃線,導致簽名錯誤而致使支付失敗的)5、如果上面這幾步都沒有錯誤,應該就可以支付成功了。成功的流程:點選支付,提交訂單後獲得加簽以後的訂單資訊,然後把加簽後的訂單資訊交給微信Api發起微信支付,如果請求引數都正確,就會出現微信支付介面,輸入密碼即可完成支付,
然後微信這是會給後臺一個非同步通知是否訂單支付成功,我們只需要在呼叫後臺給的介面,來判斷支付是否真的成功即可,注意之後結果是否成功應該以後臺為準,而不是微信的成功結果碼。(有問題可以留言)

相關推薦

Android支付整合

近公司需要微信支付,所以不得不去看看微信支付文件。但是你懂得,那文件寫的真帶勁,看不懂。我直接放棄,開始整合。但是調起微信支付的時候:結果碼為-1,心裡一驚,肯定哪裡錯了,就開始找坑。所以把自己解決的過程分享給大家,讓整合微信支付成為很容易的一件事。 2、我們需要的資源

Android 支付整合重點(已經看官方開發文件)

整合微信支付重點,適用於有整合經驗並且已經看過開發文件的同學 1.申請開通 按照官方文件步驟 (註冊平臺賬號——認證(300 如果失敗3次需再付300認證,資訊提前確認)——建立應用稽核(簽名用微信的提取工具)——開通支付功能——整合) 2.整合

Android支付整合流程及其常見錯誤

[支付寶整合傳送門:http://blog.csdn.net/hx7013/article/details/61476320] 一、你需要關心的東西 1.申請與認證 2.上傳金鑰(商戶KEY),包名和簽名的修改 3.服務端整合 4

React Native (IOSAndroid) 支付支付整合實戰(支付Android篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 支付

React Native (IOSAndroid) 支付支付整合實戰(IOS篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 微信

關於android支付 支付支付整合

最近專案中要整合微信和支付寶支付 在沒有接觸支付之間 覺得還是比較難的 但真正去實現的時候還是比較簡單的 就是有不少坑要去踩過之後才知道 支付寶支付 : 對於支付寶支付 我個人理解還是比較簡單的 https://open.alipay.com/platform/home.h

Android 支付支付整合

場景 隨著移動支付的興起,在我們的app中,會經常有整合支付的需求.這時候一般都會採用微信和支付寶的sdk 來整合 支付寶支付 在使用支付寶支付的過程中,我們是在伺服器端生成訂單,客戶端訪問介面,得到訂單資訊.然後調起支付,支付成功後支付寶會分別 非同步呼叫伺服器端

React Native (IOSAndroid) 支付支付整合實戰(支付服務端篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 微信

React Native (IOSAndroid) 支付支付整合實戰(支付寶服務端篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 支

Android支付詳細流程(包括手機端伺服器端)

相關檔案下載地址:http://download.csdn.net/detail/s_alics/9383437點選開啟連結 **************************************************************************

Android學習之 移動應用支付整合小結

       微信支付現在主要整合在:1、移動應用開發  2、網站應用開發  3、公眾賬號開發        本篇主要針對移動應用App整合微信支付,實際專案坑點分享! 一、既予之、與共之:平臺資源 3、微信支付指引和資源中心:微信支付接入指南和資源下載中心<強

Android支付功能整合【全攻略】

遵循:BY-SA 作者:譚東 時間:2016年10月28日 環境:Windows 7 Android版微信支付官方文件和Demo問題很多,官方也沒有及時更新和細化開發整合文件。 這裡分享我整合Android客戶端微信支付的思路和部分程式碼。希望對大家有幫

Android 支付支付支付 快速接入

先放上接入兩個支付平臺的官方文件地址 一、支付寶支付 匯入開發資源 在商戶應用工程的AndroidManifest.xml檔案裡面新增宣告: <activity android:name="com.ali

Android支付支付支付快速接入

一、支付寶接入1、建立應用並獲取APPID開發者中心中建立您的應用,會為您生成應用唯一標識(APPID),並且可以申請開通開放產品使用許可權,通過APPID您的應用才能呼叫開放產品的介面能力。在“我的應用”中按下圖方式檢視APPID。2、新增支付功能3、簽約(涉及到收費)4、

Android 支付的統一下單

準備工作 申請微信開發者賬號,新增應用及申請開通微信支付功能,如 檢視開通流程 統一下單的介面文件: 檢視介面 開發 ①下載sdk: sdk和demo下載 ②可以匯入包 在build.gradle檔案中,新增如下依賴即可: depende

android 支付,body為中文字元,簽名錯誤

微信支付訂單生產方法: /** * 根據您的訂單資訊 生成 微信產品支付訂單資訊 */ private String createWeChatOrder() { StringBuffer xml = new StringBuffer();

android支付詳細步驟

此篇僅限於android客戶端整合微信支付 微信支付和支付寶相比的話裡面的坑還是很多的,但是導包導的倒是很簡單,就在在build.gradle檔案中,新增一條依賴就行: dependencies { implementation 'com.tencent.mm.opensdk:wec

.NET支付整合例項

轉自https://blog.csdn.net/u013385913/article/details/46509631 微信端HTML頁面下單事件: document.getElementById('btn-wxpay')addEventListener('tap', function (e

Spring Boot入門教程(四十):支付整合-刷卡支付

一:準備工作 使用微信支付需要先開通服務號,然後還要開通微信支付,最後還要配置一些開發引數,過程比較多。 二:支付方式 刷卡支付(MICROPAY) :刷卡支付是使用者展示微信錢包內的“刷卡條碼/二維碼”給商戶系統掃描後直接完成支付的模式。主要應

Android支付無法掉起支付的原因

1.第一種原因就是上邊的這些引數有問題。一般都是祕鑰有問題。需自己登陸商家版後臺修改  2.需要知道微信支付是需要打包才能執行。這也是蛋疼的一點,測試只能通過log和Toast來推斷。掉不起來可以去微信開放平臺看自己配置的引數是否正確。 3.微信支付跟支付寶支付