使用拱形信用卡付款(節點)

在這個例子中,我們將研究如何使用 PayPal 保險庫儲存信用卡,然後引用儲存的信用卡來處理使用者的信用卡交易。

我們之所以想要使用保險庫,是因為我們不必在自己的伺服器上儲存敏感的信用卡資訊。我們只是通過提供的保險庫 ID 來引用付款方式,這意味著我們不必自行處理儲存信用卡的許多 PCI 合規性規定。

與之前的樣本一樣,我們從設定環境開始。

var paypal = require('paypal-rest-sdk'),
    uuid = require('node-uuid');

var client_id = 'YOUR CLIENT ID';
var secret = 'YOUR SECRET';

paypal.configure({
  'mode': 'sandbox', //sandbox or live
  'client_id': client_id,
  'client_secret': secret
});

與之前的樣本的一個不同之處在於,我們需要一個新的包 node-uuid,用於在儲存卡時為付款人生成唯一的 UUID。你可以通過以下方式安裝該包:

npm install node-uuid

接下來,我們定義將傳送到 PayPal 保管庫進行儲存的信用卡 JSON 物件。它包含來自卡的資訊,以及我們使用 node-uuid 生成的唯一付款人 ID。你應該將這個獨特的 payer_id 儲存在你自己的資料庫中,因為它將在使用拱形卡建立付款時使用。

var create_card_details = {
    "type": "visa",
    "number": "4417119669820331",
    "expire_month": "11",
    "expire_year": "2018",
    "first_name": "John",
    "last_name": "Doe",
    "payer_id": uuid.v4()
};

最後,我們需要儲存信用卡並使用該卡處理付款。為了儲存信用卡,我們稱之為 credit_card.create(...),傳遞我們剛剛建立的 credit_card_details 物件。如果一切順利,我們應該有一個物件返回給我們,其中包含有關拱形卡的詳細資訊。為了使用該卡付款,我們只需要兩條資訊:我們已經儲存的 payer_id 和保險庫 ID,它們也應該作為參考儲存在我們自己的資料庫中。

paypal.credit_card.create(create_card_details, function(error, credit_card){
    if(error){
        console.error(error);
    } else {
        var card_data = {
            "intent": "sale",
            "payer": {
                "payment_method": "credit_card",
                "funding_instruments": [{
                    "credit_card_token": {
                        "credit_card_id": credit_card.id,
                        "payer_id": credit_card.payer_id
                    }
                }]
            },
            "transactions": [{
                "amount": {
                    "total": "7.47",
                    "currency": "USD",
                    "details": {
                        "subtotal": "7.41",
                        "tax": "0.03",
                        "shipping": "0.03"
                    }
                },
                "description": "This is the payment transaction description." 
            }]
        };
        
        paypal.payment.create(card_data, function(error, payment){
            if(error){
                console.error(error);
            } else {
                console.log(JSON.stringify(payment));
            }
        });
    }
});

在信用卡成功儲存之後的部分中,我們只是定義卡的詳細資訊並處理付款,就像我們之前使用的信用卡處理示例一樣。card_data 物件結構的主要區別是 funding_instruments 部分,我們在 payer 下定義。我們使用包含保險庫 ID 參考和付款人 ID 的以下物件,而不是定義信用卡資訊:

"credit_card_token": {
    "credit_card_id": credit_card.id,
    "payer_id": credit_card.payer_id
}

這就是我們使用拱形卡處理付款的方式。