支払ターミナルのエンドツーエンド支払統合の作成

この記事では、支払いゲートウェイと直接通信できる支払いターミナル用に、Microsoft Dynamics 365 Commerce Store Commerce でエンドツーエンドの支払い統合を作成する方法について説明します。

重要な用語

用語 説明
支払コネクタ POS に支払ターミナルを統合するために書き込まれた拡張ライブラリです。
支払プロセッサ 支払コネクタで使用される商社プロパティを取得するために書き込まれる拡張ライブラリです。

次の図は、POS を介した支払ターミナルの統合の概要を示しています。 この図では、ローカルのハードウェア ステーションを使用して支払端末と通信を使用することを前提にしていますが、同じパターンを共有のハードウェア ステーションにも適用できます。

支払コネクタの統合の概要のスクリーンショット。

この記事では、支払端末のエンド・ツー・エンド支払統合を作成するために必要な以下の手順について説明します。

  • 支払コネクタの記述: 支払コネクタは POS と支払ターミナルの間の主要な統合ポイントです。 このステップのセクションでは、支払要求 (たとえば、承認、払い戻し、無効化要求) を支払端末に中継できる、新しい支払コネクタを実装し、設定する方法について説明します。
  • 支払いプロセッサを記述します 支払いプロセッサを使用して、支払い統合の一部であるマーチャント プロパティを定義します。 このステップのセクションでは、新しい支払プロセッサを実装する方法について説明します。 これには、実装する必要があるインターフェイスおよび従う必要があるパターンに関する情報が含まれています。

支払コネクタの記述

次のこのセクションでは、新しい支払コネクタを記述する方法について説明します。

支払いフローを理解する

次の図は、POS、ハードウェア ステーション、および支払コネクタ全体にわたるいくつかの支払フロー (トランザクションの開始、カート ラインの更新、承認、キャプチャ、および終了トランザクション) の概要を示しています。

POS、ハードウェア ステーション、および支払コネクタ全体の支払フローの概要のスクリーンショット。

支払コネクタの実装

次のセクションでは、新しい支払いコネクタを実装する方法について説明します。 ここに示す例は、Retail ソフトウェア開発キット (SDK) の SampleExtensions\HardwareStation\Extension.PaymentSample フォルダーにある PaymentDeviceSample クラスにあります。

INamedRequestHandler インターフェイスの実装

ハードウェア ステーションは、要求/応答パターンを通じて、すべての POS 支払関連フローを処理します。 新しい支払いコネクタを作成する最初の手順は、Microsoft.Dynamics.Commerce.Runtime.Framework ライブラリで定義されている INamedRequestHandler インターフェイスを実装するクラスを作成することです。

namespace Contoso.Commerce.HardwareStation.PaymentSample 
{ 
    public class PaymentDeviceSample : INamedRequestHandler
    {
        private const string PaymentTerminalDevice = "MOCKPAYMENTTERMINAL";

        /// <summary>
        /// Gets the specify the name of the request handler.
        /// </summary>
        public string HandlerName
        {
              get
            {
                return PaymentDeviceSample.PaymentTerminalDevice;
            }
        }
    }
}

HandlerName 文字列を使用して、特定の POS レジスタがクライアントを介して使用する支払コネクタを構成します (この記事の後半の情報を参照)。

サポートされている支払要求の実装

支払関連フローを処理するには、支払コネクタが処理できる、サポートされている要求タイプを定義する必要があります。 さらに、 Execute メソッドを実装して、コネクタがサポートする各要求を特定のメソッドにルーティングします。 次の例は、サポートされている要求のタイプの完全な一覧と、特定の要求 (すなわち、承認要求) の例を示しています。

namespace Contoso.Commerce.HardwareStation.PaymentSample 
{ 
    /// <summary>
    /// <c>Simulator</c> manager payment device class.
    /// </summary>
    public class PaymentDeviceSample : INamedRequestHandler
    {
        /// <summary>
        /// Gets the collection of supported request types by this handler.
        /// </summary>
        public IEnumerable<Type> SupportedRequestTypes
        {
            get
            {
                return new[]
                {
                        typeof(LockPaymentTerminalDeviceRequest),
                        typeof(OpenPaymentTerminalDeviceRequest),
                        typeof(ClosePaymentTerminalDeviceRequest),
                        typeof(BeginTransactionPaymentTerminalDeviceRequest),
                        typeof(EndTransactionPaymentTerminalDeviceRequest),
                        typeof(UpdateLineItemsPaymentTerminalDeviceRequest),
                        typeof(AuthorizePaymentTerminalDeviceRequest),
                        typeof(CapturePaymentTerminalDeviceRequest),
                        typeof(VoidPaymentTerminalDeviceRequest),
                        typeof(RefundPaymentTerminalDeviceRequest),
                        typeof(FetchTokenPaymentTerminalDeviceRequest),
                        typeof(ExecuteTaskPaymentTerminalDeviceRequest),
                        typeof(ActivateGiftCardPaymentTerminalRequest),
                        typeof(AddBalanceToGiftCardPaymentTerminalRequest),
                        typeof(GetGiftCardBalancePaymentTerminalRequest),
                        typeof(GetPrivateTenderPaymentTerminalDeviceRequest),
                        typeof(CancelOperationPaymentTerminalDeviceRequest),
                        typeof(GetTransactionReferencePaymentTerminalDeviceRequest),
                        typeof(GetTransactionByTransactionReferencePaymentTerminalDeviceRequest),
                        typeof(CashoutGiftCardPaymentTerminalRequest)
                };
            }
        }


        /// <summary>
        /// Executes the payment device simulator operation based on the incoming request type.
        /// </summary>
        /// <param name="request">The payment terminal device simulator request message.</param>
        /// <returns>Returns the payment terminal device simulator response.</returns>
        public Response Execute(Microsoft.Dynamics.Commerce.Runtime.Messages.Request request)
        {
            ThrowIf.Null(request, "request");

            Type requestType = request.GetType();

            if (requestType == typeof(AuthorizePaymentTerminalDeviceRequest))
            {
                return this.AuthorizePayment((AuthorizePaymentTerminalDeviceRequest)request);
            }
            else if (...)
            {
                ...
            }

            return new NullResponse();
        }

        /// <summary>
        /// Authorize payment.
        /// </summary>
        /// <param name="request">The authorize payment request.</param>
        /// <returns>The authorize payment response.</returns>
        public AuthorizePaymentTerminalDeviceResponse AuthorizePayment(AuthorizePaymentTerminalDeviceRequest request)
        {
            ThrowIf.Null(request, "request");

            PaymentInfo paymentInfo = Utilities.WaitAsyncTask(() => this.AuthorizePaymentAsync(request.Amount, request.Currency, request.VoiceAuthorization, request.IsManualEntry, request.ExtensionTransactionProperties));

            return new AuthorizePaymentTerminalDeviceResponse(paymentInfo);
        }
    }
}

サポートされる要求タイプの完全な一覧

次の表では、支払いコネクタが実装できるサポートされているすべての要求の種類について説明します。

クラスのリクエスト 支払フローの説明
OpenPaymentTerminalDeviceRequest この要求は、販売取引が開始される前に呼び出されます。 これは、支払いターミナルへの接続を確立するために使用されます。
BeginTransactionPaymentTerminalDeviceRequest この要求は、新しい販売取引が開始されたときに呼び出されます。 支払い端末での初期化を処理するために使用されます (トランザクション画面の初期化など)。
LockPaymentTerminalDeviceRequest この要求は支払ターミナルがトランザクションに対してロックされている場合、呼び出されます。
UpdateLineItemsPaymentTerminalDeviceRequest この要求は、カート内の明細行品目が更新されたときに呼び出されます。
AuthorizePaymentTerminalDeviceRequest この要求は、POS 支払ビューで支払が開始されたときに呼び出されます。
CancelOperationPaymentTerminalDeviceRequest この要求は、支払いが開始された後、支払い端末で支払いが完了する前に、支払いビュー ダイアログ ボックスで キャンセル ボタンを選択すると呼び出されます。
CapturePaymentTerminalDeviceRequest この要求は、カート内の全額が支払われた時点で、販売取引が終了する前に、各支払い行に対して呼び出されます。
VoidPaymentTerminalDeviceRequest この要求は、カート内の支払い行が無効になったときに呼び出されます。
RefundPaymentTerminalDeviceRequest この要求は、払い戻しが行われたときに呼び出されます。
FetchTokenPaymentTerminalDeviceRequest この要求は、顧客注文の繰延支払いをサポートするために支払トークンをフェッチするために呼び出されます。
EndTransactionPaymentTerminalDeviceRequest この要求は、販売トランザクションが終了し、すべての支払がキャプチャされるときに呼び出されます。
ClosePaymentTerminalDeviceRequest この要求は、販売取引の終了後に呼び出されます。 これは、支払いターミナルへの接続を閉じるのに使用されます。
ActivateGiftCardPaymentTerminalRequest この要求は、外部ギフト カードが POS を介して有効化されているときに呼び出されます。
AddBalanceToGiftCardPaymentTerminalRequest この要求は、外部ギフト カードに残高が追加されるときに呼び出されます。
GetGiftCardBalancePaymentTerminalRequest この要求は、ギフト カードの残高が取得されるときに呼び出されます。
GetPrivateTenderPaymentTerminalDeviceRequest この要求は、ギフト カード番号がギフト カード フローの支払い端末から取得されたときに呼び出されます (ギフト カードの発行、ギフト カードによる支払い、ギフト カードへの追加など)。
ExecuteTaskPaymentTerminalDeviceRequest この拡張要求は、カスタマイズを介して POS から呼び出すことができます。 これにより、より多くの支払関連フローが可能になります。
GetTransactionReferencePaymentTerminalDeviceRequest この要求は、相関する ID をチェックするために呼び出されます。 これは、重複する支払い保護に使用されます。
GetTransactionByTransactionReferencePaymentTerminalDeviceRequest この要求は、相関する ID を使用して前の取引を取得するために使用されます。
CashoutGiftCardPaymentTerminalRequest この要求は、POS からキャッシュ アウト ギフト カード処理が実行されたときに呼び出されます。
OpenPaymentTerminalDeviceRequest
署名
public OpenPaymentTerminalDeviceRequest(string token, string deviceName, SettingsInfo terminalSettings, PeripheralConfiguration deviceConfig, ExtensionTransaction extensionTransactionProperties);
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
deviceName クライアントの POS ハードウェア プロファイル ページで定義されている、デバイスの名前。
terminalSettings クライアントで定義された支払端末固有の構成プロパティのセット。署名キャプチャの最小額やデビット キャッシュバック限度などです。
deviceConfig ネットワーク端末の場合の IP アドレスやポートなど、名前/値のペアの形式の支払端末固有の設定プロパティのセット。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
BeginTransactionPaymentTerminalDeviceRequest
署名
public BeginTransactionPaymentTerminalDeviceRequest(string token, string paymentConnectorName, string merchantInformation, string invoiceNumber, bool isTestMode, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローと統合する場合は、この変数を使用します。
merchantInformation クライアントの POS ハードウェア プロファイル ページで定義するマーチャント情報。
invoiceNumber POS が販売トランザクションを追跡するために生成する一意の請求書番号。
isTestMode 支払コネクタがテスト モードで使用されているかどうかを示す値。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
LockPaymentTerminalDeviceRequest
署名
public LockPaymentTerminalDeviceRequest(string clientDeviceNumber, string deviceType, string deviceName, bool isExclusive, bool isOverride)
変数
Variable 説明
clientDeviceNumber ロックを取得する一意の POS デバイス番号。
deviceType POS ハードウェア プロファイル (「Windows」など) で構成されるようにロックを取得したデバイス タイプ。
deviceName POS ハードウェア プロファイル (「MOCKPAYMENTTERMINAL」など) で構成されるようにロックを取得したデバイス タイプ。
isExclusive 取得したロックが占有されているかどうかを決定します。
isOverride この要求が既存のロックをオーバーライドするかどうかを決定します。
UpdateLineItemsPaymentTerminalDeviceRequest
署名
public UpdateLineItemsPaymentTerminalDeviceRequest(string token, string totalAmount, string taxAmount, string discountAmount, string subTotalAmount, IEnumerable<ItemInfo> items, ExtensionTransaction extensionTransactionProperties = null)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
totalAmount 現在の販売トランザクションでの合計金額。
taxAmount 現在の販売トランザクションでの税金額。
discountAmount 現在の販売トランザクションでの割引金額。
subTotalAmount 現在の販売トランザクションでの小計金額。
品目 表示する明細行品目のリスト。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
AuthorizePaymentTerminalDeviceRequest
署名
public AuthorizePaymentTerminalDeviceRequest(string token, string paymentConnectorName, decimal amount, string currency, TenderInfo tenderInfo, string voiceAuthorization, bool isManualEntry, Retail.PaymentSDK.Portable.PaymentTransactionReferenceData transactionReferencedata, bool isTippingEnabled, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
金額 承認する金額。
通貨 承認する金額の通貨。
tenderInfo POS が外部ソースから送信および取得するカード情報 (外部ソースが存在する場合)。
voiceAuthorization 音声承認が必要な場合に POS が送信する音声承認コード。
isManualEntry カード番号を手動で入力されたかどうかを定義する値。
transactionReferenceData プロセッサに送信される販売者のトランザクション参照。
isTippingEnabled チップが支払コネクタでサポートされているかどうかを示します。 省略可能。 既定値は false です。
extensionTransactionProperties 名前/値のペアの形式の拡張構成プロパティのセット。 省略可能。 既定値は null です。
応答

AuthorizePaymentTerminalDeviceRequest 要求を処理するときに AuthorizePaymentCardPaymentResponse 応答オブジェクト 返します。 応答には、次の必須プロパティを持つ PaymentInfo オブジェクトのインスタンスが含まれている必要があります。

財産 説明
ApprovedAmount トランザクションに対して承認された金額。 チップが有効になっている場合は、チップ金額を含めます。
CardNumberMasked マスクされたクレジット カード番号。 この値には、少なくとも POS 内の在庫置場範囲の参照をサポートするため、クレジット カードの最初の桁が含まれている必要があります。 (ほとんどのデバイスは、最初の 6 桁と最後の 4 桁を返します。)
CardType Microsoft.Dynamics.Commerce.HardwareStation.CardPayment.CardType エンティティを使用して支払いに使用したカードの種類 (クレジットデビットなど)。
CashbackAmount 借方トランザクションの場合、キャッシュ バック金額は支払端末で定義されました。
エラー 承認呼び出し中に発生したエラーの一覧。
IsApproved 支払が承認されたかどうかを示すフラグ。
PaymentSdkData 承認/返金と、キャプチャ/呼び出しの無効化またはクロスチャネルの支払操作の間の状態をサポートするために使用される応答データ。
TipAmount デバイスで顧客が選択したチップの金額。

PaymentSdkData プロパティには、次のデータを含める必要があります。

名前空間 Name 説明 サンプル値
Connector ConnectorName この記事の後半にある「支払プロセッサの記述」セクションで説明している、トランザクションに使用される IPaymentProcessor インターフェイスの名前です。
AuthorizationResponse プロパティ 承認応答のリスト。 次の表を参照してください。

PaymentSdkData プロパティの プロパティ フィールドには、次のフィールドを含める必要があります。

名前空間 Name 説明 サンプル値
AuthorizationResponse ApprovedAmount トランザクションに対して承認された金額。 28.08 m
AuthorizationResponse AvailableBalance カードの使用可能な残高。 100.00m
AuthorizationResponse ApprovalCode トランザクションの承認コード。 Z123456
AuthorizationResponse ProviderTransactionId 支払いプロバイダーのトランザクション識別子。 123456789
AuthorizationResponse AuthorizationResult 権限呼び出しの結果。 AuthorizationResult.Success.ToString()
AuthorizationResponse ExternalReceipt 支払プロバイダーからの外部レシート データ。 <ReceiptData>...</ReceiptData>
AuthorizationResponse TerminalId 支払を処理した端末の一意の識別子。 000001

次の例は、PaymentSdkData オブジェクトを作成する方法を示しています。

List<PaymentProperty> paymentSdkProperties = new List<PaymentProperty>();
paymentSdkProperties.Add(new PaymentProperty(GenericNamespace.Connector, ConnectorProperties.ConnectorName, "TestConnector"));

List<PaymentProperty> paymentSdkAuthorizationProperties = new List<PaymentProperty>();
paymentSdkAuthorizationProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, AuthorizationResponseProperties.ApprovedAmount, 28.08m));
paymentSdkAuthorizationProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, AuthorizationResponseProperties.AvailableBalance, 100.00m));
paymentSdkAuthorizationProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, AuthorizationResponseProperties.ApprovalCode, "Z123456"));
paymentSdkAuthorizationProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, AuthorizationResponseProperties.ProviderTransactionId, "123456789"));
paymentSdkAuthorizationProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, AuthorizationResponseProperties.AuthorizationResult, AuthorizationResult.Success.ToString()));
paymentSdkAuthorizationProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, TransactionDataProperties.TerminalId, "000001"));

paymentSdkProperties.Add(new PaymentProperty(GenericNamespace.AuthorizationResponse, AuthorizationResponseProperties.Properties, paymentSdkAuthorizationProperties.ToArray()));

string paymentSdkData = PaymentProperty.ConvertPropertyArrayToXML(paymentSdkProperties.ToArray());

支払端末がレシートを返す場合、先ほど説明した ExternalReceipt オブジェクトで次のデータを設定し、POS を介して印刷することができます。

<ReceiptData>
    <Receipt Type='Customer'>
        <Line>Line 1 of receipt.</Line>
        <Line>Line 2 of receipt.</Line>
    </Receipt>
    <Receipt Type='Merchant'>
        <Line>Line 1 of receipt.</Line>
        <Line>Line 2 of receipt.</Line>
    </Receipt>
</ReceiptData>
その他の考慮事項

支払端末が 1 つの呼び出しでの要求を承認し、キャプチャし (つまり迅速なキャプチャが発生する場合)、出納係が取引を無効にすることを希望する場合、支払い端末では即時回収の取消がサポートされている必要があります。 即時キャプチャが無効になると、void 要求が失敗した場合、レジ担当者は支払いをローカルで無効にするかどうかを確認するメッセージが表示されます。 レジ担当者がはいと選択した場合、入札は POS でのみ無効になります。 支払を無効にするために支払ターミナルに対して行われる呼び出しはありません。 この動作により、支払いターミナルでの支払いを無効にできなくなった場合、レジ担当者は POS のブロックを解除できます。 ただし、銀行が取り消すまでロックが 3 日から 5 日間続くので、この動作によって問題が発生する可能性がありますが、支払いは即時キャプチャのために行われます。 したがって、重複した支払いが発生する可能性があります。

CancelOperationPaymentTerminalDeviceRequest
署名
public CancelOperationPaymentTerminalDeviceRequest(string token)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
CapturePaymentTerminalDeviceRequest
署名
public CapturePaymentTerminalDeviceRequest(string token, decimal amount, string currency, string paymentPropertiesXml, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
金額 取得する金額。
通貨 取得する金額の通貨。
paymentPropertiesXml AuthorizePaymentTerminalDeviceRequest または RefundPaymentTerminalDeviceRequest 要求によって返される PaymentSdkData オブジェクトの内容。 リクエスト間のステートフルプロパティをサポートするには、このプロパティを使用します。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
その他の考慮事項

支払端末が 1 つの呼び出しでの要求を承認およびキャプチャする場合、CapturePaymentTerminalDeviceRequest 要求はノーオーペレーションである必要があり、すぐに返す必要があります。

支払いターミナルでキャプチャ呼び出しを処理するために承認要求の状態が必要な場合は、前述の AuthorizePaymentTerminalDeviceResponse 要求の PaymentSdkData オブジェクトにプロパティを格納します。 CapturePaymentTerminalDeviceRequest 要求の paymentPropertiesXml 変数を使用して、これらのプロパティを渡します。

VoidPaymentTerminalDeviceRequest
署名
public VoidPaymentTerminalDeviceRequest(string token, string paymentConnectorName, decimal amount, string currency, TenderInfo tenderInfo, string paymentPropertiesXml, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
金額 支払いが無効になる金額。
通貨 支払いが無効になる通貨。
tenderInfo POS が外部ソースから送信および取得するカード情報 (外部ソースが存在する場合)。
paymentPropertiesXml AuthorizePaymentTerminalDeviceRequest または RefundPaymentTerminalDeviceRequest 要求によって返される PaymentSdkData オブジェクトの内容。 リクエスト間のステートフルプロパティをサポートするには、このプロパティを使用します。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
RefundPaymentTerminalDeviceRequest
署名
public RefundPaymentTerminalDeviceRequest(string token, string paymentConnectorName, TenderInfo tenderInfo, decimal amount, string currency, bool isManualEntry, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
tenderInfo POS が外部ソースから送信および取得するカード情報 (外部ソースが存在する場合)。
金額 払い戻す金額。
通貨 払い戻す金額の通貨。
isManualEntry カード番号を手動で入力されたかどうかを定義する値。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
FetchTokenPaymentTerminalDeviceRequest
署名
public FetchTokenPaymentTerminalDeviceRequest(string token, bool isManualEntry, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
isManualEntry カード番号を手動で入力されたかどうかを定義する値。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
EndTransactionPaymentTerminalDeviceRequest
署名
public EndTransactionPaymentTerminalDeviceRequest(string token, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
ClosePaymentTerminalDeviceRequest
署名
public ClosePaymentTerminalDeviceRequest(string token, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
ActivateGiftCardPaymentTerminalRequest
署名
public ActivateGiftCardPaymentTerminalRequest(string token, string paymentConnectorName, decimal amount, string currencyCode, TenderInfo tenderInfo, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
金額 有効化中にギフト カードに追加する初期金額。
通貨 有効化中にギフト カードに追加する初期金額の通貨。
tenderInfo POS が外部ソースから送信および取得するカード情報 (外部ソースが存在する場合)。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
AddBalanceToGiftCardPaymentTerminalRequest
署名
public AddBalanceToGiftCardPaymentTerminalRequest(string token, string paymentConnectorName, decimal amount, string currencyCode, TenderInfo tenderInfo, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
金額 ギフト カードに追加される金額。
通貨 ギフト カード残高に追加する金額の通貨。
tenderInfo POS が外部ソースから送信および取得するカード情報 (外部ソースが存在する場合)。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
GetGiftCardBalancePaymentTerminalRequest
署名
public GetGiftCardBalancePaymentTerminalRequest(string token, string paymentConnectorName, string currencyCode, TenderInfo tenderInfo, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
paymentConnectorName 支払いフローの一部として使用する支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
通貨 ギフト カード残高を取得するための通貨。
tenderInfo POS が外部ソースから送信および取得するカード情報 (外部ソースが存在する場合)。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
GetPrivateTenderPaymentTerminalDeviceRequest
署名
public GetPrivateTenderPaymentTerminalDeviceRequest(string token, decimal amount, bool declined, bool isSwipe, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
金額 POS が設定する量。 この変数を使用して、カード番号が取得されたときに支払いターミナルの金額を表示します。
減少 この値は廃止されています。
isSwipe 支払ターミナルで読み取りまたは手動入力によってカード番号を取得する必要があるかどうかを決定する値。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
ExecuteTaskPaymentTerminalDeviceRequest
署名
public ExecuteTaskPaymentTerminalDeviceRequest(string token, string task, ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
トークン 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のトークン値。
タスク タスクを実行するための一意の識別子。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。
GetTransactionReferencePaymentTerminalDeviceRequest
署名
 public GetTransactionReferencePaymentTerminalDeviceRequest(string lockToken, string posTerminalId, string eftTerminalId)
変数
Variable 説明
locktoken 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のロック トークン。
posTerminalId ロック トークンに関連付けられている POS ターミナル ID。
extensionTransactionProperties トランザクションおよびロック トークンに関連付けられている EFT ターミナル ID。
GetTransactionByTransactionReferencePaymentTerminalDeviceRequest
署名
 public GetTransactionByTransactionReferencePaymentTerminalDeviceRequest(string lockToken, Retail.PaymentSDK.Portable.PaymentTransactionReferenceData transactionReferenceData)
変数
Variable 説明
locktoken 支払ターミナルがトランザクションに対して最初にロックされたときに生成される一意のロック トークン。
Retail.PaymentSDK.Portable.PaymentTransactionReferenceData TransactionReferenceData 関連付け ID が同期していない場合の支払トランザクションの参照データ。
CashoutGiftCardPaymentTerminalRequest
署名
 public CashoutGiftCardPaymentTerminalRequest(
            string paymentConnectorName,
            decimal amount,
            string currencyCode,
            TenderInfo tenderInfo,
            ExtensionTransaction extensionTransactionProperties)
変数
Variable 説明
paymentConnectorName 支払いフローの一部として使用される支払コネクタの名前。 IPaymentProcessor インターフェイスを使用する支払フローとの統合がある場合は、この変数を使用します。
金額 ギフト カードのキャッシュ アウト要求の金額。
currencyCode ギフト カードのキャッシュ アウト要求に使用する通貨。
tenderinfo POS から送信され、外部ソースから取得されたカード情報 (外部ソースが存在する場合)。
extensionTransactionProperties 名前と値のペアとしての拡張構成プロパティのセット。

支払コネクタの状態

POS 内のインプロセス ハードウェア ステーションを介して支払コネクタをホストする場合は、dllhost.exe プロセスの一部として支払コネクタをホストできます。 または、Microsoft インターネット インフォメーション サービス (IIS) に基づくハードウェア ステーションで支払コネクタをホストするときに、w3wp.exe プロセスとして支払いコネクタをホストすることもできます。 状況によっては、両方のプロセスが、支払フローの間またはフロー中に終了または応答を停止することがあります。 そのため、状態の依存関係を持つ支払いコネクタを設計しないでください。 前に説明した支払フロー関連の要求の間に任意の時点で終了した場合に復旧するように設計します。

ハードウェア ステーションのコンフィギュレーションで支払コネクタをコンフィギュレーションする

ハードウェア ステーションが支払コネクタを確実に読み込むには、 HardwareStation.Extension.config ファイルに対応するアセンブリ参照を設定します。 このファイルは、Retail SDK の Assets フォルダーにあります。

<?xml version="1.0" encoding="utf-8"?>
<hardwareStationExtension>
    <composition>
        <!-- 
        Register your own assemblies or types here. The following example registers NewPeripheralDevice 
        (and all its request handlers). Any other services are not being overridden:

        <add source="type" 
            value="Contoso.Commerce.HardwareStation.NewPeripheralDevice, Contoso.Commerce.HardwareStation.NewPeripheralDevice" />
        <add source="assembly" 
            value="Contoso.Commerce.HardwareStation.NewPeripheralDevice” />
        -->
        <add source="assembly" value="Contoso.Commerce.HardwareStation.PaymentSample" />
    </composition>
</hardwareStationExtension>

クライアントの POS ハードウェア プロファイル ページで支払コネクタをコンフィギュレーションする

POS が読み込む正しい支払コネクタを確認するには、次の図に示すように、クライアントの POS ハードウェア プロファイル ページの PIN パッド クイック タブの [デバイス名] フィールドで PaymentTerminalDevice プロパティの値を設定します。

クライアントの POS ハードウェア プロファイル ページでの支払コネクタのコンフィギュレーション。

支払プロセッサの記述

通常、支払いプロセッサは、支払いゲートウェイへの直接接続を確立する場合にのみ使用します。 このシナリオは、カードが存在しない販売取引またはより複雑なカードが存在するシナリオで最も頻繁に発生します。 さらに、支払プロセッサは、クライアントの POS ハードウェア プロファイル ページを使用して構成するマーチャント プロパティを処理します。

Note

現在、支払い処理者は、支払いターミナルがすべての支払い要求を直接処理し、POS を介してマーチャント プロパティを設定する必要がない場合でも必要です。 IPaymentProcessor インターフェイスの実装の詳細については、支払いコネクタと支払いデバイスの実装に関するホワイト ペーパーを参照してください。

商社プロパティ フローを理解する

以降のセクションでは、クライアントの POS ハードウェア プロファイル ページでマーチャント プロパティを設定する方法と、POS が支払フロー中に支払コネクタにプロパティを渡す方法について説明します。

クライアントの POS ハードウェア プロファイル ページで商社プロパティを設定

次の図は、クライアントの POS ハードウェア プロファイル ページを使用してマーチャント プロパティを設定する方法を示しています。 マーチャント プロパティを設定できるようにするには、Microsoft.Dynamics.Retail.PaymentSDK ライブラリで定義されている IPaymentProcessor インターフェイスを実装します。 GetMerchantAccountPropertyMetadataValidateMerchantAccount の 2 つのインターフェイス メソッドが必要です。

クライアントの POS ハードウェア プロファイル ページで商社プロパティを設定する。

POS 販売トランザクションの間に支払コネクタで商社プロパティを設定

次の図は、Commerce Scale Unit がデータベースからマーチャント プロパティを取得し、 BeginTransactionPaymentTerminalDeviceRequest 要求中に支払いコネクタに渡す方法を示しています。

POS 支払フロー時に支払コネクタに商社プロパティを設定する。

IPaymentProcessor インターフェイスの実装

支払いフローに関連するマーチャント プロパティを処理するには、Microsoft.Dynamics.Retail.PaymentSDK ライブラリで定義されている IPaymentProcessor インターフェイスを実装します。 次の例は、2 つの必須インターフェイス メソッド、GetMerchantAccountPropertyMetadataValidateMerchantAccount を実装する方法を示しています。. 他のインターフェイス メソッドは空白のままにしておくことができます (たとえば、 FeatureNotSupportedException を返すことができます)。

/// <summary>
/// SampleConnector class (Portable Class Library version).
/// </summary>
public class SampleConnector : IPaymentProcessor
{
    /// <summary>
    /// GetMerchantAccountPropertyMetadata returns the merchant account properties need by the payment provider.
    /// </summary>
    /// <param name="request">Request object.</param>
    /// <returns>
    /// Response object.
    /// </returns>
    public Response GetMerchantAccountPropertyMetadata(Request request)
    {
        string methodName = "GetMerchantAccountPropertyMetadata";

        // Check null request
        List<PaymentError> errors = new List<PaymentError>();
        if (request == null)
        {
            errors.Add(new PaymentError(ErrorCode.InvalidRequest, "Request is null."));
            return PaymentUtilities.CreateAndLogResponseForReturn(methodName, this.Name, Platform, locale: null, properties: null, errors: errors);
        }

        // Prepare response
        List<PaymentProperty> properties = new List<PaymentProperty>();
        PaymentProperty property;
        property = new PaymentProperty(
            GenericNamespace.MerchantAccount,
            MerchantAccountProperties.AssemblyName,
            this.GetAssemblyName());
        property.SetMetadata("Assembly Name:", "The assembly name of the test provider", false, true, 0);
        properties.Add(property);

        Response response = new Response();
        response.Locale = request.Locale;
        response.Properties = properties.ToArray();
        if (errors.Count > 0)
        {
            response.Errors = errors.ToArray();
        }

        PaymentUtilities.LogResponseBeforeReturn(methodName, this.Name, Platform, response);
        return response;
    }

    /// <summary>
    /// ValidateMerchantAccount the passed merchant account properties with the payment provider.
    /// </summary>
    /// <param name="request">Request object to validate.</param>
    /// <returns>
    /// Response object.
    /// </returns>
    public Response ValidateMerchantAccount(Request request)
    {
        string methodName = "ValidateMerchantAccount";

        // Convert request
        ValidateMerchantAccountRequest validateRequest = null;
        try
        {
            validateRequest = ValidateMerchantAccountRequest.ConvertFrom(request);
        }
        catch (SampleException ex)
        {
            return PaymentUtilities.CreateAndLogResponseForReturn(methodName, this.Name, Platform, locale: request == null ? null : request.Locale, properties: null, errors: ex.Errors);
        }

        // Validate merchant account
        List<PaymentError> errors = new List<PaymentError>();
        ValidateMerchantProperties(validateRequest, errors);
        if (errors.Count > 0)
        {
            return PaymentUtilities.CreateAndLogResponseForReturn(methodName, this.Name, Platform, validateRequest.Locale, errors);
        }

        // Create response
        var validateResponse = new ValidateMerchantAccountResponse(validateRequest.Locale, validateRequest.ServiceAccountId, this.Name);

        // Convert response and return
        Response response = ValidateMerchantAccountResponse.ConvertTo(validateResponse);
        PaymentUtilities.LogResponseBeforeReturn(methodName, this.Name, Platform, response);
        return response;
    }
}

必須商社プロパティ フィールド

次の表は、 GetMerchantAccountPropertyMetadata メソッドの一部として設定した必要なマーチャント プロパティ フィールドを示しています。

名前空間 Name サンプル値*
MerchantAccount PortableAssemblyName Contoso.Microsoft.PaymentsSample
MerchantAccount ServiceAccountId f35989c8-e571-4de1-862a-996c82a2e6b6
MerchantAccount SupportedCurrencies AUD、BRL、CAD、CHF、CNY、CZK、DKK、EUR、GBP、HKD、HUF、INR、JPY、KPW、KRW、MXN、NOK、NZD、PLN、SEK、SGD、TWD、USD、ZAR
MerchantAccount SupportedTenderTypes Visa;MasterCard;Amex;Discover;Debit

* この列のサンプル値を、独自の支払いプロセッサの一意の値に置き換えます。