Endpoint to get clientSecret | WordPress.org

[ad_1]

Hi,

I am using React Stripe Elements in FE and Woocommerce Stripe Payment Gateway Plugin as my BE. I see that I am required to pass ClientSecret variable from my server.

const options = { // passing the client secret obtained from the server clientSecret: '{{CLIENT_SECRET}}', };

How can I do that?

My code:

const [checkout] = useMutation<{

checkout: { order: Order };

}>(CHECKOUT, {

onCompleted({ checkout }) {

handleSuccessfulCheckout({ order: checkout.order });

if (subscribeToMailchimp) {

addToMailchimp(shippingInfo.email);

}

},

onError(error) {

console.log({

title: 'Error',

description: 'There was an error with your checkout',

status: 'error',

});

console.error(error);

setFormState('ERROR');

},

});

const handleSubmit = async (event: React.FormEvent) => {

event.preventDefault();

setFormState('LOADING');

try {

const source = (await handleStripe()) as Source;

await checkout({

variables: {

input: {

paymentMethod: 'stripe',

shippingMethod: 'Flat rate',

billing: {

firstName: shippingInfo.firstName,

lastName: shippingInfo.lastName,

address1: shippingInfo.address,

email: shippingInfo.email,

phone: shippingInfo.phone,

},

metaData: [

{

key: _stripe_source_id,

value: source.id,

},

],

},

},

});

} catch (error) {

setShowErrorMessage(true);

console.log({

title: 'Error',

description: 'There was an error with your checkout',

status: 'error',

formState: formState,

});

console.error(error);

}

};

async function handleStripe(): Promise<Source | Error> {

if (!stripe || !elements) {

throw Error(stripe or elements undefined);

}

const cardElements = elements.getElement(CardElement);

if (!cardElements) {

throw Error(Card elements not found);

}

const { source, error: sourceError } = await stripe.createSource(

cardElements,

{

type: 'card',

}

);

if (sourceError || !source) {

throw Error(sourceError?.message || Unknown error generating source);

}

return source;

}

function handleSuccessfulCheckout({ order }: { order: Order }): void {

setFormState('IDLE');

if (typeof window !== 'undefined') {

localStorage.removeItem('woo-session');

}

const emptyCart: Cart = {

contents: {

itemCount: 0,

nodes: [],

},

};

setCart(emptyCart);

navigate('/uzsakymas/uzsakymas-gautas', { state: order });

}

Stripe events logs after “succesfull” order:
event:source.chargeable

{

"object": {

"id": "src_1ONoUpKhxv7ffxFkFfPkmQO8",

"object": "source",

"amount": null,

"card": {

"address_line1_check": null,

"address_zip_check": null,

"brand": "Visa",

"country": "DE",

"cvc_check": "unchecked",

"dynamic_last4": null,

"exp_month": 12,

"exp_year": 2025,

"fingerprint": "HRIlzg488RZFVOCG",

"funding": "credit",

"last4": "3184",

"name": null,

"three_d_secure": "required",

"tokenization_method": null

},

"client_secret": "src_client_secret_bRcoO8eiV5p4AHU6YOZEQthT",

"created": 1702697099,

"currency": null,

"flow": "none",

"livemode": false,

"metadata": {

},

"owner": {

"address": null,

"email": null,

"name": null,

"phone": null,

"verified_address": null,

"verified_email": null,

"verified_name": null,

"verified_phone": null

},

"statement_descriptor": null,

"status": "chargeable",

"type": "card",

"usage": "reusable"

}

}

event:payment_intent.created

{

"object": {

"id": "pi_3ONoUtKhxv7ffxFk0aPDaV3z",

"object": "payment_intent",

"amount": 2729,

"amount_capturable": 0,

"amount_details": {

"tip": {

}

},

"amount_received": 0,

"application": null,

"application_fee_amount": null,

"automatic_payment_methods": null,

"canceled_at": null,

"cancellation_reason": null,

"capture_method": "automatic",

"client_secret": "pi_3ONoUtKhxv7ffxFk0aPDaV3z_secret_lf7amrXoftevBss6zy5rwhqmq",

"confirmation_method": "automatic",

"created": 1702697103,

"currency": "eur",

"customer": null,

"description": "Rami oda - Order 3517",

"invoice": null,

"last_payment_error": null,

"latest_charge": null,

"livemode": false,

"metadata": {

"customer_email": "[email protected]",

"customer_name": "Romualdas tAMULAI",

"order_id": "3517",

"site_url": "https://simple.tamulaitis.com"

},

"next_action": null,

"on_behalf_of": null,

"payment_method": null,

"payment_method_configuration_details": null,

"payment_method_options": {

"card": {

"installments": null,

"mandate_options": null,

"network": null,

"request_three_d_secure": "automatic"

}

},

"payment_method_types": [

"card"

],

"processing": null,

"receipt_email": null,

"review": null,

"setup_future_usage": null,

"shipping": null,

"source": null,

"statement_descriptor": null,

"statement_descriptor_suffix": null,

"status": "requires_payment_method",

"transfer_data": null,

"transfer_group": null

}

}

event:payment_intent.requires_action:

{

"object": {

"id": "pi_3ONoUtKhxv7ffxFk0aPDaV3z",

"object": "payment_intent",

"amount": 2729,

"amount_capturable": 0,

"amount_details": {

"tip": {

}

},

"amount_received": 0,

"application": null,

"application_fee_amount": null,

"automatic_payment_methods": null,

"canceled_at": null,

"cancellation_reason": null,

"capture_method": "automatic",

"client_secret": "pi_3ONoUtKhxv7ffxFk0aPDaV3z_secret_lf7amrXoftevBss6zy5rwhqmq",

"confirmation_method": "automatic",

"created": 1702697103,

"currency": "eur",

"customer": null,

"description": "Rami oda - Order 3517",

"invoice": null,

"last_payment_error": null,

"latest_charge": null,

"livemode": false,

"metadata": {

"customer_email": "[email protected]",

"customer_name": "Romualdas tAMULAI",

"order_id": "3517",

"site_url": "https://simple.tamulaitis.com"

},

"next_action": {

"type": "use_stripe_sdk",

"use_stripe_sdk": {

"source": "src_1ONoUuKhxv7ffxFkhXTT1zXb",

"stripe_js": "https://hooks.stripe.com/redirect/authenticate/src_1ONoUuKhxv7ffxFkhXTT1zXb?client_secret=src_client_secret_2cVpLt70qoh9dJ72kVfHoFSB&source_redirect_slug=test_YWNjdF8xT0N2UlhLaHh2N2ZmeEZrLF9QQ0N1VWpKeUdIU01URTA3NUtVS2VYakNsemI3czFh0100f9F8oTeK",

"type": "three_d_secure_redirect"

}

},

"on_behalf_of": null,

"payment_method": null,

"payment_method_configuration_details": null,

"payment_method_options": {

"card": {

"installments": null,

"mandate_options": null,

"network": null,

"request_three_d_secure": "automatic"

}

},

"payment_method_types": [

"card"

],

"processing": null,

"receipt_email": null,

"review": null,

"setup_future_usage": null,

"shipping": null,

"source": "src_1ONoUpKhxv7ffxFkFfPkmQO8",

"statement_descriptor": null,

"statement_descriptor_suffix": null,

"status": "requires_action",

"transfer_data": null,

"transfer_group": null

}

}

I think the problem is that payment_intent.requires_action (“stripe_js”: “https://hooks.stripe.com/redirect/authenticate/src_1ONoUuKhxv7ffxFkhXTT1zXb?client_secret=src_client_secret_2cVpLt70qoh9dJ72kVfHoFSB&source_redirect_slug=test_YWNjdF8xT0N2UlhLaHh2N2ZmeEZrLF9QQ0N1VWpKeUdIU01URTA3NUtVS2VYakNsemI3czFh0100f9F8oTeK”) uses clientSecret not from the payment_intent.created (pi_3ONoUtKhxv7ffxFk0aPDaV3z_secret_lf7amrXoftevBss6zy5rwhqmq), but from the source.chargeable (src_client_secret_bRcoO8eiV5p4AHU6YOZEQthT).

So basically what I need help with is: how to get client_secret from payment_intent.created inside my React app? Because if I get it from from source.client_secret (see my code above) I get the wrong one (with src_client in the beggining).

 

This site will teach you how to build a WordPress website for beginners. We will cover everything from installing WordPress to adding pages, posts, and images to your site. You will learn how to customize your site with themes and plugins, as well as how to market your site online.

Buy WordPress Transfer