💡 Document payment workflow

This commit is contained in:
Philipp Stracker 2024-08-20 14:14:30 +02:00
parent 451dc842ed
commit 63b5055903
No known key found for this signature in database
2 changed files with 21 additions and 4 deletions

View file

@ -18,17 +18,25 @@ const onApprove = ( context, errorHandler ) => {
.then( ( res ) => {
return res.json();
} )
.then( ( data ) => {
if ( ! data.success ) {
.then( ( approveData ) => {
if ( ! approveData.success ) {
errorHandler.genericError();
return actions.restart().catch( ( err ) => {
errorHandler.genericError();
} );
}
const orderReceivedUrl = data.data?.order_received_url;
const orderReceivedUrl = approveData.data?.order_received_url;
location.href = orderReceivedUrl
/**
* Notice how this step initiates a redirect to a new page using a plain
* URL as new location. This process does not send any details about the
* approved order or billed customer.
* Also, due to the redirect starting _instantly_ there should be no other
* logic scheduled after calling `await onApprove()`;
*/
window.location.href = orderReceivedUrl
? orderReceivedUrl
: context.config.redirect;
} );

View file

@ -587,6 +587,14 @@ class GooglepayButton extends PaymentButton {
return 'APPROVED' === confirmOrderResponse?.status;
};
/**
* This approval mainly confirms that the orderID is valid.
*
* It's still needed because this handler redirects to the checkout page if the server-side
* approval was successful.
*
* @param {string} orderID
*/
const approveOrderServerSide = async ( orderID ) => {
let isApproved = true;
@ -625,6 +633,7 @@ class GooglepayButton extends PaymentButton {
return;
}
// This must be the last step in the process, as it initiates a redirect.
const success = await approveOrderServerSide( id );
if ( success ) {