項目裡實現銀聯支付,比你想象的更簡單

之前我認為銀聯支付可能需要和各個銀行對接比較麻煩,但是實際上並不需要,官方有現成的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測試環境。但是要注意,這個只是個回調接口方法。


分享到:


相關文章: