之前我認為銀聯支付可能需要和各個銀行對接比較麻煩,但是實際上並不需要,官方有現成的sdk,先看一下官方給我們的銀聯支付流程圖:
大家不要被這張圖片搞懵逼的了,其實很簡單,這裡我將其分為5小步。
第一步:根據官方文檔選擇符合自己的sdk
官方文檔:
https://open.unionpay.com/ajweb/help/file/techFile?productId=3
第二步:將相對應的.so文件copy到 自己的工程裡面去。
特別注意:
.so文件要放在src/main 目錄下,和Java文件並行。還有就是把用到的權限複製到自己項目中)
第三步: 和支付寶一樣,APP客戶端帶著這些訂單號向服務器後臺請求訂單號orderNo
第四步:服務器後臺接收到購買信息之後,將信息提交給銀聯後臺,銀聯接收到後臺之後給服務器返回tn號
第五步:開啟調用銀聯支付。APP客戶端帶著這個流水號,也就是第三步中服務器返回的tn號,調用銀聯SDK所提供的方法
注意:
這個訂單流水號為21位純數字號
調用方法: UPPayAssistEx.startPay(this, null, null, tn, mMode);
結果返回:
處理銀聯手機支付控件返回的支付結果 調用銀聯支付後,返回app的時候用了,看返回結果傳,成功,失敗,或者是什麼返回。
<code>@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { /** 步驟3:處理銀聯手機支付控件返回的支付結果 */ if(data == null) { return; } String msg = ""; /** * 支付控件返回字符串 success、fail、 cancel分別代表支付成功,支付失敗,支付取消 */ String str = data.getExtras().getString("pay_result"); if (str.equalsIgnoreCase("success")) { // 如果想對結果數據驗籤,可使用下面這段代碼,但建議不驗籤,直接去商戶後臺查詢交易結果 // result結構見 result data參數說明 if(data.hasExtra("result.data")) { String result = data.getExtras().getString("result.data"); try { JSONObject resultJson = new JSONObject(result); String sign = resultJson.getString("sign"); String dataOrg = resultJson.getString("data"); //此處的 verif建議送去商戶後臺做驗籤 //如要放在手機端驗,則代碼必須支持更新證書 boolean ret = verify(dataOrg,sign, mnode); if (ret) { //驗籤成功,顯示支付結果 msg = "支付成功!"; } else { // 驗籤失敗 msg = "支付失敗!"; } }catch (JSONException e) { log.error("json error", e); } } // 結果 resultdata為成功時,去商戶後臺查詢一下再展示成功 msg = "支付成功!"; } else if (str.equalsIgnoreCase("fail")) { msg = "支付失敗!"; } else if(str.equalsIgnoreCase("cancel")) { msg = "用戶取消支付!"; } }/<code>
最後注意在調用:
/*****************************************************************
* mMode參數解釋: "00" - 啟動銀聯正式環境 "01" - 連接銀聯測試環境
*****************************************************************/
private final String mMode = "00";
注意:
tn值就是上面第三後臺給的tn,給到服務器那裡,這裡我這邊是通過後臺請求下來的,關於mMode,看第一步驟,自己改一下就行了,00開發環境,01測試環境。但是要注意,這個只是個回調接口方法。
閱讀更多 湛神帶你寫代碼 的文章