Jump to content

Invoice ID Not Found


Aeterno

Recommended Posts

HELP :crushed: I coded a gateway module but now I need to make a callback file as I don't really feel like manually accepting my clients orders and would really love some help :? Below is my 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 https://developers.whmcs.com/payment-gateways/callbacks/
*
* @copyright Copyright (c) WHMCS Limited 2017
* @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
$invoiceId = $_REQUEST['invoiceid'];
$TRANSIDMERCHANT = $_POST['TRANSIDMERCHANT'];
$STATUSTYPE = $_POST["STATUSTYPE"];
$APPROVALCODE = $_POST["APPROVALCODE"];
$transactionId = $_POST["TRANSIDMERCHANT"];
$paymentAmount = $_POST["AMOUNT"];
$PAYMENTCODE = $_POST["PAYMENTCODE"];
$SESSIONID = $_POST["SESSIONID"];
$BANK = $_POST["BANK"];
$MCN = $_POST["MCN"];
$MTIME = date("YmdHms");
$PAYMENTDATETIME = $_POST['PAYMENTDATETIME'];
$VERIFYID = $_POST["VERIFYID"];
$VERIFYSCORE = $_POST["VERIFYSCORE"];
$VERIFYSTATUS = $_POST["VERIFYSTATUS"];
$CURRENCY = '360';
$PURCHASECURRENCY = '360';
$BRAND = $_POST["BRAND"];
$CHNAME = $_POST["CHNAME"];
$THREEDSECURESTATUS = $_POST["THREEDSECURESTATUS"];
$EDUSTATUS = 'NA';
$WORDS = $_POST['WORDS'];
$TRANSIDMERCHANT = $_POST['TRANSIDMERCHANT'];
$RESULTMSG = $_POST['RESULTMSG'];

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

/**
* Validate callback authenticity.
*
* Most payment gateways provide a method of verifying that a callback
* originated from them. In the case of our example here, this is achieved by
* way of a shared secret which is used to build and compare a hash.
*/
$SHARED_KEY = $gatewayParams['SHARED_KEY'];
$MALLID = $gatewayParams['MALLID'];


if ($hash != md5($SHARED_KEY . $MALLID . $paymentAmount . $secretKey)) {
   $transactionStatus = 'Hash Verification Failure';
   $success = false;
}

/**
* 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.
*
* @param int $invoiceId Invoice ID
* @param string $gatewayName Gateway Name
*/
//$invoiceId = $_POST['']
$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.
*
* @param string $transactionId Unique Transaction ID
*/
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,
       $paymentFee,
       $gatewayModuleName
   );

}

 

Now here is the data my gateway sends to my server on the billing log:

 

PAYMENTDATETIME => 20170821115510
PURCHASECURRENCY => 360
LIABILITY => MERCHANT
PAYMENTCHANNEL => 15
AMOUNT => 5000000.00
MCN => 411111******1111
WORDS => faa7f1ab7a7c26e7b8fb5181a682c04f9d61c280
RESULTMSG => SUCCESS
TRANSIDMERCHANT => d36c2cb81590da675450721952c6a9aee0b759d8
BANK => Bank Mandiri
STATUSTYPE => P
APPROVALCODE => 499010
EDUSTATUS => NA
THREEDSECURESTATUS => FALSE
VERIFYSCORE => -1
CURRENCY => 360
RESPONSECODE => 0000
CHNAME => Mountain Vibe
BRAND => VISA
VERIFYSTATUS => NA
SESSIONID => 0af7d79e7aa47a8a0ee67961e3d4ccb8

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