CheckoutHelper.php
98 lines
| 1 | <?php |
| 2 | |
| 3 | namespace Give\PaymentGateways\Gateways\Stripe\Helpers; |
| 4 | |
| 5 | /** |
| 6 | * @since 2.19.0 |
| 7 | * @TODO We should eventually migrate this client-side redirect to a server-side redirect using the url property of the session. |
| 8 | */ |
| 9 | class CheckoutHelper |
| 10 | { |
| 11 | /** |
| 12 | * @since 2.19.0 |
| 13 | * @param $sessionId |
| 14 | * @param $formId |
| 15 | * @return string |
| 16 | */ |
| 17 | public function getRedirectUrl( $sessionId, $formId ) |
| 18 | { |
| 19 | return esc_url_raw(add_query_arg( |
| 20 | [ |
| 21 | 'action' => 'checkout_processing', |
| 22 | 'session' => $sessionId, |
| 23 | 'id' => $formId, |
| 24 | ], |
| 25 | site_url() |
| 26 | )); |
| 27 | } |
| 28 | |
| 29 | /** |
| 30 | * @since 2.5.5 |
| 31 | * @since 2.19.0 Migrated from the legacy Give_Stripe_Checkout::redirect_to_checkout implementation of the Stripe Checkout Gateway. |
| 32 | * @return void |
| 33 | */ |
| 34 | public function maybeHandleRedirect() |
| 35 | { |
| 36 | $get_data = give_clean( $_GET ); |
| 37 | $form_id = ! empty( $get_data['id'] ) ? absint( $get_data['id'] ) : false; |
| 38 | $publishable_key = give_stripe_get_publishable_key( $form_id ); |
| 39 | $session_id = ! empty( $get_data['session'] ) ? $get_data['session'] : false; |
| 40 | $action = ! empty( $get_data['action'] ) ? $get_data['action'] : false; |
| 41 | $default_account = give_stripe_get_default_account( $form_id ); |
| 42 | $stripe_account_id = give_stripe_get_connected_account_id( $form_id ); |
| 43 | |
| 44 | // Bailout, if action is not checkout processing. |
| 45 | if ( 'checkout_processing' !== $action ) { |
| 46 | return; |
| 47 | } |
| 48 | |
| 49 | // Bailout, if session id doesn't exists. |
| 50 | if ( ! $session_id ) { |
| 51 | return; |
| 52 | } |
| 53 | ?> |
| 54 | <div id="give-stripe-checkout-processing"></div> |
| 55 | <script> |
| 56 | // Show Processing Donation Overlay. |
| 57 | const processingHtml = document.querySelector( '#give-stripe-checkout-processing'); |
| 58 | |
| 59 | processingHtml.setAttribute( 'class', 'stripe-checkout-process' ); |
| 60 | processingHtml.style.background = '#FFFFFF'; |
| 61 | processingHtml.style.opacity = '0.9'; |
| 62 | processingHtml.style.position = 'fixed'; |
| 63 | processingHtml.style.top = '0'; |
| 64 | processingHtml.style.left = '0'; |
| 65 | processingHtml.style.bottom = '0'; |
| 66 | processingHtml.style.right = '0'; |
| 67 | processingHtml.style.zIndex = '2147483646'; |
| 68 | processingHtml.innerHTML = '<div class="give-stripe-checkout-processing-container" style="position: absolute;top: 50%;left: 50%;width: 300px; margin-left: -150px; text-align:center;"><div style="display:inline-block;"><span class="give-loading-animation" style="color: #333;height:26px;width:26px;font-size:26px; margin:0; "></span><span style="color:#000; font-size: 26px; margin:0 0 0 10px;">' + give_stripe_vars.checkout_processing_text + '</span></div></div>'; |
| 69 | |
| 70 | window.addEventListener('load', function() { |
| 71 | let stripe = {}; |
| 72 | |
| 73 | stripe = Stripe( '<?php echo $publishable_key; ?>' ); |
| 74 | |
| 75 | <?php if ( ! empty( $stripe_account_id ) ) { ?> |
| 76 | stripe = Stripe( '<?php echo $publishable_key; ?>', { |
| 77 | 'stripeAccount': '<?php echo $stripe_account_id; ?>' |
| 78 | } ); |
| 79 | <?php } ?> |
| 80 | |
| 81 | // Redirect donor to Checkout page. |
| 82 | stripe.redirectToCheckout({ |
| 83 | // Make the id field from the Checkout Session creation API response |
| 84 | // available to this file, so you can provide it as parameter here |
| 85 | // instead of the {{CHECKOUT_SESSION_ID}} placeholder. |
| 86 | sessionId: '<?php echo $session_id; ?>' |
| 87 | }).then( ( result ) => { |
| 88 | console.log(result); |
| 89 | // If `redirectToCheckout` fails due to a browser or network |
| 90 | // error, display the localized error message to your customer |
| 91 | // using `result.error.message`. |
| 92 | }); |
| 93 | }) |
| 94 | </script> |
| 95 | <?php |
| 96 | } |
| 97 | } |
| 98 |