| 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 |
|