Я создал корзину, использующую localStorage, и я использую SDK PayPal PHP для обработки платежа.
При нажатии на PayPal через AJAX я отправляю $_POST
данные локального хранилища (корзину) и данные формы (данные пользователя) на страницу PHP, где у меня есть настройка API PayPal, которая затем захватывает данные $_POST
( для создания элементов, транзакций, платежей, redirectURL), и при успешном завершении он возвращает одобренный URL для перенаправления на PayPal (используя window.location.href
, и все это работает нормально.
var formData = form.serialize(); var cartData = JSON.parse(localStorage.getItem('drfStorage')); $.ajax({ url: rootURL + 'api/payment__paypal.php', type: 'POST', data: { formData: formData, cartData: cartData }, beforeSend: function() { console.log('processing'); }, success: function(data) { console.log('success!'); console.log(data); window.location.href = data; }, error: function(xhr,err) { console.log('readyState: '+xhr.readyState+'\nstatus: '+xhr.status); console.log('responseText: '+xhr.responseText); } });
Затем вызывается мой returnURL, который задан как redirect__paypal.php?pp_success=true
, который, если запрос $_GET
является «успехом», затем проверяет и принимает платеж.
Все это хорошо работает до этого момента. Следующий этап заключается в том, что я хочу отправить квитанцию электронной почты пользователю, содержащему некоторые данные из localStorage HOWEVER. Проблема заключается в том, что на этом возвратеURL больше нет localStorage, хранящегося в запросе $_POST
. Я мог бы, очевидно, передать всю эту информацию в виде запроса $ _GET, но не хочу, чтобы эта информация была в URL ( ?email=&address=&order=
) и т. Д.
Есть ли какой-либо способ или совет, который вы можете видеть, что я могу получить доступ к данным localStorage OR $_POST
прежде чем он отправится в PayPal на returnURL?
Ниже приведено то, что содержится в моем redirect__paypal.php, чтобы помочь с объяснением.
use PayPal\Api\Payment; use PayPal\Api\PaymentExecution; // Require relevent libraries require_once('./sendgrid/sendgrid-php.php'); require_once('./api__paypal.php'); // SendGrid API init $sgAPIKey = "REMOVED FROM EXAMPLE"; if (isset($_GET['pp_success'])) { $approved = $_GET['pp_success'] === 'true'; if ($approved) { $payerID = $_GET['PayerID']; $paymentID = $_GET['paymentId']; $payment = Payment::get($paymentID, $api); $execution = new PaymentExecution(); $execution->setPayerId($payerID); $payment->execute($execution, $api); // Set email confirmation settings $email_admin = 'REMOVED FROM EXAMPLE'; // Client $email_customer = 'REMOVED FROM EXAMPLE'; $email_admin_subject = 'You have a new order from Testing McTest via PayPal'; $email_admin_customer = 'Your Testing McTest order'; ob_start(); require_once './confirmation__email--admin.php'; $email_admin_body = ob_get_contents(); ob_end_clean(); ob_start(); require_once './confirmation__email--customer.php'; $email_customer_body = ob_get_contents(); ob_end_clean(); // SendGrid init function send_email($from_email, $to_email, $subject, $body/*, $attachments*/) { global $sgAPIKey; $from = new SendGrid\Email(null, $from_email); $to = new SendGrid\Email(null, $to_email); $content = new SendGrid\Content("text/html", $body); $mail = new SendGrid\Mail($from, $subject, $to, $content); //foreach($attachments as $a) { // $mail->addAttachment($a); //} $sg = new \SendGrid($sgAPIKey); $response = $sg->client->mail()->send()->post($mail); } // Send confirmation to customer first before it clears the attachments if ($email_customer) { send_email($email_admin, $email_customer, $email_admin_customer, $email_customer_body/*, $attachments*/); } // Send to confirmation to admin if ($email_admin) { send_email($email_admin, $email_admin, $email_admin_subject, $email_admin_body/*, $attachments = []*/); } } else { } }
Я думаю, вам нужно сохранить свои данные где-то до вашего переустройства в PayPal. При перенаправлении все поля $ _POST теряются.
Самый простой способ – сохранить все данные в вашей сессии ($ _SESSION). Вы можете получить его оттуда, когда вернетесь из PayPal;)