2017-02-08 14 views
1

Согласно documentation on PayPal's Developer site под Advanced интеграции серверов, перенаправление URL-адрес должен быть предоставлен в вызове платежа, но:RedirectUrls Будучи Вызываются, onAuthorize Функция Игнорируется

(...) PayPal автоматически не называть эти URL-адреса. PayPal вызывает функцию onAuthorize, когда покупатель разрешает платеж. , которые предоставлены, не будут использоваться.

Итак, я разработал свой код, полагая, что это правда, и на моей локальной установке это работает нормально. Но когда я нажимаю его на мой промежуточный сервер, вызываются URL-адреса переадресации в SDK, а моя функция onAuthorize игнорируется. Это даже открытие нового всплывающего окна, а затем открытие моего сценария payment-execute.php там, с прилагаемыми GET запросами, игнорируя мои значения POST.

Вот пример из JS я использую:

paypal.Button.render({ 

    env: 'sandbox', 

    payment: function(resolve, reject) { 

     paypal.request.post(
      '/path-to-inc/payment.php', 
      { 
       action: 'create_paypal_payment', 
       orderId: order_id, 
       postId: post_id, 
      } 
     ) 
     .then(function(data) { 
      resolve(data.paymentID); 
     }) 
     .catch(function(err) { 
      reject(err); 
     }); 
    }, 

    onAuthorize: function(data) { 

     paypal.request.post('/path-to-inc/payment-execute.php', 
      { 
       paymentID: data.paymentID, 
       payerID: data.payerID, 
       postId: post_id 
      }) 

      .then(function(data) { 
       window.location.reload(); 
      }) 

      .catch(function(err) { 
       console.log('Error'); 
     }); 
    } 

}, '#paypal-button'); 

И отрывок из PHP файла:

$redirectUrls = new RedirectUrls(); 
$redirectUrls->setReturnUrl('http://website.com/payment-execute.php') 
    ->setCancelUrl('http://website.com/checkout'); 

$payment = new Payment(); 
$payment->setIntent('sale') 
    ->setPayer($payer) 
    ->setRedirectUrls($redirectUrls) 
    ->setTransactions(array($transaction)); 

try { 

    $payment->create($apiContext); 

    echo json_encode(['paymentID' => $payment->id]); 

} catch (Exception $e) { 

    error_log('Payment error: ' . $e->getMessage()); 
} 
+0

Не уверен, что это актуально, но есть ошибка * 404 *, показанная только на промежуточном сервере, для следующего: 'https: // www.paypalobjects.com/api/checkout.4.0.40.js', хотя я могу см. '/ checkout.4.0.39.js' успешно загружается в сетевую панель инструментов dev. – Benji

+0

Какой браузер вы используете? У вас есть демо-страница, которую я могу попробовать, которая показывает ошибку версии? – bluepnume

+0

Это было в Chrome 55, Safari 10 и Firefox 49, все та же проблема. Я посмотрю, смогу ли я установить демо в ближайшее время. – Benji

ответ

1

У меня есть один и тот же вопрос, поскольку 1 день назад, я работал с onAuthorize вызов в старых тестах

Редактировать 1: Проверка скважины со старыми версиями сценариев, и я получаю ожидаемый результат с использованием этого https://www.paypalobjects.com/api/checkout.4.0.38.js

+0

v4.0.40 также имеет исправление. – bluepnume

+0

Теперь, если я беру файл с https://www.paypalobjects.com/api/checkout.js, я получаю версию 4.0.39 _ (которая игнорирует вызов onAuthorize) _, и когда я пытаюсь использовать https : //www.paypalobjects.com/api/checkout.4.0.38.js или https://www.paypalobjects.com/api/checkout.4.0.40.js Я получаю ошибку сервера –