Create Token
Android
如欲了解最新版號 SDK 以及各版號之間的差異性,請參考 Github Release Page : TapPay Android Github
此步驟將會把客戶的卡片轉為一個不敏感的字串稱之為 prime token
在您的 Android 應用程式中取得該字串有 5 個步驟:
- 下載我們的 SDK 套件並加入至您的專案中: tpdirect.aar
- 使用 TPDSetup 設定環境
- 於 Layout 中添加 TPDForm
- 透過 TPDForm 初始化 TPDCard,並為 TPDCard 設置 Callbacks
- 利用 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 | 卡片資訊,將會回傳以下幾個值:
|
|||||||||||||||||||||||||||||||||
cardIdentifier | 信用卡識別碼。每張信用卡只會對到一組識別碼。 | |||||||||||||||||||||||||||||||||
merchantReferenceInfo | 若商戶在 TapPay 後台使用 Co-brand card management 功能,且交易卡號符合設定時,將會回傳此參數,不支援 JKOPAY 商戶於TapPay後台設定的affiliate code management須限制於20字元內且為半形的英數字
|
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()