Jump to content

Custom Third Party Gateway


askraza

Recommended Posts

I am integrating alliedwallet.com quick pay which is third party payment gateway.

 

It is simple as I configured and forwarding all relevant detail to gateway and once I made payment there and returned back to invoice page its not marking invoice paid.

 

 

Here is my configration file.

 

<?php
/**
* WHMCS Sample Payment Gateway Module
*
* Payment Gateway modules allow you to integrate payment solutions with the
* WHMCS platform.
*
* This sample file demonstrates how a payment gateway module for WHMCS should
* be structured and all supported functionality it can contain.
*
* Within the module itself, all functions must be prefixed with the module
* filename, followed by an underscore, and then the function name. For this
* example file, the filename is "alliedwallet" and therefore all functions
* begin "alliedwallet_".
*
* If your module or third party API does not support a given function, you
* should not define that function within your module. Only the _config
* function is required.
*
* For more information, please refer to the online documentation.
*
* @see http://docs.whmcs.com/Gateway_Module_Developer_Docs
*
* @copyright Copyright (c) WHMCS Limited 2015
* @license http://www.whmcs.com/license/ WHMCS Eula
*/

if (!defined("WHMCS")) {
   die("This file cannot be accessed directly");
}

/**
* Define module related meta data.
*
* Values returned here are used to determine module related capabilities and
* settings.
*
* @see http://docs.whmcs.com/Gateway_Module_Meta_Data_Parameters
*
* @return array
*/
function alliedwallet_MetaData()
{
   return array(
       'DisplayName' => 'Sample Payment Gateway Module',
       'APIVersion' => '1.1', // Use API Version 1.1
       'DisableLocalCredtCardInput' => true,
       'TokenisedStorage' => false,
   );
}

/**
* Define gateway configuration options.
*
* The fields you define here determine the configuration options that are
* presented to administrator users when activating and configuring your
* payment gateway module for use.
*
* Supported field types include:
* * text
* * password
* * yesno
* * dropdown
* * radio
* * textarea
*
* Examples of each field type and their possible configuration parameters are
* provided in the sample function below.
*
* @return array
*/
function alliedwallet_config()
{
   return array(
       // the friendly display name for a payment gateway should be
       // defined here for backwards compatibility
       'FriendlyName' => array(
           'Type' => 'System',
           'Value' => 'Allied Wallet',
       ),
       // a text field type allows for single line text input
       'accountID' => array(
           'FriendlyName' => 'Merchant ID',
           'Type' => 'text',
           'Size' => '25',
           'Default' => '',
           'Description' => 'Enter your account ID here',
       ),
       // a text field type allows for single line text input
       'siteID' => array(
           'FriendlyName' => 'SiteID',
           'Type' => 'text',
           'Size' => '25',
           'Default' => '',
           'Description' => 'Enter your site ID here',
       ),
       // a password field type allows for masked text input
       'secretKey' => array(
           'FriendlyName' => 'Secret Key',
           'Type' => 'text',
           'Size' => '25',
           'Default' => '',
           'Description' => 'Enter secret key here',
       ),
       // the yesno field type displays a single checkbox option
       'testMode' => array(
           'FriendlyName' => 'Test Mode',
           'Type' => 'yesno',
           'Description' => 'Tick to enable test mode',
       ),

   );
}

/**
* Payment link.
*
* Required by third party payment gateway modules only.
*
* Defines the HTML output displayed on an invoice. Typically consists of an
* HTML form that will take the user to the payment gateway endpoint.
*
* @param array $params Payment Gateway Module Parameters
*
* @see http://docs.whmcs.com/Payment_Gateway_Module_Parameters
*
* @return string
*/
function alliedwallet_link($params)
{
   // Gateway Configuration Parameters
   $accountId = $params['accountID'];
   $siteID = $params['siteID'];
   $secretKey = $params['secretKey'];
   $testMode = $params['testMode'];
   $dropdownField = $params['dropdownField'];
   $radioField = $params['radioField'];
   $textareaField = $params['textareaField'];

   // Invoice Parameters
   $invoiceId = $params['invoiceid'];
   $description = $params["description"];
   $amount = $params['amount'];
   $currencyCode = $params['currency'];

   // Client Parameters
   $firstname = $params['clientdetails']['firstname'];
   $lastname = $params['clientdetails']['lastname'];
   $email = $params['clientdetails']['email'];
   $address1 = $params['clientdetails']['address1'];
   $address2 = $params['clientdetails']['address2'];
   $city = $params['clientdetails']['city'];
   $state = $params['clientdetails']['state'];
   $postcode = $params['clientdetails']['postcode'];
   $country = $params['clientdetails']['country'];
   $phone = $params['clientdetails']['phonenumber'];

   // System Parameters
   $companyName = $params['companyname'];
   $systemUrl = $params['systemurl'];
   $returnUrl = $params['returnurl'];
   $langPayNow = $params['langpaynow'];
   $moduleDisplayName = $params['name'];
   $moduleName = $params['paymentmethod'];
   $whmcsVersion = $params['whmcsVersion'];

   $url = 'https://quickpay.alliedwallet.com';

   $postfields = array();
   $postfields['MerchantID'] = $accountId;
   $postfields['QuickPayToken'] = $secretKey;
   $postfields['SiteID'] = $siteID;

   $postfields['MembershipRequired'] = 'false';
   $postfields['ShippingRequired'] = 'false';

   $postfields['ItemName[0]'] = $invoiceId;
   $postfields['ItemQuantity[0]'] = '1';
   $postfields['ItemDesc[0]'] = $description;
   $postfields['ItemAmount[0]'] = $amount;

   $postfields['MerchantReference'] = $invoiceId;
   $postfields['ItemAmount[0]'] = $amount;
   $postfields['AmountTotal'] = $amount;
   $postfields['CurrencyID'] = $currencyCode;

   $postfields['FirstName'] = $firstname;
   $postfields['LastName'] = $lastname;
   $postfields['Email'] = $email;
   $postfields['Address'] = $address1;
   $postfields['Address2'] = $address2;
   $postfields['City'] = $city;
   $postfields['State'] = $state;
   $postfields['PostalCode'] = $postcode;
   $postfields['Country'] = $country;
   $postfields['Phone'] = $phone;

   $postfields['ConfirmURL'] = $systemUrl . '/modules/gateways/callback/' . $moduleName . '.php';
   $postfields['ApprovedURL'] = $returnUrl;
   $postfields['DeclinedURL'] = $returnUrl;

   $htmlOutput = '<form method="post" action="' . $url . '">';
   foreach ($postfields as $k => $v) {
       $htmlOutput .= '<input type="hidden" name="' . $k . '" value="' . urlencode($v) . '" />';
   }
   $htmlOutput .= '<input type="submit" value="' . $langPayNow . '" />';
   $htmlOutput .= '</form>';

   return $htmlOutput;
}

 

 

 

------------------------------------------

 

And here is callback file.

 

<?php
/**
* WHMCS Sample Payment Callback File
*
* This sample file demonstrates how a payment gateway callback should be
* handled within WHMCS.
*
* It demonstrates verifying that the payment gateway module is active,
* validating an Invoice ID, checking for the existence of a Transaction ID,
* Logging the Transaction for debugging and Adding Payment to an Invoice.
*
* For more information, please refer to the online documentation.
*
* @see http://docs.whmcs.com/Gateway_Module_Developer_Docs
*
* @copyright Copyright (c) WHMCS Limited 2015
* @license http://www.whmcs.com/license/ WHMCS Eula
*/

// Require libraries needed for gateway module functions.
require_once __DIR__ . '/../../../init.php';
require_once __DIR__ . '/../../../includes/gatewayfunctions.php';
require_once __DIR__ . '/../../../includes/invoicefunctions.php';

// Detect module name from filename.
$gatewayModuleName = basename(__FILE__, '.php');

// Fetch gateway configuration parameters.
$gatewayParams = getGatewayVariables($gatewayModuleName);

// Die if module is not active.
if (!$gatewayParams['type']) {
   die("Module Not Activated");
}

// Retrieve data returned in payment gateway callback
// Varies per payment gateway
$success = $_POST["TransactionStatus"];
$invoiceId = $_POST["MerchantReference"];
$transactionId = $_POST["TransactionID"];
$paymentAmount = $_POST["Amount"];
#$paymentFee = $_POST["x_fee"];


$transactionStatus = $success ? 'Successful' : 'Failure';


/**
* Validate Callback Invoice ID.
*
* Checks invoice ID is a valid invoice number. Note it will count an
* invoice in any status as valid.
*
* Performs a die upon encountering an invalid Invoice ID.
*
* Returns a normalised invoice ID.
*/
$invoiceId = checkCbInvoiceID($invoiceId, $gatewayParams['name']);

/**
* Check Callback Transaction ID.
*
* Performs a check for any existing transactions with the same given
* transaction number.
*
* Performs a die upon encountering a duplicate.
*/
checkCbTransID($transactionId);

/**
* Log Transaction.
*
* Add an entry to the Gateway Log for debugging purposes.
*
* The debug data can be a string or an array. In the case of an
* array it will be
*
* @param string $gatewayName        Display label
* @param string|array $debugData    Data to log
* @param string $transactionStatus  Status
*/
logTransaction($gatewayParams['name'], $_POST, $transactionStatus);

if ($success) {

   /**
    * Add Invoice Payment.
    *
    * Applies a payment transaction entry to the given invoice ID.
    *
    * @param int $invoiceId         Invoice ID
    * @param string $transactionId  Transaction ID
    * @param float $paymentAmount   Amount paid (defaults to full balance)
    * @param float $paymentFee      Payment fee (optional)
    * @param string $gatewayModule  Gateway module name
    */
   addInvoicePayment(
       $invoiceId,
       $transactionId,
       $paymentAmount,
       $gatewayModuleName
   );

}

----------------------------

 

Gateway return status is: TransactionStatus and result is for success: Successful

 

There is no error on success transcation but its not making invoice paid. Can any one point where is issue?

 

Thanks,

Raza

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated