銀聯支付

来源:http://www.cnblogs.com/jfr0524/archive/2016/01/15/5132285.html
-Advertisement-
Play Games

一、概述銀聯手機支付控制項(以下簡稱支付控制項),主要為合作商戶的手機客戶端或手機Web網站提供安全、便捷的支付服務。目前支付控制項支持Android和iOS兩個平臺,用戶通過在支付控制項中輸入銀行卡卡號、手機號、密碼(借記卡和預付卡)或者CVN2、有效期(信用卡)、驗證碼等要素完成支付。二、支付流程介紹通...


一、概述

銀聯手機支付控制項(以下簡稱支付控制項),主要為合作商戶的手機客戶端或手機Web網站提供安全、便捷的支付服務。目前支付控制項支持Android和iOS兩個平臺,用戶通過在支付控制項中輸入銀行卡卡號、手機號、密碼(借記卡和預付卡)或者CVN2、有效期(信用卡)、驗證碼等要素完成支付。

二、支付流程介紹

通過支付控制項進行交易的流程如下圖:

 

流程圖說明:

(1)用戶在客戶端中點擊購買商品,客戶端發起訂單生成請求到商戶後臺;

(2)商戶後臺收到訂單生成請求後,按照《UPMP商戶接入介面規範》組織並推送訂單信息至銀聯後臺;

(3)銀聯後臺接收訂單信息並檢查通過後,生成對應交易流水號(即TN),並回覆交易流水號至商戶後臺(應答要素:交易流水號等);

(4)商戶後臺接收到交易流水號,將交易流水號返回給客戶端;

(5)客戶端通過交易流水號(TN)調用支付控制項;

(6)用戶在支付控制項中輸入相關支付信息後,由支付控制項向銀聯後臺發起支付請求;

(7)支付成功後,銀聯後臺將支付結果通知給商戶後臺;

(8)銀聯將支付結果通知支付控制項;

(9)支付控制項顯示支付結果並將支付結果返回給客戶端;

註: 本文檔主要關註上述流程中(5)、(9)部分的實現

目前各個平臺支持的設備情況如下:

Android平臺SDK主要適用於Android 2.1及以上版本的終端設備;

iOS版本支付控制項適用iOS 5.1及以上版本終端設備。

二、測試帳號

  • 提供測試使用卡號、手機號信息(此類信息僅供測試,不會發生正式交易)

招商銀行預付費卡:

卡號:6226 4401 2345 6785

密碼:111101

三、iOS客戶端

本小節提供給那些具有一定iOS編程經驗和瞭解面向對象概念的讀者使用。

SDK文件所在目錄:upmp_iphone/sdk,以下部分所說文件,均在該目錄中查找。

  1. SDK說明

SDK分為以下兩個版本:

  1. 支持純無卡交易靜態庫,以下簡稱UPPayPlugin,包含文件:

UPPayPlugin.h

UPPayPluginDelegate.h

libUPPayPlugin.a

  1. 支持純無卡交易和VIPOS音頻口支付靜態庫,以下簡稱UPPayPluginPro,包含文件:

UPPayPluginPro.h

UPPayPluginDelegate.h

libUPPayPluginPro.a

  1. 介面說明
  1.  

 

各個參數的介紹如表3-1:

表3-1 介面參數說明

 

  1. 添加SDK包
  1. 根據商戶選擇的SDK版本,將sdk/inc目錄和sdk/libs目錄下對應版本的三個文件添加到UPPayDemo工程中;
  2. 如果你選擇的是UPPayPlugin版本,添加QuartzCore.framework、Security.framework到工程中;
  3. 如果你選擇的是UPPayPluginPro版本,添加QuartzCore.framework、AudioToolbox.framework, CoreAudio.framework、 MediaPlayer.framework, AVFoundation.framework和Security.framework到工程中;
  4. 在工程的Build Settings中找到Other Linker Flags中添加-ObjC巨集;
  1. 調用插件
  1. 在需要調用支付控制項的源文件內引用頭文件UPPayPlugin.h或UPPayPluginPro.h(註意:如果工程的compile source as 選項的值不是Objective–C++,則引用此頭文件的文件類型都要改為.mm)
  2. 通過調用

  + (BOOL)startPay:(NSString*)tn 

mode:(NSString*)mode 

viewController:(UIViewController*)viewController 

delegate:(id<UPPayPluginDelegate>)delegate;

實現控制項的調用

  1. 處理支付結果

銀聯手機支付控制項有三個支付狀態返回值:success、fail、cancel,分別代表:支付成功、支付失敗、用戶取消支付。這三個返回狀態值以字元串的形式作為回調函數參數(NSString*)result返回。通過在工程中添加頭文件“UPPayPluginDelegate.h”,在處理交易結果的界面,實現UPPayPluginDelegate介面,根據該頭文件中的回調函數:-(void)UPPayPluginResult:(NSString*)result來實現回調方法,從而可以根據支付結果的不同進行相關的處理。

四、Android客戶端

本小節提供給那些具有一定Android編程經驗和瞭解面向對象概念的讀者使用。

  1. SDK包說明

 

SDK分為以下兩個版本:

  1. 支持純無卡交易版本,該版本主要位於upmp_android/sdknocard目錄下:

 

apk目錄下包括了通過apk方式接入的UPPayPluginEx.apk

jar目錄下包括了靜態庫集成方式所需要的jar包、so文件(支持arm,armv7,x86和mips平臺)和資源文件。

註意:

data.bin文件為圖片資源文件,必須存放在工程的res/drawable目錄下;

UPPayPluginEx.jar為jar包形式的控制項,必須存放在工程的libs目錄下;

libentryex.so為動態庫文件,請根據需要存放於工程的libs/xxx/目錄下,其中xxx為armeabi,armeabi-v7a,mips,x86之一。

  1. 支持純無卡交易和有卡交易的版本,有卡交易支持銀聯的迷你IC卡產品、智能SD卡產品、VIPOS產品等,該版本主要位於upmp_android/sdkPro目錄下:

 

apk目錄下包括了通過apk方式接入的UPPayPluginExPro.apk

jar目錄下包括了靜態庫集成方式所需要的jar包、so文件(支持arm,armv7,x86和mips平臺)和資源文件。

註意:

data.bin文件為圖片資源文件,必須存放在工程的res/drawable目錄下;

UPPayPluginExPro.jar為jar包形式的控制項,必須存放在工程的libs目錄下;

libentryexpro.so為動態庫文件,請根據需要存放於工程的libs/xxx/目錄下,其中xxx為armeabi,armeabi-v7a,mips,x86之一。

  1. 介面說明

upmp_android/UPPayAssistEx.jar包中定義了啟動支付控制項的介面,介面定義如下:

 

其它輔助介面:

 

  1. 添加SDK包

拷貝upmp_android\sdknocard\UPPayAssistEx.jar(或upmp_android\sdkPro\UPPayAssistEx.jar)到工程的libs\目錄下;

同時也可將upmp_android\sdknocard\apk\UPPayPluginEx.apk (或upmp_android\sdkPro\apk\UPPayPluginExPro.apk)複製到客戶端工程的assets目錄下,效果如下圖:

 

   接著請右鍵單擊工程,選擇Build Path中的 Configure Build Path …,選中Libraries這個tab,並通過Add Jars…導入工程libs目錄下的UPPayAssistEx.jar包。如下圖: 

  1. 調用支付控制項
  1. 在調用支付控制項的代碼文件中引入UPPayAssistEx類如:
  2.  
  3. 接著可以通過以下方式調用支付控制項:
  4.  

支付完成後,獲取支付控制項支付結果,並添加相應處理邏輯,只需實現調用Activity中的onActivityResult()方法即可,實例代碼如下:

 

 五、手機Web站點

  1. 支持瀏覽器
  • UC瀏覽器Android版本(通過方式一接入,對方式二能支持,但不檢測)
  • UC瀏覽器iOS版本(通過方式二接入)
  • QQ瀏覽器Android版本 3.6及以上(通過方式二接入)
  • 360瀏覽器Android版本2.7及以上(通過方式二接入)
  • Opera瀏覽器Android HD版本1.3及以上(通過方式二接入)
  • 系統原生瀏覽器Android版本和iOS版本(僅支持通過方式二接入)

具體信息參考附錄一

  1. 方式一

調用支付控制項的Web頁面需要嵌入代碼

 

其中<embed>為銀聯手機支付UC插件標簽項,在UC瀏覽器中顯示為銀聯手機支付按鈕, 。其中前幾個參數,不要進行修改:

type="application/x-unionpayplugin" uc_plugin_id="unionpay" height="53" width="178"

其中,訂單信息部分構成參考Web訂單生成。

支付控制項頁面嵌入代碼範例(消費交易)

 

  1. 方式二

    調用銀聯手機支付控制項頁面需要嵌入代碼

 

其中,<a>為銀聯手機支付非UC瀏覽器接入控制項採用標簽項,在非UC瀏覽器中顯示為銀聯手機支付按鈕, 。銀聯手機支付圖標部分指明該圖標的路徑。

 

支付控制項頁面嵌入代碼範例

 

  1. Web訂單生成

展示在Web頁面上的訂單信息生成方式如下:

  1. 將表5-1中訂單信息中的resultURL的值採用URLEncode方式進行編碼,按表5-1的格式與其他欄位拼接出訂單信息。
  2. 將步驟a)中產生的結果採用base64進行編碼。
  1. 將步驟b)中產生的結果採用URLEncode方式進行編碼得到最終展示的數據。

即:

paydata = urlEncode(base64(“tn=” + tn + ”, resultURL=” + urlEncode(resultURL) + ”, usetestmode=” + usetestmode))

 

Web站點訂單中的每個參數對由參數值組成,參數間“,”隔開。參數間不要有空格,格式如下:

表5-1 web訂單構成

 

 

表5-2 訂單信息域說明

 

  1. 接入瀏覽器方案推薦
  1. 針對UC、QQ、360瀏覽器(瀏覽器伺服器上版本為最新的)直接頁面顯示對應tag就可以
  2. 針對Opera(雖然對接了,但是其伺服器上尚未提供較新版本插件下載),頁面提示支持的控制項版本,並告知用戶查看控制項版本的方式和升級的地址
  3. 針對未對接的瀏覽器(主要包括原生瀏覽器),按照方式2處理
  1. 控制項下載地址

Android

http://mobile.unionpay.com/getclient?platform=android&type=securepayplugin

iOS

http://mobile.unionpay.com/getclient?platform=ios&type=securepayplugin 

六、開發者註意事項

  1. 通過瀏覽器方式接入支付控制項時,傳入的resultURL應該可以接受參數,並且需要採用URLEncode方式進行編碼,編碼之前的url形式如:

https://example.com/example?argName=

七、常見問題總結

  1. iOS平臺常見問題
  • 編譯錯誤解決

UPPayDemo工程在編譯的過程中可能會出現Undefined symbols for architecture armv6/armv7/i386的編譯錯誤。如果出現這樣的錯誤,有以下幾種解決辦法:

1)由於支付控制項使用到了C、C++和OC混編的情況,所以商戶工程引入UPPayPlugin.h頭文件以後可能會出現鏈接錯誤。這個時候可以通過兩種方式解決:

① 將涉及到引用UPPayPlugin.h的源文件的尾碼名都改為.mm;

② 如果商戶不想修改源文件的尾碼名,可以在工程中添加一個空的繼承自NSObject的類,並將文件.m尾碼名該改為.mm即可。方法為new file->Objective-C class->類名自取->保存->修改尾碼名為.mm。

③ 將工程的compile source as 選項的值不是Objective–C++;

2)由於在UPPayDemo工程中添加了自定義的庫文件libUPPayPlugin.a,當編譯Demo工程時,應該檢查工程設置Search Paths里的Framework Search Paths、Header Search Paths、Library Search Paths的路徑設置,看設置路徑是否正確,另外還要註意裡邊是否多餘一些不確定的路徑


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 數字:JS只有一種數字類型,相當於double。(不知道為什麼,我每次打double輸入法都會出現逗比了三個字)NaN是一個數值,可以用isNaN(number)檢測NaNInfinity表示所有大於一個非常大的數值的值JS有一個對象Math,它包含一套作用於數字的方法。字元串:Js中所有字元都是U...
  • 前段時間花時間看了大半的《High Performance JavaScript》這本書啊,然後就開始忙項目了,慶幸最忙的一周已經熬過去了。由於空不出時間,這個月寫的學習筆記也不多,忙完最苦X的一周,這兩天晚上也算是挑燈夜讀了...終於是在殘血之際將這本書shut down了...既然讀完了,總歸是...
  • JS中this的指向問題總結函數中的this指向和當前函數在哪定義的或者在哪執行的都沒有任何的關係分析this指向的規律如下:[非嚴格模式]1、自執行函數中的this永遠是window [案例1] var obj={ fn:(function(i){ //this->window ...
  • 在移動端網頁開發中,總是因為不方便調試,導致各種問題不容易被髮現。但是現在有了Browsersync,一切都解決了。不熟悉的同學可以看看Browsersync的官方網站Browsersync中文網。五分鐘快速入門1.使用Browsersync前需要安裝node.js。詳細的安裝過程可參見window...
  • 利用CSS3在Angular中實現動畫。直接看例子: ngAnimate插件1 引入angular-animate插件,我們綁定了ng-if指令,在刪除和添加DOM節點的時候,angular會添加指定的class,方便我們完成動畫。.ng-enter.ng-enter-active.n...
  • 在網頁中,我們可以將JavaScript代碼放在html文件中任何位置,但一般放在head或body標簽裡面。一般來說,
  • 最近測試給了我一大堆BUG,一瞅發現全是IE11的。吐槽一下這個瀏覽器真的比較特立獨行。很多預設的樣式跟別的瀏覽器不同,而且最明顯的一點應該是padding左右內邊距往往比別的瀏覽器大了一倍。但是當需要修改的時候又頭疼了。如果改變原有的padding值,那麼在IE11生效了。別的瀏覽器又有問題了.....
  • CSS代碼重構的目的我們寫CSS代碼時,不僅僅只是完成頁面設計的效果,還應該讓CSS代碼易於管理,維護。我們對CSS代碼重構主要有兩個目的:1、提高代碼性能2、提高代碼的可維護性提高代碼性能提高CSS代碼性能主要有兩個點:1、提高頁面的載入性能提高頁面的載入性能,簡單說就是減小CSS文件的大小,提高...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...