paypal快速结帐安全与沉默阿贾克斯调用
问题描述:
贝宝的新结账让我感到不安全,不能用户在沉默方面触发虚假付款?paypal快速结帐安全与沉默阿贾克斯调用
提供的代码看起来象
paypal.Button.render({
env: 'sandbox',
client: {
sandbox: 'AapGZeCaaDK_q_KPeG19DHnD_kd18vr6BxNe4P6uuhfTKPjIedtNEI9plyDgmzfyI-xGhbxjpv0k-Ha9',
production: 'xxxxxxxxx' // u expose the key to client side? is this ok?
},
payment: function() {
var env = this.props.env;
var client = this.props.client;
return paypal.rest.payment.create(env, client, {
transactions: [{
amount: { total: ($scope.number_of_uses * 9) + '.00' , currency: 'USD' },
item_list: {
items: [{
"name": "example",
"quantity": $scope.number_of_uses,
"price": "9.00",
"currency": "USD"
}]
}
}],
redirect_urls: {
"return_url": $location.absUrl(),
"cancel_url": $location.absUrl()
}
});
},
onAuthorize: function(data, actions) {
return actions.payment.execute().then(function() {
actions.payment.get().then(function(data){
// here I will save data detail to db to record sales
// $http something something
});
});
}
}, '#paypal-button');
在带,我有一个令牌传递到后面,然后确认我的服务器端是令牌,如果一切OK继续记录销售。但在PayPal中,似乎这是我需要执行的快速结帐的唯一事情。这是否安全?
答
你是正确的,这是不安全的更新您的数据库。这是一种安全的付款方式,但是,您无法向客户验证付款是否成功,然后使用onAuthorize方法更新您的数据库。
要验证您的数据库的付款是否成功,您必须使用Server Side REST API。可悲的是,PayPal文档非常缺乏,但有SDKs这是更多的文件和更容易实施。 (Shortcut to Node SDK)。
我会建议您使用这些来实现对数据库的更新。 PayPal会返回一个参数,告诉您付款是否成功。
答
我正面临这个问题。我相信这是不安全的,因为onAuthorize()方法中的代码暴露给公众。有人肯定可以触发该代码而无需付款。
什么是贝宝糟糕的体系结构。失望!
用户点击按钮后,他们将被重定向到PayPal,并要求提供信用卡详细信息或登录到他们的PayPal帐户。 *键*仅向PayPal告知客户正在付款的内容,而item_list则告知PayPal他们要支付的费用。这里我没有看到任何不安全感。所有安全的东西都发生在PayPal方面。 – Molda
@Molda意思是用户不能触发对我的数据库的post请求?你有没有看到我所关注的地方的评论? –
对不起,错过了。这是基本的集成方法,它不指望你这样做。它假定您通过不同渠道获取交易数据(只需登录到您的账户)您可以做的是将交易ID发送到您的服务器,并通过rest API从PayPal中提取数据。您还可以使用高级集成,通过您的服务器创建付款,并将用户重定向到PayPal以确认付款。这可以确保在贝宝上创建付款之前订单数据在您的服务器上。 – Molda