PayPal使用信用卡(节点)进行支付
示例
在此示例中,我们将研究如何使用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', //沙盒或直播
'client_id': client_id,
'client_secret': secret
});与以前的示例不同的是,我们需要一个新的程序包node-uuid,该程序包用于在存储卡时为付款人生成唯一的UUID。您可以通过以下方式安装该软件包:
npm install node-uuid
接下来,我们定义信用卡JSON对象,该对象将发送到PayPal保管库进行存储。它包含来自卡的信息,以及我们使用生成的唯一付款人IDnode-uuid。您应该将此唯一性存储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": "这是付款交易说明。"
}]
};
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
}这就是我们使用拱形卡处理付款的方式。