18 KiB
Payment Store (wc/store/payment
)
Table of Contents
- Overview
- Usage
- Selectors
- getState
- isPaymentIdle
- isExpressPaymentStarted
- isPaymentProcessing
- isPaymentReady
- hasPaymentError
- isExpressPaymentMethodActive
- getActiveSavedToken
- getActivePaymentMethod
- getAvailablePaymentMethods
- getAvailableExpressPaymentMethods
- getPaymentMethodData
- getSavedPaymentMethods
- getActiveSavedPaymentMethods
- getIncompatiblePaymentMethods
- getShouldSavePaymentMethod
- paymentMethodsInitialized
- expressPaymentMethodsInitialized
- getPaymentResult
- (@deprecated) isPaymentPristine
- (@deprecated) isPaymentStarted
- (@deprecated) isPaymentSuccess
- (@deprecated) isPaymentFailed
- (@deprecated) getCurrentStatus
Overview
The payment data store is used to store payment method data and payment processing information. When the payment status changes, the data store will reflect this.
⚠️ Currently, all the actions are internal-only while we determine which ones will be useful for extensions to interact with. We do not encourage extensions to dispatch actions onto this data store yet.
An example of data held within the Payment Data Store is shown below. This example shows the state with several Payment Gateways active, and a saved token.
{
status: 'idle',
activePaymentMethod: 'stripe',
activeSavedToken: '1',
availablePaymentMethods: {
bacs: {
name: 'bacs'
},
cheque: {
name: 'cheque'
},
cod: {
name: 'cod'
},
stripe: {
name: 'stripe'
}
},
availableExpressPaymentMethods: {
payment_request: {
name: 'payment_request'
}
},
savedPaymentMethods: {
cc: [
{
method: {
gateway: 'stripe',
last4: '4242',
brand: 'Visa'
},
expires: '12/32',
is_default: true,
actions: {
'delete': {
url: 'https://store.local/checkout/delete-payment-method/1/?_wpnonce=123456',
name: 'Delete'
}
},
tokenId: 1
}
]
},
paymentMethodData: {
token: '1',
payment_method: 'stripe',
'wc-stripe-payment-token': '1',
isSavedToken: true
},
paymentResult: null,
paymentMethodsInitialized: true,
expressPaymentMethodsInitialized: true,
shouldSavePaymentMethod: false
}
Usage
To utilize this store you will import the PAYMENT_STORE_KEY
in any module referencing it. Assuming @woocommerce/block-data
is registered as an external pointing to wc.wcBlocksData
you can import the key via:
const { PAYMENT_STORE_KEY } = window.wc.wcBlocksData;
Selectors
getState
Returns the current state of the payment store.
🚨 Instead of using this selector, the focused selectors should be used. This selector should only be used to mock selectors in our unit tests.
Returns
object
: The current state of the payment store with the following properties:- status
string
: The current status of the payment process. Possible values are:idle
,started
,processing
,ready
,error
,success
,failed
. - activePaymentMethod
string
: The ID of the active payment method. - activeSavedToken
string
: The ID of the active saved token. - availablePaymentMethods
object
: The available payment methods. This is currently just an object keyed by the payment method IDs. Each member contains aname
entry with the payment method ID as its value. - availableExpressPaymentMethods
object
: The available express payment methods. This is currently just an object keyed by the payment method IDs. Each member contains aname
entry with the payment method ID as its value. - savedPaymentMethods
object
: The saved payment methods for the current customer. This is an object, it will be specific to each payment method. As an example, Stripe's saved tokens are returned like so: - paymentMethodData
object
: The current payment method data. This is specific to each payment method so further details cannot be provided here. - paymentResult
object
: An object with the following properties: - messagestring
: The message returned by the payment gateway. - paymentStatusstring
: The status of the payment. Possible values are:success
,failure
,pending
,error
,not set
. - paymentDetailsobject
: The payment details returned by the payment gateway. - redirectUrlstring
: The URL to redirect to after checkout is complete. - paymentMethodsInitialized
boolean
: True if the payment methods have been initialized, false otherwise. - expressPaymentMethodsInitialized
boolean
: True if the express payment methods have been initialized, false otherwise. - shouldSavePaymentMethod
boolean
: True if the payment method should be saved, false otherwise.
- status
Example
const store = select( PAYMENT_STORE_KEY );
const currentState = store.getState();
isPaymentIdle
Queries if the status is idle
.
Returns
boolean
: True if the payment status isidle
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentIdle = store.isPaymentIdle();
isExpressPaymentStarted
Queries if an express payment method has been clicked.
Returns
boolean
: True if the button for an express payment method has been clicked, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isExpressPaymentStarted = store.isExpressPaymentStarted();
isPaymentProcessing
Queries if the status is processing
.
Returns
boolean
: True if the payment status isprocessing
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentProcessing = store.isPaymentProcessing();
isPaymentReady
Queries if the status is ready
.
Returns
boolean
: True if the payment status isready
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentReady = store.isPaymentReady();
hasPaymentError
Queries if the status is error
.
Returns
boolean
: True if the payment status iserror
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const hasPaymentError = store.hasPaymentError();
isExpressPaymentMethodActive
Returns whether an express payment method is active, this will be true when the express payment method is open and taking user input. In the case of Google Pay it is when the modal is open but other payment methods may have different UIs.
Returns
boolean
: Whether an express payment method is active.
Example
const store = select( PAYMENT_STORE_KEY );
const isExpressPaymentMethodActive = store.isExpressPaymentMethodActive();
getActiveSavedToken
Returns the active saved token. Payment methods that customers have saved to their account have tokens associated with them. If one of these is selected then this selector returns the token that is currently active. If one is not selected this will return an empty string.
Returns
string
: The active saved token ID, or empty string if a saved token is not selected.
Example
const store = select( PAYMENT_STORE_KEY );
const activeSavedToken = store.getActiveSavedToken();
getActivePaymentMethod
Returns the active payment method's ID.
Returns
string
: The active payment method's ID.
Example
const store = select( PAYMENT_STORE_KEY );
const activePaymentMethod = store.getActivePaymentMethod();
getAvailablePaymentMethods
Returns the available payment methods. This does not include express payment methods.
Returns
object
: The available payment methods. This is currently just an object keyed by the payment method IDs. Each member contains aname
entry with the payment method ID as its value.
Example
const store = select( PAYMENT_STORE_KEY );
const availablePaymentMethods = store.getAvailablePaymentMethods();
availablePaymentMethods
will look like this:
{
"cheque": {
name: "cheque",
},
"cod": {
name: "cod",
},
"bacs": {
name: "bacs",
},
}
getAvailableExpressPaymentMethods
Returns the available express payment methods.
Returns
object
: The available express payment methods. This is currently just an object keyed by the payment method IDs. Each member contains aname
entry with the payment method ID as its value.
Example
const store = select( PAYMENT_STORE_KEY );
const availableExpressPaymentMethods =
store.getAvailableExpressPaymentMethods();
availableExpressPaymentMethods
will look like this:
{
"payment_request": {
name: "payment_request",
},
"other_express_method": {
name: "other_express_method",
},
}
getPaymentMethodData
Returns the current payment method data. This will change every time the active payment method changes and is not persisted for each payment method. For example, if the customer has PayPal selected, the payment method data will be specific to that payment method. If they switch to Stripe, the payment method data will be overwritten by Stripe, and the previous value (when PayPal was selected) will not be available anymore.
Returns
object
: The current payment method data. This is specific to each payment method so further details cannot be provided here.
Example
const store = select( PAYMENT_STORE_KEY );
const paymentMethodData = store.getPaymentMethodData();
getSavedPaymentMethods
Returns all saved payment methods for the current customer.
Returns
object
: The saved payment methods for the current customer. This is an object, it will be specific to each payment method. As an example, Stripe's saved tokens are returned like so:
savedPaymentMethods: {
cc: [
{
method: {
gateway: 'stripe',
last4: '4242',
brand: 'Visa',
},
expires: '04/24',
is_default: true,
actions: {
wcs_deletion_error: {
url: '#choose_default',
name: 'Delete',
},
},
tokenId: 2,
},
];
}
Example
const store = select( PAYMENT_STORE_KEY );
const savedPaymentMethods = store.getSavedPaymentMethods();
getActiveSavedPaymentMethods
Returns the saved payment methods for the current customer that are active, i.e. the ones that can be used to pay for the current order.
Returns
object
- The saved payment methods for the current customer that are active, i.e. the ones that can be used to pay for this order. This is an object, it will be specific to each payment method. As an example, Stripe's saved tokens are returned like so:
activeSavedPaymentMethods: {
cc: [
{
method: {
gateway: 'stripe',
last4: '4242',
brand: 'Visa',
},
expires: '04/24',
is_default: true,
actions: {
wcs_deletion_error: {
url: '#choose_default',
name: 'Delete',
},
},
tokenId: 2,
},
];
}
Example
const store = select( PAYMENT_STORE_KEY );
const activeSavedPaymentMethods = store.getActiveSavedPaymentMethods();
getIncompatiblePaymentMethods
Returns the list of payment methods that are incompatible with Checkout block.
Returns
object
: A list of incompatible payment methods with the following properties, or an empty object if no payment or express payment methods have been initialized:- name
string
: The name of the payment method.
- name
Example
const store = select( PAYMENT_STORE_KEY );
const incompatiblePaymentMethods = store.getIncompatiblePaymentMethods();
getShouldSavePaymentMethod
Returns whether the payment method should be saved to the customer's account.
Returns
boolean
: True if the payment method should be saved, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const shouldSavePaymentMethod = store.getShouldSavePaymentMethod();
paymentMethodsInitialized
Returns whether the payment methods have been initialized.
Returns
boolean
: True if the payment methods have been initialized, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const paymentMethodsInitialized = store.paymentMethodsInitialized();
expressPaymentMethodsInitialized
Returns whether the express payment methods have been initialized.
Returns
boolean
: True if the express payment methods have been initialized, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const expressPaymentMethodsInitialized =
store.expressPaymentMethodsInitialized();
getPaymentResult
Returns the result of the last payment attempt.
Returns
object
: An object with the following properties:
{
message: string;
paymentStatus: 'success' | 'failure' | 'pending' | 'error' | 'not set';
paymentDetails: Record< string, string > | Record< string, never >;
redirectUrl: string;
}
Example
const store = select( PAYMENT_STORE_KEY );
const paymentResult = store.getPaymentResult();
(@deprecated) isPaymentPristine
Queries if the status is pristine
.
⚠️ This selector is deprecated and will be removed in a future release. Please use
isPaymentIdle
instead.
Returns
boolean
: True if the payment status ispristine
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentPristine = store.isPaymentPristine();
(@deprecated) isPaymentStarted
Queries if the status is started
.
⚠️ This selector is deprecated and will be removed in a future release. Please use
isExpressPaymentStarted
instead.
Returns
boolean
: True if the payment status isstarted
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentStarted = store.isPaymentStarted();
(@deprecated) isPaymentSuccess
Queries if the status is success
.
⚠️ This selector is deprecated and will be removed in a future release. Please use
isPaymentReady
instead.
Returns
boolean
: True if the payment status issuccess
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentSuccess = store.isPaymentSuccess();
(@deprecated) isPaymentFailed
Queries if the status is failed
.
⚠️ This selector is deprecated and will be removed in a future release. Please use
hasPaymentError
instead.
Returns
boolean
: True if the payment status isfailed
, false otherwise.
Example
const store = select( PAYMENT_STORE_KEY );
const isPaymentFailed = store.isPaymentFailed();
(@deprecated) getCurrentStatus
Returns an object with booleans representing the payment status.
⚠️ This selector is deprecated and will be removed in a future release. Please use the selectors above.
Returns
object
: The current payment status with the following keys:- isPristine
boolean
: True if the payment process has not started, does not have an error and has not finished. This is true initially. - isStarted
boolean
: True if the payment process has started. - isProcessing
boolean
: True if the payment is processing. - hasError
boolean
: True if the payment process has resulted in an error. - hasFailed
boolean
: True if the payment process has failed. - isSuccessful
boolean
: True if the payment process is successful. - isDoingExpressPayment
boolean
: True if an express payment method is active, false otherwise
- isPristine
Example
const store = select( PAYMENT_STORE_KEY );
const currentStatus = store.getCurrentStatus();
We're hiring! Come work with us!
🐞 Found a mistake, or have a suggestion? Leave feedback about this document here.