FreelanceEngine: Payment Gateway Integration

Updated on November 14, 2024 in No Category
0 on January 13, 2015

After researching and implementing a new payment gateway for your site, this tutorial will help you show the new payment gateway on your site along with existing gateways like: Paypal and 2Checkout.

In order to integrate new gateway, you must follow these steps:

  1. Render payment button
  2. Setup payment
  3. Process payment

The first step is rendering payment button for a new payment gateway. In this tutorial, we name the button “custom-payment”

To render payment button in your theme, you may add a filter in functions.php to your child theme. In case you haven’t known how to activate child theme, check out here: http://support.enginethemes.com/customer/portal/articles/897324-how-to-get-and-use-child-theme-to-customize-your-site

add_action('after_payment_list', 'ae_stripe_render_button');
function ae_stripe_render_button() {
?>
<li>
<span class="title-plan stripe-payment" data-type="stripe">
<?php
_e("Custom payment", ET_DOMAIN); ?>
<span><?php
_e("Send your payment to our custom payment", ET_DOMAIN); ?></span>
</span>
<a href="#" class="btn btn-submit-price-plan select-payment" data-type="custom-payment"><?php
_e("Select", ET_DOMAIN); ?></a>
</li>
<?php
}

Noted: “data-type” is the name of payment gateway

When users select a payment gateway, an Ajax request includes payment gateway name and billing details will be sent to server. Data sent to server is:

// post id
 ID: this.model.id,
 // author
 author: this.model.get('post_author'),
 // package sku id
 packageID: this.model.get('et_payment_package'),
 // payment gateway 
 paymentType: paymentType,
 // send coupon code if exist
 coupon_code: view.$('#coupon_code').val()
 },

Then, server will catch the Ajax request and process it. Ajax callback locates at includes/aecore/payments.php line 166, in function setup_payment.

To integrate new payment gateway, you need to use filter ae_setup_payment. This filter need to return a response:

//Success: true/false
//Data: include received data and the most important is URL 
//(URL will direct user to payment page, it should contain your custom payment required parameter such as: return url, price, item ... )
//Payment type: name of payment gateway

add_filter('ae_setup_payment', 'ae_custom_setup_payment', 10, 3);
function ae_custom_setup_payment($response, $paymentType, $order) {
if( $paymentType == 'custom-payment') { 
// your payment setup code
}
return $response;
}

The response will be send back to user client and process user to payment gateway.

Note: The transaction is executed at template page-process-payment.php, you can get the URL of the page with function et_get_page_link(‘process-payment’, array(‘paymentType’ => ‘custom-payment’)); . You should setup the return url parameter for your custom gateway is process payment page url.

After the transaction is successful, the page is going to be re-directed to a process payment page. Here you can use hook ae_process_payment to analyze received data.

add_filter( 'ae_process_payment', 'ae_stripe_process_payment', 10 ,2 );
 function ae_stripe_process_payment ( $payment_return, $data) {
 $payment_type = $data['payment_type'];
 $order = $data['order'];
 if( $payment_type == 'custom-payment') {
 // your payment process code
 }
 return $payment_return;
 }

$payment_return is an array including parameters:

ACK: true/false
 Payment_status: pending/completed
 Payment: ‘custom-payment"
 
  • Liked by
Reply