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中,似乎这是我需要执行的快速结帐的唯一事情。这是否安全?

+0

用户点击按钮后,他们将被重定向到PayPal,并要求提供信用卡详细信息或登录到他们的PayPal帐户。 *键*仅向PayPal告知客户正在付款的内容,而item_list则告知PayPal他们要支付的费用。这里我没有看到任何不安全感。所有安全的东西都发生在PayPal方面。 – Molda

+0

@Molda意思是用户不能触发对我的数据库的post请求?你有没有看到我所关注的地方的评论? –

+3

对不起,错过了。这是基本的集成方法,它不指望你这样做。它假定您通过不同渠道获取交易数据(只需登录到您的账户)您可以做的是将交易ID发送到您的服务器,并通过rest API从PayPal中提取数据。您还可以使用高级集成,通过您的服务器创建付款,并将用户重定向到PayPal以确认付款。这可以确保在贝宝上创建付款之前订单数据在您的服务器上。 – Molda

你是正确的,这是不安全的更新您的数据库。这是一种安全的付款方式,但是,您无法向客户验证付款是否成功,然后使用onAuthorize方法更新您的数据库。

要验证您的数据库的付款是否成功,您必须使用Server Side REST API。可悲的是,PayPal文档非常缺乏,但有SDKs这是更多的文件和更容易实施。 (Shortcut to Node SDK)。

我会建议您使用这些来实现对数据库的更新。 PayPal会返回一个参数,告诉您付款是否成功。

我正面临这个问题。我相信这是不安全的,因为onAuthorize()方法中的代码暴露给公众。有人肯定可以触发该代码而无需付款。

什么是贝宝糟糕的体系结构。失望!