使用拱形信用卡付款(节点)

在这个例子中,我们将研究如何使用 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
}

这就是我们使用拱形卡处理付款的方式。