Home / Admin / WP Simple Pay: Google GA4 Payment Conversion Tracking
Duplicate Snippet

Embed Snippet on Your Site

WP Simple Pay: Google GA4 Payment Conversion Tracking

Execute a script the first and only time a payment confirmation is viewed.

Code Preview
php
<?php
/**
 * @link https://library.wpcode.com/snippet/j57gxn45/
 */
add_action(
'simpay_payment_receipt_viewed',
	/**
	 * Runs the first time the payment confirmation page is viewed.
	 * 
	 * @param array<string, mixed> $payment_confirmation_data
	 */
	function( $payment_confirmation_data ) {
		// Gather Customer data.
		// @link https://docs.stripe.com/api/customers/object
		$customer = $payment_confirmation_data['customer'];
		
		// Gather payment data based on the payment type:
		
		// Subscription.
		if ( ! empty( $payment_confirmation_data['subscriptions'] ) ) {
			// @link https://docs.stripe.com/api/subscriptions/object
			$object = current( $payment_confirmation_data['subscriptions'] );
			
			// @link https://docs.stripe.com/api/payment_intents/object
			$payment = $object->latest_invoice->payment_intent;
			
		// Invoice (when multiple line items are enabled)
		} elseif (
			isset( $payment_confirmation_data['initial_invoice'] ) &&
			! empty( $payment_confirmation_data['initial_invoice'] )
		) {
			// @link https://docs.stripe.com/api/invoices/object
			$object = $payment_confirmation_data['initial_invoice'];
			
			// @link https://docs.stripe.com/api/payment_intents/object
			$payment = $object->payment_intent;
			
		// One-time payment.
		} else {
			// @link https://docs.stripe.com/api/payment_intents/object
			$object = current( $payment_confirmation_data['paymentintents'] );
			$payment = $object;
		}		
		
		// Uncomment to output available objects:
		// var_dump( $customer );
		// var_dump( $object );
		// var_dump( $payment );
		
		printf(
			'<script>
				gtag("event", "purchase", {
					transaction_id: "%s",
					value: %s,
					currency: "%s"
				} );
			</script>',
			$payment->id,
			$payment->amount / 100,
			$payment->currency
		);
	}
);

Comments

Add a Comment