Gateway – Stripe

Filters/Codesnippets WPPizza -> Gateways -> Stripe

Codesnippet(s) to modify “Stripe” gateway options – namely test/live api keys in this example – depending on the user selection of a custom added dropdown formfield, in this case allowing for different stripe accounts to be targeted depending on “Shop Branches” selection by user (requires WPPizza Stripe v4.1+)

 
 

A) Register a custom “Shop Branches” dropdown formfield as per “Register Formfields” filter

@param: array
@return: array

/*
	register a dropdown field containing shop branches
*/
add_filter('wppizza_register_formfields', 'myprefix_branches_dropdown');
function myprefix_branches_dropdown($formfields){	

	/* 
		*unique* identifier for the formfield you want to add
	*/
	$unique_ident = 'shop_branch';

	/*********************************************** 
		adding a select dropdown
	***********************************************/
	$formfields[$unique_ident] = array(
		/* sort order - at which position is this field displayed */
		'sort' => 10,
		/* the unique ident  */
		'key' => $unique_ident ,
		/* label displayed for the formfield */
		'lbl' => 'some label',
		/* an array of available dropdown values*/
		'value' => array('Branch 1','Branch 2','Branch 3','Branch N'),
		/* set to select to display a select dropdown*/
		'type' => 'select',
		/* true to enable (pointless to set this to false)*/
		'enabled' => true,
		/* true to make the field required on delivery, false otherwise */
		'required' => true,
		/* true to make the field required on pickup, false otherwise */
		'required_on_pickup' => true,
		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,
		/* true to make field part of the user registration values */
		'onregister' => false,
		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,
		/* placeholder - used as initial, non-selected value  or bool false / empty */
		'placeholder' => '--Please Select--',
		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array, 
		however as this is a select field , the rules as set below are really the only sensible setting here
		*/
		'validation' => array(
			'default' => true,
		),			
	);

return $formfields;
}

 
 

B) Set session data – via ajax – on change of dropdown value

/*
	adding javascript to footer of checkout page using 'wp_footer' action
	- updates (session) user data - via ajax - on change of dropdown field
	- results in reload of page which subsequently applies filtered options
	as per 'wppizza_gateway_stripe_filter_options' below
*/
add_action('wp_footer', 'myprefix_on_branches_change');
function myprefix_on_branches_change(){	

	/* 
		same *unique* identifier set for the formfield
	*/
	$unique_ident = 'shop_branch';

	if(wppizza_is_checkout()){
		echo"<script> 
	
			jQuery(document).ready(function($){
				
				$(document).on('change', '#".$unique_ident."', function(e){
					//add loading div 
					$('html').css({'position':'relative'});/*stretch html to make loading cover whole page */
					$('body').prepend('<div class=\"wppizza-loading\"></div>');
					$('.wppizza-ordernow').attr('disabled', 'true');/* disable send order button */
				
					jQuery.post(wppizza.ajaxurl , {action :'wppizza_json', vars:{'type':'update_userdata', 'data': $('#wppizza-send-order').serialize()}}, function(obj) {
						
						window.location.reload(true);
						
						return;
						
					},'json');
				
				});
			
			});
	
		</script>";
	
	}
}

 
 

C) Apply live/test Api keys depending on “Branch” selected

@param: array
@param: array
@param: str
@return: array

/*
	apply test/live keys 
	depending on branch selected
	Note: the 'filter_ident' parameter (identifies which function calls the filter) is only referenced here for completeness sake and will not be required in 99.9% of cases
*/
add_filter('wppizza_gateway_stripe_filter_options', 'myprefix_filter_stripe_options', 10, 3);
function myprefix_filter_stripe_options($gateway_options, $order_details, $filter_ident){	

	/* 
		same *unique* identifier set for the formfield
	*/
	$unique_ident = 'shop_branch';
	
	/*
		values branch 1
	*/
	if($order_details['customer'][$unique_ident]['value'] == 'Branch 1' ){
		/*
			set Stripe API keys as required for Branch 1
			edit as required 
		*/
		$gateway_options['LiveSecretKey'] = 'sk_live_someapikeybranch_1';
		$gateway_options['LivePublishableKey'] = 'pk_live_someapikeybranch_1';
		$gateway_options['TestSecretKey'] = 'sk_test_someapikeybranch_1';
		$gateway_options['TestPublishableKey'] = 'pk_test_someapikeybranch_1';
		$gateway_options['WebhookLiveKey'] = 'whsec_someapikeybranch_1';
		$gateway_options['WebhookTestKey'] = 'whsec_someapikeybranch_1';
		
	}
	/*
		values branch 2
	*/
	elseif($order_details['customer'][$unique_ident]['value'] == 'Branch 2' ){
		
		/*
			set Stripe API keys as required for Branch 2
			edit as required 
		*/
		$gateway_options['LiveSecretKey'] = 'sk_live_someapikeybranch_2';
		$gateway_options['LivePublishableKey'] = 'pk_live_someapikeybranch_2';
		$gateway_options['TestSecretKey'] = 'sk_test_someapikeybranch_2';
		$gateway_options['TestPublishableKey'] = 'pk_test_someapikeybranch_2';
		$gateway_options['WebhookLiveKey'] = 'whsec_someapikeybranch_2';
		$gateway_options['WebhookTestKey'] = 'whsec_someapikeybranch_2';		
		
	}
	
	/*
		... etc etc ....
	*/
	
return $gateway_options;
}