2016-12-14 11 views
5

paypalの新しいチェックアウトは私に不安を感じさせる、ユーザーが繊細な側で偽の支払いを引き起こすことはできない?paypalエクスプレスチェックアウトセキュリティとサイレントAjaxコール

ストライプでこの

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は、ユーザが私のdbへの投稿要求をトリガできないことを意味しますか?私の心配がどこにあるのかコメントを見ましたか? –

+3

ごめんなさい。これは基本的な統合方法であり、これを行うことを期待していません。それはあなたがあなたのサーバーにトランザクションIDを送信し、残りのAPIを介してPayPalからデータをプルすることができます(あなたのアカウントにログインするだけで)異なるチャネルを介してトランザクションデータを取得することを前提としています。また、高度な統合を使用してサーバーを介して支払いを行い、支払いを確認するためにユーザーをPayPalにリダイレクトすることもできます。これにより、PayPalで支払いを行う前に注文データがサーバーに確実に保存されます。 – Molda

答えて

2

これは、データベースを更新するために安全ではないということは間違いありません。これは安全な支払い方法ですが、支払いが成功したことをクライアントに確認してから、onAuthorizeメソッドでデータベースを更新することはできません。

データベースで支払いが成功したことを確認するには、Server Side REST APIを使用する必要があります。残念ながら、PayPalのドキュメントは非常に不足していますが、文書化されて実装が容易なSDKsがあります。 (Shortcut to Node SDK)。

これらを使用してデータベースの更新を実装することをお勧めします。 PayPalは、支払いが成功したことを示すパラメータを返します。

0

私は問題に直面しています。 onAuthorize()メソッドのコードは公開されているので、安全ではないと私は信じています。誰かが間違いなく支払いをせずにそのコードを起動することができます。

Paypalではどのような悪いアーキテクチャですか?失望した!