手機APP整合銀聯支付控制項

來源:互聯網
上載者:User

標籤:

長話短說,本文根據銀聯官方說明文檔,簡單總結下,並且說明下中途碰到問題該如何解決。

 

一、開發前的準備工作
1. 開啟https://open.unionpay.com/,後續說的文檔下載、FAQ查詢等都在這個平台操作。
2. 下載規範和開發包。協助中心-下載-產品介面規範-手機控制項支付產品介面規範,協助中心-下載-產品介面規範-手機控制項支付產品技術開發包。
3. 開發人員都請先看下6.2的消費的交易流程。

 

流程圖說明:
(1)使用者在用戶端中點擊購買商品,用戶端發起訂單產生請求到商戶後台;
(2)商戶後台收到訂單產生請求後,按照《手機控制項支付產品介面規範》組織並推送訂單資訊至銀聯後台;
(3)銀聯後台接收訂單資訊並檢查通過後,產生對應交易流水號(即TN),並回複交易流水號至商戶後台(應答要素:交易流水號等);
(4)商戶後台接收到交易流水號,將交易流水號返回給用戶端;
(5)用戶端通過交易流水號(TN)調用支付控制項;
(6)使用者在支付控制項中輸入相關支付資訊後,由支付控制項向銀聯後台發起支付請求;
(7)支付成功後,銀聯後台將支付結果通知給商戶後台;
(8)銀聯將支付結果通知支付控制項;
(9)支付控制項顯示支付結果並將支付結果返回給用戶端;
注: 本文檔主要關註上述流程中(5)、(9)部分的實現
目前各個平台支援的裝置情況如下:
Android平台SDK主要適用於Android 2.1及以上版本的終端裝置;
iOS版本支付控制項適用iOS 6.0及以上版本終端裝置。


4. 相關測試參數:
如果已簽約,有自己的測試商戶,則直接用自己的商戶號測試,測試認證開發包裡都有。* 盡量用真實商戶號測試,防止有時候參數配錯能儘早發現。
如果沒有簽約,或者商戶號尚未分配,請在平台裡自行擷取商戶並且開交易許可權,方法為:
a) 左上方註冊;
b) 登陸後右上方我的測試-測試參數
c) 我的測試-產品-選下自己整合的。

測試卡號資訊:(此類資訊僅供測試,不會發生正式交易)
借記卡:6226090000000048
手機號:18100000000
密碼:111101
簡訊驗證碼:123456
(簡訊驗證碼記得點下擷取驗證碼之後再輸入)--如果提示簡訊驗證碼錯誤[8100201],要看下是測試環境還是生產環境,另外控制項版本是否是最新的

貸記卡:6226388000000095;
手機號:18100000000;
cvn2:248;
有效期間:1219;
簡訊驗證碼:123456
(簡訊驗證碼記得點下擷取驗證碼之後再輸入)


二、用戶端開發步驟
1. 參考文檔《中國銀聯手機支付控制項使用指南》(該文檔位於前台開發包的doc目錄下),建立一下工程。
2. 在後台開發實現消費(擷取tn)請求前,App開發可以看看demo代碼怎麼調起控制項的,demo裡預設由銀聯的一個商戶模擬擷取tn(http://202.101.25.178:8080/sim/gettn或http://101.231.204.84:8091/sim/getacptn),之後需要改從商戶自己的後台那裡擷取tn的。
3. 後台開發完成消費請求後,與後台開發商討一下後台和app間傳遞tn的方式。
4. 改為從自己後台tn做測試。
5. 自行增加其他商務邏輯。

 

這裡介紹下,用戶端整合jar包的方式,如,一目瞭然

 

控制項的調用(BYbrid外掛程式方式):

public class PayPlugin extends CordovaPlugin {    @Override    public boolean execute(String action, JSONArray args,            CallbackContext callbackContext) throws JSONException {                String tn = args.getString(0);                if(action.equals("unionPay")) {             UPPayAssistEx.startPayByJAR(cordova.getActivity(),                      PayActivity.class, null, null, tn, "00");        }                return super.execute(action, args, callbackContext);    }}
View Code

返回結果處理(在MainActivity裡面處理):

@Override    public 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")) {            msg = "支付成功!";        } else if (str.equalsIgnoreCase("fail")) {            msg = "支付失敗!";        } else if (str.equalsIgnoreCase("cancel")) {            msg = "使用者取消了支付";        }        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();    }
View Code

 

整合方式說明:

安卓分為靜態庫整合和apk接入兩種方式:Apk接入方式、靜態庫整合。
Apk接入方式:調用startPay方法,調起手機中單獨安裝的控制項。
靜態庫整合:調用startPayByJar方法,調起內建在商戶app裡的控制項。

2種方式對比:

Apk接入方式:控制項為獨立安裝。把demo代碼中未安裝控制項時的代碼修改為從銀聯官網下載控制項apk後,商戶就可以不用關心控制項的版本了。控制項apk:http://mobile.unionpay.com/getclient?platform=android&type=securepayplugin。

靜態庫整合:安裝完商戶app之後不需要再安裝一次控制項,但是商戶需關心控制項版本是否升級。另外iOS也是靜態庫整合,同時需要整合iOS的推薦用此方法,2邊一致。

 

* 遇到問題可到https://open.unionpay.com/先自行看看能否解決:1) 如果是代碼異常:協助中心-FAQ中把異常拷貝一小段搜尋;或可以到FAQ的開發問題類別下,搜“安卓”或“iOS”可搜到對應的全量開發問題。2) 如果是控制項出錯,報錯資訊有7位元字:技術整合-應答碼,輸入7位元字搜尋。3) 如果是控制項出錯,沒有報錯資訊或沒有7位元字:協助中心-FAQ-測試問題,搜“app”可搜到控制項的全量測試問題。* 開發包中有pro和不帶pro的,請使用不帶pro的開發包,pro的開發包因包含一般接入方不使用的特殊功能,有些代碼需要特殊處理。* 安卓用startPay還是用startPayByJar的問題參考FAQ“apk方式和jar方式有何區別”。

 

三、後台開發步驟
1. 開啟後台開發包,找到對應語言\範例程式碼檔案夾,看下readme.txt,按步驟部署、修改設定檔等。
2. 其中Form_6_2_AppConsume的介面可擷取tn,請跟用戶端開發確定一下後台和app間傳遞tn的方式,最簡單的方法就是直接在頁面列印tn,不過部分語言直接僅列印tn的時候會帶分行符號,建議手機開發在收到tn的時候trim一下。
3. 後續參考readme完成。

 

簡單介紹下後台擷取tn的方法:

/**         * 組裝請求報文         */        Map<String, String> data = new HashMap<String, String>();        // 版本號碼        data.put("version", "5.0.0");        // 字元集編碼 預設"UTF-8"        data.put("encoding", "UTF-8");        // 簽名方法 01 RSA        data.put("signMethod", "01");        // 交易類型 01-消費        data.put("txnType", "01");        // 交易子類型 01:自助消費 02:訂購 03:分期付款        data.put("txnSubType", "01");        // 業務類型        data.put("bizType", "000201");        // 渠道類型,07-PC,08-手機        data.put("channelType", "08");        // 前台通知地址 ,控制項接入方式無作用        data.put("frontUrl", "http://localhost:8080/ACPTest/acp_front_url.do");        // 後台通知地址        data.put("backUrl", "http://222.222.222.222:8080/ACPTest/acp_back_url.do");        // 接入類型,商戶接入填0 0- 商戶 , 1: 收單, 2:平台商戶        data.put("accessType", "0");        // 商戶號碼,請改成自己的商戶號        data.put("merId", "888888888888888");        // 商戶訂單號,8-40位元字字母        data.put("orderId", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));        // 訂單發送時間,取系統時間        data.put("txnTime", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));        // 交易金額,單位分        data.put("txnAmt", "1");        // 交易幣種        data.put("currencyCode", "156");        // 請求方保留網域,透傳欄位,查詢、通知、對賬檔案中均會原樣出現        // data.put("reqReserved", "透傳資訊");        // 訂單描述,可不上送,上送時控制項中會顯示該資訊        // data.put("orderDesc", "訂單描述");        data = signData(data);        // 交易請求url 從設定檔讀取        String requestAppUrl = SDKConfig.getConfig().getAppRequestUrl();        Map<String, String> resmap = submitUrl(data, requestAppUrl);        System.out.println("請求報文=["+data.toString()+"]");        System.out.println("應答報文=["+resmap.toString()+"]");    

如上 resmap.get("tn"); 就是我們所需要的交易流水號。

 

* 遇到問題可到https://open.unionpay.com/先自行看看能否解決:1) 如果是代碼異常:協助中心-FAQ中把異常拷貝一小段搜尋;或可以到FAQ的開發問題類別下,搜“java”、“c#”、“php”可搜到對應的全量開發問題。2) 如果是正常收到應答respcode非00,可以看一下respMsg,裡面的7位元字在平台上技術整合-應答碼搜尋。3) 如果是其他錯,在FAQ的測試問題類別下看看是否有自己遇到的問題。

 

最重要的一點:

開發過程中難免碰到一些痛點無法獨立解決,這時可以聯絡銀聯的客服:

https://open.unionpay.com/ajweb/help?id=291

 

入網流程問題

業務申請和諮詢,可發送郵件至[email protected]或電話021-50362428,銀聯有專門的人員進行處理。其他專項服務:請見《業務運營服務指引(商戶) 》日常業務運營服務。

 

入網測試問題
您可發送郵件到[email protected]郵箱,(郵件標題為:商戶號+商戶名稱+聯絡QQ),供應商戶號和聯絡QQ,銀聯測試服務專員會將商戶介面人的聯絡QQ加入到銀聯統一服務QQ中提供支援服務(商戶也可以通過服務電話021-38929999-2049,來提供自己的商戶號和聯絡QQ)

代收、訂購、無跳轉支付產品暫不支援自助測試,請見諒。

 

人工服務時間:工作日9:00-11:30,13:00-17:00

手機APP整合銀聯支付控制項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.