jimboobrien
7/24/2017 - 11:44 PM

Stripe Payments - WordCamp ATL 2015

Stripe Payments - WordCamp ATL 2015

<?php

function stripe_process_webhook( $request ) {
    $body = @file_get_contents('php://input');
    $stripe_payload = json_decode( $body );
	
    if ( !empty( $stripe_payload->id ) ) {
	    try {
		    $secret_key = 'secret-key';
		    Stripe::setApiKey( $secret_key );
			$stripe_event = Stripe_Event::retrieve( $stripe_payload->id );
	
			$stripe_object = $stripe_event->data->object;
	
			//https://stripe.com/docs/api#event_types
			switch( $stripe_event->type ) {
	
				case 'charge.succeeded' :
					//Record the transaction for the customer...
					break;
				case 'charge.failed' :
					//Record the failure for the customer...
					break;
				case 'charge.refunded' :
					//Record the refund for the customer...
					break;
				case 'charge.dispute.created' :
				case 'charge.dispute.updated' :
				case 'charge.dispute.closed' :
					//Record the dispute for the customer...
					break;
				case 'customer.deleted' :
					//Delete the Stripe ID from the customer...
					break;				
	
			}
		}
		catch( Exception $e ) {
			error_log( $e->getMessage() );
		}
    }
}
<?php

function stripe_process_transaction( $status, $transaction_object ) {
	// Verify nonce
	if ( ! empty( $_REQUEST['_stripe_nonce'] ) && ! wp_verify_nonce( $_REQUEST['_stripe_nonce'], 'stripe-checkout' ) ) {
		error_log( 'Transaction Failed, unable to verify security token.' );
		return false;
	}

	// Make sure we have the correct $_POST argument
	if ( ! empty( $_POST['stripeToken'] ) ) {
		try {

			$secret_key = 'secret-key';
			$customer_email = '';
			Stripe::setApiKey( $secret_key );

			// Set stripe token
			$token = $_POST['stripeToken'];

			$customer_array = array(
				'email' => $customer_email,
				'card'  => $token,
			);
			$stripe_customer = Stripe_Customer::create( $customer_array );

			// Now that we have a valid Customer ID, charge them!
			$args = apply_filters( 'it_exchange_stripe_addon_charge_args', array(
				'customer'    => $stripe_customer->id,
				'amount'      => number_format( cart_total(), 2, '', '' ), //no decimal!
				'currency'    => 'usd',
				'description' => $description,
			) );
			$charge = Stripe_Charge::create( $args );
			return $charge->id;

		}
		catch ( Exception $e ) {
			error_log( $e->getMessage() );
			return false;
		}
	}
	return false;

}

function cart_total() {
	return '50.00';
}
<?php

// Custom forms: https://stripe.com/docs/tutorials/forms

function stripe_payment_button() {
	$payment_image = false;

    $publishable_key = 'key';
	$transaction_return_page = get_permalink( 1 ); //Whatever page ID you're using for your transaction return page
	$description = 'S-Mart';
	$image = 'http://domain.tld/assets/image.png'; //If you want a custom image to appear on the Stripe popup

	$payment_form  = '<form action="' . $transaction_return_page .'" method="POST">';
	$payment_form .= '<input type="hidden" name="transaction-method" value="stripe" />';
	$payment_form .= wp_nonce_field( 'stripe-checkout', '_stripe_nonce', true, false );
	$payment_form .= '<script';
	$payment_form .= ' 	src="https://checkout.stripe.com/checkout.js" class="stripe-button"';
	$payment_form .= ' 	data-key="' . esc_js( $publishable_key ) . '"';
	$payment_form .= ' 	data-amount="' . esc_js( number_format( cart_total(), 2, '', '' ) ) . '"';
	$payment_form .= ' 	data-name="' . esc_js( strip_tags( $company_name ) ) . '"';
	$payment_form .= ' 	data-description="' . esc_js( strip_tags( $description ) ) . '"';
	$payment_form .= '	data-image="' . esc_js( strip_tags( $image ) ) . '">';
	$payment_form .= '</script>';
	$payment_form .= '</form>';

    return $payment_form;
}