如何通过 PayPal 确保我的支付系统的安全性?
How can I ensure the security of my payment system via PayPal?
如何通过 PayPal 确保我的支付系统的安全?
我使用 vue-paypal-check 创建前端 PayPal 按钮进行支付。
代码如下:
<Pay-Pal
v-if="paypal_live_id && paypal_sandbox_id"
:amount="amount"
currency="USD"
:client="credentials"
:env="paypal_env"
@payment-authorized="payment_authorized_cb"
@payment-completed="payment_completed_cb"
@payment-cancelled="payment_cancelled_cb"
:items="pay_items"
>
</Pay-Pal>
下面是一些 dota:
data(){
return {
paypal_env: this.$GLOBAL_CONST.PAYMENT.PAYPAL_ENV,
paypal_sandbox_id: undefined,
paypal_live_id: undefined,
}
},
computed: {
credentials() {
return {
sandbox: this.paypal_sandbox_id,
production: this.paypal_live_id,
}
},
},
支付成功回调方法:
payment_completed_cb(res){
some method to access API for payment success // there will request the API for change the order status or reduce the balance.
},
但是我有一个问题,如果客户的某人技术不好,他直接打电话给payment_completed_cb
,而不是通过paypal付款。
我该如何防止这种情况发生?
这不能在前端安全地处理。正如您所指出的,有人可以手动调用该 payment_completed_cb
函数。
您拥有的代码纯粹是为了用户体验。有人点击购买,他们转到贝宝,购买,被重定向回来,您的网站说 “谢谢”。这就是该功能应该做的所有事情,处理一些感谢提示的显示。
付款可能看起来已经完成,但可能需要一些时间才能解决。因此,贝宝将以 “看起来不错” 消息进行响应,并将客户重定向回您的网站。之后才真正完成transfser。举个例子,如果在处理交易时 Paypal 认为它看起来像是欺诈,他们可以取消付款。
为了解决所有这些问题,付款确认的实际处理将在服务器上进行。您可以将 Paypal 配置为在实际确认付款时 ping 您选择的服务器(它也会对客户隐藏)。这称为即时付款通知 (IPN)
这张图片说明了交易流程。
您可以使用 NodeJS 执行此操作并部署为 Serverless function to AWS (first million requests free). Or deploy to a free Heroku 实例。这些都是便宜的选择,但如果服务器处于空闲状态,启动时间会很短。根据我的经验,它只有 200-300 毫秒才开始。这对于响应 HTML 请求来说太长了,但非常适合处理来自某些背景 API.
的最终 ping
来自 paypal ipn
的示例节点实现
var ipn = require('paypal-ipn');
ipn.verify(params, function callback(err, msg) {
if (err) {
console.error(err);
} else {
// Do stuff with original params here
if (params.payment_status == 'Completed') {
// Payment has been confirmed as completed
}
}
});
//You can also pass a settings object to the verify function:
ipn.verify(params, {'allow_sandbox': true}, function callback(err, mes) {
//The library will attempt to verify test payments instead of blocking them
});
有关集成步骤的深入指南,Paypal 提供了文档 Paypal IPN
在您的 Paypal 服务器和您的前端结帐流程之外,需要有一个服务器到服务器 通信。
您可以为此使用 Instant Payment Notification (IPN)。
vue-paypal-check 显示您可以将 IPN url 放入(使用 notify-url
)
<PayPal
amount="10.00"
currency="USD"
:client="credentials"
notify-url="<your-ipn-url>">
</PayPal>
对于 Paypal,您不应等待 IPN 通知完成结帐流程,但在收到订单之前也不应履行订单。
直接调用 payment_complete_cb
最糟糕的情况是进入一些无意义的结帐完整页面。但是,如果不付款,他们将无法从您那里获得商品。
如何通过 PayPal 确保我的支付系统的安全?
我使用 vue-paypal-check 创建前端 PayPal 按钮进行支付。
代码如下:
<Pay-Pal
v-if="paypal_live_id && paypal_sandbox_id"
:amount="amount"
currency="USD"
:client="credentials"
:env="paypal_env"
@payment-authorized="payment_authorized_cb"
@payment-completed="payment_completed_cb"
@payment-cancelled="payment_cancelled_cb"
:items="pay_items"
>
</Pay-Pal>
下面是一些 dota:
data(){
return {
paypal_env: this.$GLOBAL_CONST.PAYMENT.PAYPAL_ENV,
paypal_sandbox_id: undefined,
paypal_live_id: undefined,
}
},
computed: {
credentials() {
return {
sandbox: this.paypal_sandbox_id,
production: this.paypal_live_id,
}
},
},
支付成功回调方法:
payment_completed_cb(res){
some method to access API for payment success // there will request the API for change the order status or reduce the balance.
},
但是我有一个问题,如果客户的某人技术不好,他直接打电话给payment_completed_cb
,而不是通过paypal付款。
我该如何防止这种情况发生?
这不能在前端安全地处理。正如您所指出的,有人可以手动调用该 payment_completed_cb
函数。
您拥有的代码纯粹是为了用户体验。有人点击购买,他们转到贝宝,购买,被重定向回来,您的网站说 “谢谢”。这就是该功能应该做的所有事情,处理一些感谢提示的显示。
付款可能看起来已经完成,但可能需要一些时间才能解决。因此,贝宝将以 “看起来不错” 消息进行响应,并将客户重定向回您的网站。之后才真正完成transfser。举个例子,如果在处理交易时 Paypal 认为它看起来像是欺诈,他们可以取消付款。
为了解决所有这些问题,付款确认的实际处理将在服务器上进行。您可以将 Paypal 配置为在实际确认付款时 ping 您选择的服务器(它也会对客户隐藏)。这称为即时付款通知 (IPN)
这张图片说明了交易流程。
您可以使用 NodeJS 执行此操作并部署为 Serverless function to AWS (first million requests free). Or deploy to a free Heroku 实例。这些都是便宜的选择,但如果服务器处于空闲状态,启动时间会很短。根据我的经验,它只有 200-300 毫秒才开始。这对于响应 HTML 请求来说太长了,但非常适合处理来自某些背景 API.
的最终 ping来自 paypal ipn
的示例节点实现var ipn = require('paypal-ipn');
ipn.verify(params, function callback(err, msg) {
if (err) {
console.error(err);
} else {
// Do stuff with original params here
if (params.payment_status == 'Completed') {
// Payment has been confirmed as completed
}
}
});
//You can also pass a settings object to the verify function:
ipn.verify(params, {'allow_sandbox': true}, function callback(err, mes) {
//The library will attempt to verify test payments instead of blocking them
});
有关集成步骤的深入指南,Paypal 提供了文档 Paypal IPN
在您的 Paypal 服务器和您的前端结帐流程之外,需要有一个服务器到服务器 通信。
您可以为此使用 Instant Payment Notification (IPN)。
vue-paypal-check 显示您可以将 IPN url 放入(使用 notify-url
)
<PayPal
amount="10.00"
currency="USD"
:client="credentials"
notify-url="<your-ipn-url>">
</PayPal>
对于 Paypal,您不应等待 IPN 通知完成结帐流程,但在收到订单之前也不应履行订单。
直接调用 payment_complete_cb
最糟糕的情况是进入一些无意义的结帐完整页面。但是,如果不付款,他们将无法从您那里获得商品。