Я добавил код, как предлагается на сайте разработчика 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 (ссылки). Надеюсь это поможет.