2016-08-16 2 views
1

Я использую экспресс-заказ PayPal в контекстном режиме. Вот что у меня есть на данный момент:PayPal In-Context Checkout Click Event

paypal.checkout.setup("my_app.domain.co.uk", { 
    locale: 'en_GB', 
    environment: 'production', 
    button: 'PayPalSubmit' 
}); 

И в HTML:

<form id="PayPalForm" action="/lib/paypal/paypal_ec_redirect.php" method="POST"> 
    <input type="hidden" name="currencyCodeType" value="GBP" /> 
    <input type="hidden" name="paymentType" value="Sale" /> 
    <input type="hidden" name="PAYMENTREQUEST_0_PAYMENTACTION" value="Sale" /> 
    <input type="hidden" name="L_PAYMENTREQUEST_0_NAME0" value="Test" /> 
    <input type="hidden" name="PAYMENTREQUEST_0_DESC" value="Test" /> 
    <input type="hidden" name="L_PAYMENTREQUEST_0_QTY0" value="1" /> 
    <input type="hidden" name="PAYMENTREQUEST_0_ITEMAMT" value="1" /> 
    <input type="hidden" name="PAYMENTREQUEST_0_AMT" value="1"> 
    <input type="hidden" name="NOSHIPPING" value="1"> 
    <button type="submit" id="PayPalSubmit" class="jfk-button-action"> 
     Pay with PayPal 
    </button> 
</form> 
<script src="//www.paypalobjects.com/api/checkout.js" async></script> 

Это работает в данный момент, но я хочу, чтобы добавить функцию обратного вызова, чтобы изменить что-то, когда пользователь нажимает на плате , то есть, как только откроется всплывающее окно PayPal. Я попытался это:

paypal.checkout.setup("my_app.domain.co.uk", { 
    locale: 'en_GB', 
    environment: 'production', 
    button: 'PayPalSubmit', 
    click: function() { 
     paypal.checkout.initXO(); 
     $('#popup').html('Processing your booking...'); 
    } 
}); 

Это прекрасно работает на Google Chrome, однако на Firefox и IE открывает всплывающее окно и загрузка GIF PayPal просто висит с названием окна о: пусто. Кто-нибудь знает, что происходит?

ответ

0

Я не думаю, что вы действительно используете PayPal-In-Context-Workflow. С помощью этого сценария форма отправляется, и вы достигаете «/lib/paypal/paypal_ec_redirect.php». Для In-Context-Workflow вы сначала настроили платеж и получили токен. Затем в JS должен начать поток с помощью «paypal.checkout.startFlow (токен)». Вот пример кода, который я использую. «Event.preventDefault();» не выполняет форму url, а ajax - получить токен.

 window.paypalCheckoutReady = function() { 
     //alert('paypalCheckoutReady'); 
     paypal.checkout.setup('@Model.PayPalMerchantId', { 
      environment: '@Model.PayPalEnvironment', 
      click: function (event) { 
       //alert('paypalCheckoutClick'); 
       $('#checkout').attr("disabled", "disabled"); 
       event.preventDefault(); 
       paypal.checkout.initXO(); 
       $.support.cor = true; 
       $.ajax({ 
        url: '@Url.Action("Checkout","shop")', 
        data: $('#payment-form').serialize(), 
        type: 'POST', 
        async: false, 
        crossDomain: true, 
        success: function (token) { 
         //alert('checkout success: ' + token); 
         //var url = paypal.checkout.urlPrefix + token; 
         paypal.checkout.startFlow(token); 
        }, 
        error: function (responseData, textStatus, errorThrown) { 
         //alert('checkout error: ' + textStatus); 
         paypal.checkout.closeFlow(); 
        } 
       }); 
      }, 
      condition: function() { 
       var ispaypal = $('input[name=paymentmethod]:checked', '#payment-form').val() == 'paypal'; 
       //alert(ispaypal); 
       return ispaypal; 
      }, 
      button: ['checkout'], 
     }); 
    } 

Для меня