DSRPリモート決済を実装する
概要
Mastercard Digital Secure Remote Payment(DSRP)を使用して、eコマースなどのリモート受け入れ向けの支払いデータを生成します。
このフローでは、あなたの デジタルウォレットアプリケーション 支払いデータを生成します。そのデータを、認可のために加盟店システムまたは決済ゲートウェイに渡します。
始める前に、次を完了してください トークン化。参照してください カードをトークン化する.
NFC Wallet SDK は、DSRP リモート決済を次の用途でサポートします Mastercard 次のデジタルカード MCBP 2.x プロファイル のみ。
別のプロファイルまたは決済ネットワークで DSRP リモート決済が必要な場合は、Thales のデリバリーチームに連絡してください。
SDK 統合
前提条件を確認
デジタルカードが DSRP リモート決済をサポートしていることを次を使用して確認します DigitalizedCardDetails.paymentTypeSupported()。この API はサポートされている支払いタイプの一覧を返します。次が含まれていることを確認してください PaymentType.DSRP が存在します。
public boolean isDsrpSupported(DigitalizedCardDetails card) {
final PaymentType[] supported = card.paymentTypeSupported();
for (PaymentType p : supported) {
if (p == PaymentType.DSRP) {
return true;
}
}
return false;
}DSRP 支払い入力データを作成します
作成する PaymentInputData。これには、DSRP リモート決済ペイロードを生成するために使用される取引パラメータが含まれます。
使用する PaymentInputData.PaymentInputBuilder 次を指定:
withRemotePaymentParametersを提供するために金額とcurrencyCodewithMCRemotePaymentParametersを提供するためにcountryCode,transactionType,cryptogramDataType、およびunpredictableNumber
次のサンプル値をプレースホルダーとして使用します。
PaymentInputData DSRP 決済には次のフィールドがあります:
金額
long
数値、小数単位
必須
取引金額を小数単位で設定します(小数点なし)。例: 119.00 USD は 11900.
currencyCode
char (整数)
3桁の ISO 4217 数値コード
必須
取引通貨コードを設定します。例: USD は 840.
countryCode
char (整数)
3桁の ISO 3166-1 数値コード
必須
加盟店の国コードを設定します。例: 米国は 840.
transactionType
列挙型
TransactionType.PURCHASE
必須
金融取引タイプを設定します。DSRP リモート決済では、次を使用します TransactionType.PURCHASE.
cryptogramDataType
列挙型
CryptogramDataType.UCAF または CryptogramDataType.DE55
必須
SDK が返す暗号化文字列の形式を設定します。
unpredictableNumber
long
数値
必須
加盟店または決済ゲートウェイによって生成されたランダム番号を指定します。
リモート決済の暗号化文字列を生成します
デジタルウォレットアプリケーションで、次を呼び出します PaymentBusinessService.generateApplicationCryptogram() と PaymentType.DSRP リモート受け入れ(たとえば eコマース)用の支払いデータを生成するために
次を実装する必要があります RemotePaymentServiceListener.
実装する RemotePaymentServiceListener
リモート決済リスナーは、DSRP 暗号化文字列生成中のイベントを処理します。
リスナーには 3 つのコールバックがあります:
onAuthenticationRequiredSDK は CDCVM 検証が必要であることを示します。参照してください CDCVM認証を実行.
onDataReadyForPaymentリモート決済の出力データの準備ができました。次を使用して取得します
PaymentService.getRemotePaymentData().データを取得した後、ペイメントサービスを無効化してください。無効化を省略すると、次の生成が次のエラーで失敗する可能性があります
REMOTE_PAYMENT_WRONG_STATE.onErrorSDK はリモート決済の生成中に失敗に遭遇しました。
再試行する前に、状態をリセットするためにペイメントサービスを無効化してください。
次のコードスニペットは、リスナーの基本的な実装を示しています:
呼び出す際にリスナーインスタンスを渡します generateApplicationCryptogram(...).
DSRP 支払いデータを取得
取得 RemotePaymentOutputData 次のとき RemotePaymentServiceListener.onDataReadyForPayment() がトリガーされます。
RemotePaymentOutputData には次のフィールドが含まれます。
cryptogramData
フォーマット済み応答を含むバイト配列です。これは、加盟店が DE-55 に入力するための UCAF または TLV データです。
dpan
任意の DPAN F のパディングを削除したもの(存在する場合)。
dpanSequenceNumber
使用したカードの DPAN シーケンス番号(PSN)。
track2EquivalentData
ISO/IEC 7813 に従った Track 2 相当データ。開始シンボル、終了シンボル、および LRC は除きます。
PAR
決済アカウント参照(PAR)。決済ネットワークから提供される場合。
dPanexpirationDate
DPAN の有効期限。
cryptogramDataType
返される暗号化文字列の形式(UCAF または DE55).
track2EquivalentData には以下が含まれます:
主口座番号
フィールド区切り文字(hex
D)有効期限(
YYMM)サービスコード
任意データ(決済ネットワークで定義)
オプションの hex によるパディング
Fを1バイト単位に揃えるために
エラーを処理する
~の場合 RemotePaymentServiceListener.onError(...) がトリガーされると、SDK は次を提供します PaymentServiceErrorCode.
必ず呼び出してください PaymentBusinessService.deactivate() 次に onError(...) 再試行する前にペイメントサービスの状態をリセットするために
PaymentBusinessService.generateApplicationCryptogram(...) 例外をスローします IllegalArgumentException もし paymentInputData である null または、リスナーが null.
REMOTE_PAYMENT_WRONG_STATE
リモート決済を実行しようとしたとき、ペイメントサービスはすでに有効化されています。
呼び出します PaymentBusinessService.deactivate() 各生成後に。エンドユーザーが CDCVM をキャンセルしたときに呼び出してください。
REMOTE_PAYMENT_OUTPUT_INVALID
出力データは解析できず、利用できません。
取引を再試行してください。
REMOTE_PAYMENT_NOT_SUPPORTED
デフォルトカードはリモート決済をサポートしていません。
確認してください DigitalizedCardDetails.paymentTypeSupported() 支払い前に。次をサポートするデジタルカードを使用してください PaymentType.DSRP.
REMOTE_PAYMENT_INPUT_INVALID
入力データは存在しますが、一部のフィールドが無効です。
再構築してください PaymentInputData 有効な値で。必要なすべてのフィールドが設定されていることを確認してください。
NO_DEFAULT_CARD
デフォルトカードがありません。
暗号化文字列を生成する前にデフォルトカードを設定してください。
CARD_OUT_OF_PAYMENT_KEYS
利用可能な支払い認証情報がありません。
再試行する前に支払い認証情報を補充してください。
最終更新
役に立ちましたか?