У меня такая же проблема as this question, но его реализация отличается.Paypal In-Context Родительская страница не перенаправляется
Paypal Кнопка Реализация
Причина я реализовал это так, потому что мы должны иметь paypal button
как link
. Поэтому я создал что-то вроде <a ng-click="vm.generatePaypalButtonAndClick()"></a>
, чтобы взломать это. Просто игнорируйте параметры, поскольку это всего лишь пример.
function generatePaypalButtonAndClick(data, vm) {
var originUrl = window.location.origin; // to get 'https://localhost:3000' or 'https://pp.website.com'
// create hidden form element
// production - https://www.paypal.com/cgi-bin/webscr
var paypalForm = angular.element('<form action="https://www.sandbox.paypal.com/cgi-bin/webscr"' +
'method="post" target="_top" id="paypal-payment-form"></form>');
angular.element(document.body).append(paypalForm);
// append elements inside the form
angular.element('#paypal-payment-form').append('<input type="hidden" name="upload" value="1">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="USER" value="xxxxxxxxxxx.gmail.com">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="PWD" value="xxxxxxxxxx">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="SIGNATURE" value="xxxxxxxxxxxxxxxxxxxxxxxxxx">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="cmd" value="_cart">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="business" value="[email protected]">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="lc" value="US">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="return" value="' + originUrl + vm.returnUrl + '">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="cancel_return" value="' + originUrl + vm.cancelUrl + '">');
// loop through all data returned
_(data).forEach(function(value, key) {
var idx = key + 1;
angular.element('#paypal-payment-form').append('<input type="hidden" name="item_name_' + idx + '" value="' + value.itemName + '">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="item_number_' + idx + '" value="' + value.quantity + '">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="amount_' + idx + '" value="' + value.amount +'">');
});
angular.element('#paypal-payment-form').append('<input type="hidden" name="custom" value="xxxxxxxxxxxxx">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="currency_code" value="USD">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="no_note" value="1">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="no_shipping" value="1">');
angular.element('#paypal-payment-form').append('<input type="hidden" name="rm" value="2">');
// let paypal create the button
window.paypalCheckoutReady = function() {
paypal.checkout.setup('xxxxxxxxxxxxxxxxxx', {
environment: 'sandbox', // sandbox/production
container: 'paypal-payment-form'
});
};
// trigger click
$timeout(function() {
var paypalFormToClick = document.getElementsByClassName('paypal-button-content');
angular.element('.paypal-button-content').click();
}, 1000);
// remove form
$timeout(function() {
angular.element('#paypal-payment-form').remove();
}, 1000);
}
После того, как оплата будет сделано, я ожидаю, что родительская страница будет перенаправлен на URL, установленного в vm.returnUrl
(скажем http://localhost:3000/payments/paid
).
Что происходит после оплаты, страница pop-up
paypal перенаправляется, а затем закрывается. Родительская страница хранится как есть.
Я пытался добавить скрипт на страницу, где пользователь должен быть перенаправлен, как указано в this answer
<script>
top.window.opener.location = 'http://localhost:3000/payments/paid';
// if you want to close the window
window.close();
</script>
Но это не работает. Я также получаю кучу ошибок, когда всплывающее окно закрывается:
checkout.js:9315 ppxo_xc_ppcheckout_unexpected_listener_init
checkout.js:9315 ppxo_xc_ppcheckout_error
checkout.js:9315 ppxo_paypal_legacy_error
"Error: Unexpected init message from domain http://localhost:3000 -- expected message from https://www.sandbox.paypal.com
checkout.js:9315 ppxo_paypal_legacy_error_handler
"Error: Unexpected init message from domain http://localhost:3000 -- expected message from https://www.sandbox.paypal.com
checkout.js:3919
Uncaught Error: Unexpected init message from domain http://localhost:3000 -- expected message from https://www.sandbox.paypal.com
Я уже установлен Auto Redirect
к On
в PAYPAL настройках.
Не стесняйтесь сообщить какие дополнительные данные необходимы.