2016-12-14 123 views
5

貝寶的新結賬讓我感到不安全,不能用戶在沉默方面觸發虛假付款?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

回答

2

你是正確的,這是不安全的更新您的數據庫。這是一種安全的付款方式,但是,您無法向客戶驗證付款是否成功,然後使用onAuthorize方法更新您的數據庫。

要驗證您的數據庫的付款是否成功,您必須使用Server Side REST API。可悲的是,PayPal文檔非常缺乏,但有SDKs這是更多的文件和更容易實施。 (Shortcut to Node SDK)。

我會建議您使用這些來實現對數據庫的更新。 PayPal會返回一個參數,告訴您付款是否成功。

0

我正面臨這個問題。我相信這是不安全的,因爲onAuthorize()方法中的代碼暴露給公衆。有人肯定可以觸發該代碼而無需付款。

什麼是貝寶糟糕的體系結構。失望!