2016-09-09 2 views
1

Я добавил код, как предлагается на сайте разработчика Paypal.. Открытое всплывающее окно In-Context Не отображается экран Paypal

<form id="myPaymentContainer" method="post"></form> 
<script type="text/javascript"> 
    window.paypalCheckoutReady = function() { 
     paypal.checkout.setup('XUM4RANUNKG4U', 
     { 
      environment: 'sandbox', 
      container: 'myPaymentContainer' 
     }); 
    }; 
</script> 
<script type="text/javascript" src="//www.paypalobjects.com/api/checkout.js" async></script> 

The In-Context заказ Обзор описывает шаг:

Чтобы проверить с PayPal, покупатель нажмет PayPal Проверьте кнопку.

В ответ на нажатие кнопки, эти действия происходят:

The In-Context JavaScript открывает всплывающее окно и ждет вашей отправки формы для создания оплаты Экспресс Checkout. Успешный вызов платежа возвращает ссылки HATEOAS, которые вы используете в последующих шагах. Используйте URL-адрес перенаправления из ответа, чтобы перенаправить покупателя на URL-адрес PayPal. Если вы правильно интегрировали JavaScript In-Context , всплывающее окно управляет перенаправлением.

Для моего события OnLoad, я тестирую с этим:

var config = ConfigManager.Instance.GetProperties(); 
    if (Page.IsPostBack) 
    { 
     var accessToken = new OAuthTokenCredential(config).GetAccessToken(); 
     var apiContext = new APIContext(accessToken); 



     var transaction = new Transaction() 
     { 
      amount = new Amount() 
      { 
       currency = "USD", 
       total = "20" 
      }, 
      description = "My product description", 
      item_list = new ItemList() 
      { 
       items = new List<Item>() 
       { 
        new Item() 
        { 
         name="The Product", 
         currency="USD", 
         price="20", 
         quantity = "1" 
        } 
       } 
      }, 
      invoice_number = "123" 
     }; 

     var payer = new Payer() 
     { 
      payment_method = "paypal" 
     }; 

     var payment = new Payment() 
     { 
      intent = "sale", 
      transactions = new List<Transaction>() { transaction }, 
      payer = payer, 
      redirect_urls = new RedirectUrls 
      { 
       cancel_url = "/Home.aspx", 
       return_url = "/Checkout.aspx", 
      } 
     }; 

     var createdPayment = payment.Create(apiContext); 
     var paypalLinks = createdPayment.links; 

     if (paypalLinks != null) 
     { 
      var redirectLink = paypalLinks.FirstOrDefault(lnk => lnk.method == "REDIRECT"); 
      if (redirectLink != null) 
      { 
       Response.Redirect(redirectLink.href); 
      } 
     } 
    } 

Если добавить атрибут действия к моему <form>, всплывающее окно заполнит с действием. Я ожидал, что всплывающее окно будет заполнено HTML-кодом Paypal, поэтому пользователь может войти в систему. Если я удалю действие в форме, та же страница, на которой размещена эта кнопка, отображается во всплывающем окне.

Update

Я получил это работает правильно. Вместо того, чтобы использовать тэг формы, я использовал DIV:

<div id="myPaymentContainer" /> 
<script type="text/javascript"> 
    window.paypalCheckoutReady = function() { 
     paypal.checkout.setup('XUM4RANUNKG4U', 
     { 
      environment: 'sandbox', 
      container: 'myPaymentContainer' 
     }); 
    }; 
</script> 
<script type="text/javascript" src="//www.paypalobjects.com/api/checkout.js" async></script> 

Я реорганизованный логику немного, но она выполняет в основном один и тот же призыв к Response.Redirect (ссылки). Надеюсь это поможет.

ответ

0

Я отправляю это и устанавливаю в качестве своего ответа в том случае, если люди ищут, что у вопроса был фактический ответ.

Вопрос был изменен с исправлением.

Смежные вопросы