mirror of
https://github.com/kingomarnajjar/flex-template-web.git
synced 2026-07-25 22:37:18 +10:00
Add handleCardSetup to stripe.duck.js
This commit is contained in:
parent
839afb6f4b
commit
6521ec7ab7
1 changed files with 82 additions and 1 deletions
|
|
@ -24,6 +24,10 @@ export const HANDLE_CARD_PAYMENT_REQUEST = 'app/stripe/HANDLE_CARD_PAYMENT_REQUE
|
||||||
export const HANDLE_CARD_PAYMENT_SUCCESS = 'app/stripe/HANDLE_CARD_PAYMENT_SUCCESS';
|
export const HANDLE_CARD_PAYMENT_SUCCESS = 'app/stripe/HANDLE_CARD_PAYMENT_SUCCESS';
|
||||||
export const HANDLE_CARD_PAYMENT_ERROR = 'app/stripe/HANDLE_CARD_PAYMENT_ERROR';
|
export const HANDLE_CARD_PAYMENT_ERROR = 'app/stripe/HANDLE_CARD_PAYMENT_ERROR';
|
||||||
|
|
||||||
|
export const HANDLE_CARD_SETUP_REQUEST = 'app/stripe/HANDLE_CARD_SETUP_REQUEST';
|
||||||
|
export const HANDLE_CARD_SETUP_SUCCESS = 'app/stripe/HANDLE_CARD_SETUP_SUCCESS';
|
||||||
|
export const HANDLE_CARD_SETUP_ERROR = 'app/stripe/HANDLE_CARD_SETUP_ERROR';
|
||||||
|
|
||||||
export const CLEAR_HANDLE_CARD_PAYMENT = 'app/stripe/CLEAR_HANDLE_CARD_PAYMENT';
|
export const CLEAR_HANDLE_CARD_PAYMENT = 'app/stripe/CLEAR_HANDLE_CARD_PAYMENT';
|
||||||
|
|
||||||
export const RETRIEVE_PAYMENT_INTENT_REQUEST = 'app/stripe/RETRIEVE_PAYMENT_INTENT_REQUEST';
|
export const RETRIEVE_PAYMENT_INTENT_REQUEST = 'app/stripe/RETRIEVE_PAYMENT_INTENT_REQUEST';
|
||||||
|
|
@ -43,7 +47,10 @@ const initialState = {
|
||||||
stripeAccountFetched: false,
|
stripeAccountFetched: false,
|
||||||
handleCardPaymentInProgress: false,
|
handleCardPaymentInProgress: false,
|
||||||
handleCardPaymentError: null,
|
handleCardPaymentError: null,
|
||||||
|
handleCardSetupInProgress: false,
|
||||||
|
handleCardSetupError: null,
|
||||||
paymentIntent: null,
|
paymentIntent: null,
|
||||||
|
setupIntent: null,
|
||||||
retrievePaymentIntentInProgress: false,
|
retrievePaymentIntentInProgress: false,
|
||||||
retrievePaymentIntentError: null,
|
retrievePaymentIntentError: null,
|
||||||
};
|
};
|
||||||
|
|
@ -123,6 +130,18 @@ export default function reducer(state = initialState, action = {}) {
|
||||||
console.error(payload);
|
console.error(payload);
|
||||||
return { ...state, handleCardPaymentError: payload, handleCardPaymentInProgress: false };
|
return { ...state, handleCardPaymentError: payload, handleCardPaymentInProgress: false };
|
||||||
|
|
||||||
|
case HANDLE_CARD_SETUP_REQUEST:
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
handleCardSetupError: null,
|
||||||
|
handleCardSetupInProgress: true,
|
||||||
|
};
|
||||||
|
case HANDLE_CARD_SETUP_SUCCESS:
|
||||||
|
return { ...state, setupIntent: payload, handleCardSetupInProgress: false };
|
||||||
|
case HANDLE_CARD_SETUP_ERROR:
|
||||||
|
console.error(payload);
|
||||||
|
return { ...state, handleCardSetupError: payload, handleCardSetupInProgress: false };
|
||||||
|
|
||||||
case CLEAR_HANDLE_CARD_PAYMENT:
|
case CLEAR_HANDLE_CARD_PAYMENT:
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
|
|
@ -218,6 +237,21 @@ export const handleCardPaymentError = payload => ({
|
||||||
error: true,
|
error: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const handleCardSetupRequest = () => ({
|
||||||
|
type: HANDLE_CARD_SETUP_REQUEST,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const handleCardSetupSuccess = payload => ({
|
||||||
|
type: HANDLE_CARD_SETUP_SUCCESS,
|
||||||
|
payload,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const handleCardSetupError = payload => ({
|
||||||
|
type: HANDLE_CARD_SETUP_ERROR,
|
||||||
|
payload,
|
||||||
|
error: true,
|
||||||
|
});
|
||||||
|
|
||||||
export const initializeCardPaymentData = () => ({
|
export const initializeCardPaymentData = () => ({
|
||||||
type: CLEAR_HANDLE_CARD_PAYMENT,
|
type: CLEAR_HANDLE_CARD_PAYMENT,
|
||||||
});
|
});
|
||||||
|
|
@ -617,8 +651,15 @@ export const handleCardPayment = params => dispatch => {
|
||||||
|
|
||||||
dispatch(handleCardPaymentRequest());
|
dispatch(handleCardPaymentRequest());
|
||||||
|
|
||||||
|
// When using default payment method, card (aka Stripe Element) is not needed.
|
||||||
|
// We also set paymentParams.payment_method already in Flex API side,
|
||||||
|
// when request-payment transition is made - so there's no need for paymentParams
|
||||||
|
const args = card
|
||||||
|
? [stripePaymentIntentClientSecret, card, paymentParams]
|
||||||
|
: [stripePaymentIntentClientSecret];
|
||||||
|
|
||||||
return stripe
|
return stripe
|
||||||
.handleCardPayment(stripePaymentIntentClientSecret, card, paymentParams)
|
.handleCardPayment(...args)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (response.error) {
|
if (response.error) {
|
||||||
return Promise.reject(response);
|
return Promise.reject(response);
|
||||||
|
|
@ -649,3 +690,43 @@ export const handleCardPayment = params => dispatch => {
|
||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const handleCardSetup = params => dispatch => {
|
||||||
|
// It's required to use the same instance of Stripe as where the card has been created
|
||||||
|
// so that's why Stripe needs to be passed here and we can't create a new instance.
|
||||||
|
const { stripe, card, setupIntentClientSecret, paymentParams } = params;
|
||||||
|
|
||||||
|
dispatch(handleCardSetupRequest());
|
||||||
|
|
||||||
|
return stripe
|
||||||
|
.handleCardSetup(setupIntentClientSecret, card, paymentParams)
|
||||||
|
.then(response => {
|
||||||
|
if (response.error) {
|
||||||
|
return Promise.reject(response);
|
||||||
|
} else {
|
||||||
|
dispatch(handleCardSetupSuccess(response));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
// Unwrap Stripe error.
|
||||||
|
const e = err.error || storableError(err);
|
||||||
|
dispatch(handleCardSetupError(e));
|
||||||
|
|
||||||
|
// Log error
|
||||||
|
const containsSetupIntent = err.error && err.error.setup_intent;
|
||||||
|
const { code, doc_url, message, setup_intent } = containsSetupIntent ? err.error : {};
|
||||||
|
const loggableError = containsSetupIntent
|
||||||
|
? {
|
||||||
|
code,
|
||||||
|
message,
|
||||||
|
doc_url,
|
||||||
|
paymentIntentStatus: setup_intent.status,
|
||||||
|
}
|
||||||
|
: e;
|
||||||
|
log.error(loggableError, 'stripe-handle-card-setup-failed', {
|
||||||
|
stripeMessage: loggableError.message,
|
||||||
|
});
|
||||||
|
throw e;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue