NAV
docs

Create Token

Android

如欲了解最新版號 SDK 以及各版號之間的差異性,請參考 Github Release Page : TapPay Android Github

此步驟將會把客戶的卡片轉為一個不敏感的字串稱之為 prime token
在您的 Android 應用程式中取得該字串有 5 個步驟:

  1. 下載我們的 SDK 套件並加入至您的專案中: tpdirect.aar
  2. 使用 TPDSetup 設定環境
  3. 於 Layout 中添加 TPDForm
  4. 透過 TPDForm 初始化 TPDCard,並為 TPDCard 設置 Callbacks
  5. 利用 TPDCard 取得 prime 字串

TPDSetup

static void initInstance(Context context, int appID, String appKey, TPDServerType serverType);

名稱 類別 內容
context Context Android Context
appID int 請參考 appid
appKey String 請參考 appkey
serverType TPDServerType 使用的伺服器種類
測試時請使用 Sandbox 環境 (TPDServerType.Sandbox)
實體上線後請切換至 Production 環境 (TPDServerType.Production)
TPDSetup.initInstance(getApplicationContext(), APP_ID, "APP_KEY", TPDServerType.Sandbox);

TPDForm

TPDForm 為用來取得消費者卡片資訊的欄位
其中的 EditText 將會自動套用您主題中為其設定之樣式
請在您對應的 layout.xml 中加入以下的 code:

<tech.cherri.tpdirect.API.TPDForm
  android:id="@+id/tpdForm"
  android:layout_width="wrap_content"
  android_layout_height="wrap_content">
</tech.cherri.tpdirect.API.TPDForm>


利用 findViewById() 取得 TPDForm 物件後
您可使用 setOnFormUpdateListener() 來得知目前卡片資訊的輸入狀態
並用回傳的 TPDStatus 來做判斷及處理
最後再用 isCanGetPrime() 來檢查參數是否都正確
在測試環境時,請一律使用測試卡號(4242424242424242, 01/23, 123)

tpdForm.setTextErrorColor(Color.RED); // 設定錯誤顏色
tpdForm.setOnFormUpdateListener(new TPDFormUpdateListener() {
    @Override
    public void onFormUpdated(TPDStatus tpdStatus) {
        errorText.setText("");
        if(tpdStatus.getCardNumberStatus() == TPDStatus.STATUS_ERROR){
            errorText.setText("Invalid Card Number");
        }else if(tpdStatus.getExpirationDateStatus() == TPDStatus.STATUS_ERROR){
            errorText.setText("Invalid Expiration Date");
        }else if(tpdStatus.getCcvStatus() == TPDStatus.STATUS_ERROR){
            errorText.setText("Invalid CCV");
        }
        payButton.setEnabled(tpdStatus.isCanGetPrime());
    }
});

setIsUsedCcv

tpdForm.setIsUsedCcv(Bool)


使用此方法設定是否要顯示 ccv 欄位

TPDCard

將正確的 TPDForm 傳給 TPDCard 來初始化,並設置成功與失敗的 callback 函數

TPDCard card = TPDCard.setup(TPDForm tpdForm);
  .onSuccessCallback(new TPDCardGetPrimeSuccessCallback() {
    @Override
    public void onSuccess(String prime, TPDCardInfo cardInfo, String cardIdentifier,TPDMerchantReferenceInfoDto merchantReferenceInfo) {
      Log.i("TPDCard", "Success");
    }
  })
  .onFailureCallback(new TPDGetPrimeFailureCallback()) {
    @Override
    public void onFailure(int status, String reportMsg) {
      Log.i("TPDCard", "Failed");
    }
  });

Get Prime

以上步驟都完成後,您即可呼叫 getPrime 來取得 prime 字串
之後再將它傳至您的伺服器,並呼叫 Pay by Prime API 來完成付款
若為 AE 卡且 3DS2.0 交易,後 3 碼必須帶入,否則會造成交易失敗

card.getPrime();

Response

TPDCardGetPrimeSuccessCallback 參數

名稱 內容
prime prime 字串,於 Pay by Prime 交易時使用
cardInfo 卡片資訊,將會回傳以下幾個值:
名稱類別(長度)內容
bincodeString(6)卡片前六碼
lastFourString(4)卡片後四碼
issuerString發卡銀行
issuerZhTWString發卡銀行中文名稱
bankIdString銀行代碼
fundingint卡片類別
-1 = Unknown
0 = 信用卡 (Credit Card)
1 = 簽帳卡 (Debit Card)
2 = 預付卡 (Prepaid Card)
cardTypeint卡片種類
-1 = Unknown
1 = VISA
2 = MasterCard
3 = JCB
4 = Union Pay
5 = AMEX
levelString卡片等級
countryString發卡行國家
countryCodeString發卡行國家碼
cardIdentifier 信用卡識別碼。每張信用卡只會對到一組識別碼。
merchantReferenceInfo 若商戶在 TapPay 後台使用 Co-brand card management 功能,且交易卡號符合設定時,將會回傳此參數,不支援 JKOPAY

商戶於TapPay後台設定的affiliate code management須限制於20字元內且為半形的英數字
名稱類別內容
affiliateCodesArray商戶在 TapPay 後台的 Co-brand card management 功能專區設定的Affiliated codes


TPDGetPrimeFailureCallback 參數

名稱 內容
status 錯誤代碼,0 為成功
message 錯誤訊息

Example

請參考我們的範例程式,並將 MainActivity.java 中的變數更換為您的值:

名稱 內容
EXAMPLE_APP_ID 您的 app ID
EXAMPLE_APP_KEY 您測試環境的 app key
TEST_PARTNER_SERVER 您處理付款的伺服器路徑
我們將會將 prime 字串 POST 至該路徑

Get CCV Prime

此串接內容適合用於『當使用 Pay by Card Token API 時,希望帶入 CCV 進行交易,但卻不想經手明碼 CCV』情境
透過 SDK 串接後, 可以使用 TPDCcv 物件 getPrime 方法取得一串 ccv_prime, 並把 ccv_prime 帶入到 Pay by Card Token API 後即可進行交易
註: ccv_prime 為一串亂數, 並不是敏感資訊

1.引用 tpdirect.arr 到專案
2.使用 TPDSetup 初始化 SDK 設定使用的環境


TPDSetup.initInstance(getApplicationContext(), "APP_ID", "APP_KEY", TPDServerType.Sandbox);


3.將 TPDCcvForm 加入 layout

<tech.cherri.tpdirect.api.TPDCcvForm
            android:id="@+id/tpdCcvForm"
            android:layout_width="270dp"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true">
</tech.cherri.tpdirect.api.TPDCcvForm>


4.用 TPDCcvForm 初始化 TPDCcv

TPDCcv tpdCcv = TPDCcv.setup(tpdCcvForm)
    .onSuccessCallback(new TPDCcvGetPrimeSuccessCallback() {
          @Override
          public void onSuccess(String ccvPrime) {
              // do something
          }
    }).onFailureCallback(new TPDGetPrimeFailureCallback() {
          @Override
          public void onFailure(int status, String msg) {
              // do something
          }
    });


5.在 TPDCcvForm 輸入 ccv 呼叫 get prime 取得 ccv_prime

tpdCcv.getPrime();

Get Device Id

若您有使用風險控制服務
呼叫 getRbaDeviceId() 方法回傳裝置識別碼

String deviceId = TPDSetup.gerInstance(getApplicationContext()).getRbaDeviceId()