2016-12-14 5 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'); 

В полоске, я должен передать маркер на спину, а затем проверить, что маркер на моей стороне сервера, если все в порядке приступить к записи продаж. Но в paypal кажется, что это единственное, что мне нужно реализовать, чтобы иметь экспресс-чек. Это даже безопасно?

+0

После того, как пользователь нажал кнопку, они будут перенаправлены в PayPal и должны предоставить данные кредитной карты или войти в свою учетную запись PayPal. * Key * сообщает только PayPal, клиенту которого он платит, а item_list сообщает PayPal, за что они платят. Здесь я не вижу никакой неуверенности. Все безопасные вещи происходят на стороне PayPal. – Molda

+0

@Molda означает, что пользователь не может инициировать отправку запроса на мой db? вы видели комментарий, который я поставил, где моя забота? –

+3

извините пропустил это. Это основной метод интеграции, и он не ожидает, что вы это сделаете. Предполагается, что вы получаете данные транзакций по разному каналу (только путем входа в свою учетную запись). Что вы можете сделать - это отправить идентификатор транзакции на ваш сервер и вытащить данные из PayPal через API отдыха. Вы также можете использовать расширенную интеграцию, которая создает платеж через ваш сервер, а не перенаправляет пользователя в PayPal для подтверждения платежа. Это гарантирует, что данные заказа находятся на вашем сервере до создания платежа в PayPal. – Molda

ответ

2

Вы считаете, что это небезопасно для обновления базы данных. Это безопасный способ оплаты, однако вы не можете проверить с клиентом, что платеж был успешным, а затем обновить базу данных методом onAuthorize.

Для того чтобы проверить, был ли платеж успешным в вашей базе данных, вы должны использовать Server Side REST API. К сожалению, документы PayPal для этого очень не хватает, однако есть SDKs, которые гораздо более документированы и проще реализовать. (Shortcut to Node SDK).

Я бы порекомендовал вам использовать их для внедрения обновления в вашу базу данных. PayPal возвращает параметр, указывающий, что платеж был успешным.

0

У меня возникла проблема. Я считаю, что это не безопасно, так как ваши коды в методе onAuthorize() открыты для публики. Кто-то может определенно запускать эти коды без оплаты.

Какая плохая архитектура на Paypal. Разочарованный!