---
title: PayPal SFRA
slug: paypal-sfra
createdAt: 2025-07-30T21:22:24.109Z
---

# PayPal SFRA 概要

Forter SFRA カートリッジには、PayPal API のレスポンスを保存するための組み込み機能が含まれています。これらのレスポンスには、次のものが含まれます:

- PayPal トランザクションの詳細
- キャプチャレスポンス
- 無効レスポンス
- 承認レスポンス
- エクスプレスチェックアウトレスポンス

PayPal データは、`paymentInstrument` オブジェクトのカスタム属性に JSON 文字列として保存され、各レスポンスは専用のカスタム属性に保存されます。

Fort は、レスポンスが最大 4,000 文字を含む可能性があるため、これらの属性を `text` タイプとして保存することを推奨します。

## PayPal レスポンスを支払いインストゥルメントにマッピングする

SalesForce Commerce Cloud SFRA/MFRA ガイドラインに従い、PayPal データは支払いインストゥルメントに保存され、カートリッジ内の既存のコードはそれに応じて上書きされるべきです。ストアフロントアプリケーションが同じコントローラーまたはテンプレートを拡張または置き換えた場合、影響を受けるすべてのコード変更はストアフロントアプリケーションのトップレベルカートリッジに追加する必要があります。

### 1. PayPal 支払いオブジェクトを指定する

クレジットカードと同様に、PayPalメソッドは `ForterOrder(args)` 関数の中で指定された支払い手段であるべきです。**ForterOrder.ds** ファイル。

例:

```javascript
function ForterOrder(args) {

    var log          = new ForterLogger("ForterOrder.ds"),
        order        = args.Order,
        site         = dw.system.Site.getCurrent(),
        paymentInstruments = order.getPaymentInstruments(),
        a            = null,
        authResponse = null,
        shipment     = null;
    
    for each (var paymentInstrument in paymentInstruments) {
        if (paymentInstrument.paymentMethod == 'CREDIT_CARD') {
            a = paymentInstrument;
            authResponse = args.CreditCardAuthResponse;
        } else if (paymentInstrument.paymentMethod == 'PayPal' || paymentInstrument.paymentMethod == 'BML') {
            a = paymentInstrument;
            authResponse = {}; // not necessary as this info can be retreived from a  instrument
        } else if (paymentInstrument.paymentMethod == 'GIFT_CERTIFICATE') { // optional if this is an accepted a  method in your store
        	a = paymentInstrument;
        	authResponse = args.GCRedemptionTransaction;
        }
    }
```

### 2. PayPal認証レスポンスを専用の関数にマッピングする

PayPalやギフトカードなどは、**ForterOrder.ds**に関連する機能にマッピングされ、[検証APIリファレンス](https://portal.forter.com/api/data-objects/Paypal)にリストされている必要なフィールドを含める必要があります。以下の例では、PayPalのデータポイントは文字列化され、専用の`PayPal (order, a)`関数にマッピングされています。

```javascript
function ForterPayPal(order, a ) {
   //var transactionDetails = {};
   this.payerId = a .custom.paypalPayerID 
   this.payerEmail = order.customerEmail; //required
   this.payerStatus = "";
   this.payerAddressStatus = ""; //"CONFIRMED"
   this.paymentMethod = order.custom.paypalPaymentMethod; // ex. instant transfer
   this.paymentStatus = a .custom.paypalPaymentStatus.toUpperCase(); //"PENDING"
   this.payerAccountCountry = "US"; // do not hardcode if accepted from multiple countries
   this.protectionEligibility = a .custom.paypalProtectionEligibility.toUpperCase(); //"ELIGIBLE";
   this.correlationId = a .custom.paypalCorrelationId.correlationid; // ex. "fdshkj2390sdf";
   this.paymentId = "";
   this.authorizationId = a .custom.paypalAuthID; // ex. "2WC75407LV7300439";
   this.fullPaypalResponsePayload = {};
}
```

## PayPalエクスプレス

PayPalとの統合時には、Papal Cartridgeの設定を変更することをお勧めします（**サイト設定** -> **顧客サイト設定グループ**）。これにより、Forterのカートリッジが関連する支払い情報を受け取ることができ、Forterの決定に基づいてPayPalトランザクションがキャプチャされるかキャンセルされるかを自動化することができます。

\*\* **ご注意ください**: Forterのカートリッジは **NOT** 以下の例における請求契約のチェックアウトフローを処理しません。

### ステップ 1: Forterを呼び出す前に認証する

Forterを呼び出す前に、Express Checkoutを認証を含むように更新します。これは、**Payment Action**の設定を「Authorization」に設定するか、`Run Authorization in case of Order`を`Yes`に設定することで行えます。

![](https://api.archbee.com/api/optimize/dYhsqkppjaUNAqFmds_Ny-3N-8C0TyYyt_PVjZkiLlV-20250724-184338.png)

### ステップ 2: 請求情報設定を確認する

Paypalカートリッジが顧客の請求情報をSalesforce Commerce Cloudに送信するように設定されていることを確認してください。この設定には、PaypalサポートによってあなたのPaypalアカウントに外部の権限が追加される必要がある場合があります。

![](https://api.archbee.com/api/optimize/dYhsqkppjaUNAqFmds_Ny-_jS_VWWo1N5flM1hfkO_a-20250724-184338.png)

Forterビジネスマネージャー拡張機能で設定されたカスタマイズされたエラーメッセージを処理するために、特にPayPal決済プロセッサがフックを介して呼び出される場合（あなたのメインサイトがコントローラーまたはSFRAで構築されている場合）、`int_paypal/cartridge/scripts/payment/processor/PAYPAL_EXPRESS.js`はpdictにエラーが存在するかどうかを確認する必要があります。例えば、`if`文の中で:

```javascript
if(!empty(pdict.ForterResponse.PlaceOrderError)){
    return {error: true, fortererrorCode : pdict.ForterResponse.PlaceOrderERror};
} else if (
    (!empty(pdict.ForterResponse.JsonResponseOutput.actionEnum) && pdict.ForterResponse.JsonResponseOutput.actionEnum == 'DECLINED')
    && 
    (!empty(pdict.forterResponse.JsonResponseOutput.processorAction) && pdict.forterResponse.JsonResponseOutput.processorAction != 'skipCapture')
    ) {
        return {error: true};
    }
):
```

### ステップ 3: カスタムエラーメッセージの処理

Forterビジネスマネージャー拡張機能で設定されたカスタマイズされたエラーメッセージを処理するために、**COPlaceOrder.js**ファイルを調整して、`authorizationResult`にエラーが存在するかどうかを確認する必要があります。

内の`handlePayments(order)`関数

```javascript
// within the handlePayments(order) function
if (authorizationResult.not_supported || authorizationResult.error) {
    if (!empty(authorizationResult.forterErrorCode)) {
        return {
            error           : true,
            forterErrorCode : authorizationResult.forterErrorCode
        };
    } else {
        return {error : true};
    }
}
```

内の`Start()`関数

```javascript
// inside the start() function
return {
    error: true,
    PlaceOrderError: new Status(Status.ERROR, handlePaymentsResult.forterErrorCode ? handlePaymentsResult.forterErrorCode.code : 'confirm.error.technical')
};
``
```
