Atom payment gateway integration in PHP step by step tutorial (Hindi)
Payment gateway integration

Atom payment gateway integration in PHP – Atom Payment gateway integrate कैसे करें?

आज के दिन में लगभग सभी office या online store online money collect करते हैं चाहे वह school हो, tuition हो, या फिर कोई organization हो| आज के दिन में ढेर सारे payment gateway available हो चुके हैं जैसे की Payumoney, Instamojo, Juspay, ATOM, Ccavenue, Razorpay, etc. तो आज के इस tutorial में हम आपको बतायेंगे की ATOM payment gateway को PHP में कैसे integrate करें? How to integrate atom payment gateway in PHP? ATOM Payment Gateway integration easy steps

Atom payment gateway integration in PHP – Atom Payment gateway integrate कैसे करें?

इस payment gateway को आप बहुत ही आसानी से integrate कर सकते हैं क्योंकि इसका library पहले से बना हुआ है और उसमें मैंने थोडा सा extra facility add कर दिया है जिससे आप इसको और भी आसानी से अपने website में integrate कर सकते हैं| अगर आपको इसके payment gateway integrate करने में कोई परेशानी होती है तो आप हमारे team को सस्ते rate में hire कर सकते हैं|

इस payment gateway को integrate करने में एक common error show होती है वो कुछ इस प्रकार है| ” Insufficient Merchant Information. Sorry unable to process your request…! “ यह तब show होता है जब आप कोई भी data सही से नहीं भेज रहे होते हैं जैसे की अगर आप transaction id random नहीं generate कर रहे हैं या फिर आपने गलत login password enter किया है या फिर आपने गलत environment value pass किया है|

यह code PHP 7.3 में बनाया गया है| इसमें total 4 pages हैं पहला page Atompay.php है जिसमें की आपको किसी भी प्रकार की Changement नहीं करनी है क्योंकि यह पहले से बना हुआ library है|

दूसरा page index.php है जिसमें मैंने Form का code लिखा है| यह फॉर्म बहुत ही simple तरीके से बनाया गया है ताकि सभी को easily समझ आ जाये|

तीसरा page Request.php है जिसमें मैं फॉर्म का data को पोस्ट करूँगा और उसको payment gateway पर redirect करूँगा|

चौथा page Response.php है जिसमें payment gateway के तरफ से response मिलेगा|

चलिए अब हम code के साथ समझते हैं की यह कैसे work करता है| सबसे पहले मैं library का code share करता हूँ| जिसका file name Atompay.php है इसे बस आपको अपने folder में store करना है| इसमें किसी भी प्रकार का Changement आपको नहीं करना है| यहाँ पर मैं सभी files को एक ही folder के अन्दर store कर रहा हूँ|

File Name: Atompay.php

<?php
class Atompay{
  private $login;
  private $password;
  private $transactionType;
  private $productId;
  private $amount;
  private $transactionCurrency;
  private $transactionAmount;
  private $clientCode;
  private $transactionId;
  private $transactionDate;
  private $customerAccount;
  private $customerName;
  private $customerEmailId;
  private $customerMobile;
  private $customerBillingAddress;
  private $returnUrl;
  private $mode = "test";
  private $transactionUrl;
  private $nbType = "NBFundTransfer";
  private $ccType = "CCFundTransfer";
  private $reqHashKey = "";
  private $respHashKey = "";
  public function getReqHashKey(){
      return $this->reqHashKey;
  }
  public function setReqHashKey($reqHashKey){
      $this->reqHashKey = $reqHashKey;
  }
  public function getRespHashKey(){
      return $this->respHashKey;
  }
  public function setRespHashKey($respHashKey){
      $this->respHashKey = $respHashKey;
  }
  public function getLogin(){
      return $this->login;
  }
  public function setLogin($login){
      $this->login = $login;
  }
  public function getPassword(){
      return $this->password;
  }
  public function setPassword($password){
      $this->password = $password;
  }
  public function getTransactionType(){
      return $this->transactionType;
  }
  public function setTransactionType($transactionType){
      $this->transactionType = $transactionType;
  }
  public function getProductId(){
      return $this->productId;
  }
  public function setProductId($productId){
      $this->productId = $productId;
  }
  public function getAmount(){
      return $this->amount;
  }
  public function setAmount($amount){
      $this->amount = $amount;
  }

  /**
   * @return the $transactionCurrency
   */


  public function getTransactionCurrency()
  {
      return $this->transactionCurrency;
  }

  /**
   * @param string $transactionCurrency
   */


  public function setTransactionCurrency($transactionCurrency)
  {
      $this->transactionCurrency = $transactionCurrency;
  }

  /**
   * @return the $transactionAmount
   */


  public function getTransactionAmount()
  {
      return $this->transactionAmount;
  }

  /**
   * @param string $transactionAmount
   */


  public function setTransactionAmount($transactionAmount)
  {
      $this->transactionAmount = $transactionAmount;
  }

  /**
   * @return the $transactionId
   */


  public function getTransactionId()
  {
      return $this->transactionId;
  }

  /**
   * @param string $transactionId
   */


  public function setTransactionId($transactionId)
  {
      $this->transactionId = $transactionId;
  }

  /**
   * @return the $transactionDate
   */


  public function getTransactionDate()
  {
      return $this->transactionDate;
  }

  /**
   * @param string $transactionDate
   */


  public function setTransactionDate($transactionDate)
  {
      $this->transactionDate = $transactionDate;
  }

  /**
   * @return the $customerAccount
   */


  public function getCustomerAccount()
  {
      return $this->customerAccount;
  }

  /**
   * @param string $customerAccount
   */


  public function setCustomerAccount($customerAccount)
  {
      $this->customerAccount = $customerAccount;
  }

  /**
   * @return the $customerName
   */


  public function getCustomerName()
  {
      return $this->customerName;
  }

  /**
   * @param string $customerName
   */


  public function setCustomerName($customerName)
  {
      $this->customerName = $customerName;
  }

  /**
   * @return the $customerEmailId
   */


  public function getCustomerEmailId()
  {
      return $this->customerEmailId;
  }

  /**
   * @param string $customerEmailId
   */


  public function setCustomerEmailId($customerEmailId)
  {
      $this->customerEmailId = $customerEmailId;
  }

  /**
   * @return the $customerMobile
   */


  public function getCustomerMobile()
  {
      return $this->customerMobile;
  }

  /**
   * @param string $customerMobile
   */


  public function setCustomerMobile($customerMobile)
  {
      $this->customerMobile = $customerMobile;
  }

  /**
   * @return the $customerBillingAddress
   */


  public function getCustomerBillingAddress()
  {
      return $this->customerBillingAddress;
  }

  /**
   * @param string $customerBillingAddress
   */


  public function setCustomerBillingAddress($customerBillingAddress)
  {
      $this->customerBillingAddress = $customerBillingAddress;
  }

  /**
   * @return the $returnUrl
   */


  public function getReturnUrl()
  {
      return $this->returnUrl;
  }

  /**
   * @param string $returnUrl
   */


  public function setReturnUrl($returnUrl)
  {
      $this->returnUrl = $returnUrl;
  }

  /**
   * @return the $mode
   */


  public function getMode()
  {
      return $this->mode;
  }

  /**
   * @param string $mode
   */


  public function setMode($mode)
  {
      $this->mode = $mode;
  }

  /**
   * @return the $transactionUrl
   */


  public function getTransactionUrl()
  {
      return $this->transactionUrl;
  }

  /**
   * @param string $transactionUrl
   */


  public function setTransactionUrl($transactionUrl)
  {
      $this->transactionUrl = $transactionUrl;
  }
  public function getnbType() {
  return $this->nbType;
  }
  public function getccType() {
  return $this->ccType;
  }
  private function setUrl() {
  $port = 443;
  if($this->getMode() == "live"){
    $url = "https://payment.atomtech.in/paynetz/epi/fts";
  } else {
    $url = "https://paynetzuat.atomtech.in/paynetz/epi/fts";
  }
  $this->setTransactionUrl($url);
  $this->setPort($port);
  }
  public function setClientCode($clientCode) {
  if($clientCode == NULL || $clientCode == ""){
    $this->clientCode = urlencode(base64_encode(123));
  } else {
    $this->clientCode = urlencode(base64_encode($clientCode));
  }
  }
  private function getClientCode() {
  return $this->clientCode;
  }
  private function setPort($port) {
  $this->port = $port;
  }
  private function getPort() {
  return $this->port;
  }
  public function getChecksum(){
      $str = $this->login . $this->password . "NBFundTransfer" . $this->productId . $this->transactionId . $this->amount . "INR";
      $signature =  hash_hmac("sha512",$str,$this->reqHashKey,false);
      return $signature;
  }
  private function getData(){
    $strReqst = "";
    $strReqst .= "login=".$this->getLogin();
    $strReqst .= "&pass=".$this->getPassword();

    //$txnType = $this->getTransactionType();
    //if($txnType== 'NB'){

        $strReqst .= "&ttype=NBFundTransfer";

    //}else{
      //$strReqst .= "&ttype=".$this->getccType();
    //}

    $strReqst .= "&prodid=".$this->getProductId();
    $strReqst .= "&amt=".$this->getAmount();
    $strReqst .= "&txncurr=".$this->getTransactionCurrency();
    $strReqst .= "&txnscamt=".$this->getTransactionAmount();
    $strReqst .= "&ru=".$this->getReturnUrl();
    $strReqst .= "&clientcode=".$this->getClientCode();
    $strReqst .= "&txnid=".$this->getTransactionId();
    $strReqst .= "&date=".$this->getTransactionDate();
    $strReqst .= "&udf1=".$this->getCustomerName();
    $strReqst .= "&udf2=".$this->getCustomerEmailId();
    $strReqst .= "&udf3=".$this->getCustomerMobile();
    $strReqst .= "&udf4=".$this->getCustomerBillingAddress();
    $strReqst .= "&custacc=".$this->getCustomerAccount();
        $strReqst .= "&signature=".$this->getChecksum();
    return $strReqst;
  }

  /**
   * This function returns transaction token url
   * @return string
   */


  public function getPGUrl(){
      if ($this->mode != null && $this->mode != "") {
          try {
      $this->setUrl();
              $data = $this->getData();
      $this->writeLog($data);
      return $this->transactionUrl . "?" .$data;
          } catch ( Exception $ex ) {
              echo "Error while getting transaction token : " . $ex->getMessage();
              return;
          }
      } else {
          return "Please set mode live or test";
      }
  }
  private function writeLog($data){
    $fileName = "date".date("Y-m-d").".txt";
    if (!file_exists('log')) {
        mkdir('log/', 0777, true);
    }
    $fp = fopen("log/".$fileName, 'a+');
    $data = date("Y-m-d H:i:s")." - ".$data;
    fwrite($fp,$data);
    fclose($fp);
  }

  // RESPONSE

  public function validateResponse($responseParams)
  {
      $str = $responseParams["mmp_txn"].$responseParams["mer_txn"].$responseParams["f_code"].$responseParams["prod"].$responseParams["discriminator"].$responseParams["amt"].$responseParams["bank_txn"];
      $signature =  hash_hmac("sha512",$str,$this->respHashKey,false);
      if($signature == $responseParams["signature"]){
          return true;
      } else {
          return false;
      }
  }
  public function atomResponse($responseHashKey){
    $this->setRespHashKey($responseHashKey);
    if($this->validateResponse($_POST)){
        return $_POST;
    } else {
        return "Invalid Signature";
    }
  }


  // CREATE

  public function atom_request($env, $login, $password, $product, $amount, $currency, $returnUrl, $clientCode, $name, $email, $mobile, $address, $account, $requestHashKey){
    //Setting all values here
    
    $transactionId = rand(1,1000000);
    $datenow = date("d/m/Y h:m:s");
    $transactionDate = str_replace(" ", "%20", $datenow);
    $this->setMode($env);
    $this->setLogin($login);
    $this->setPassword($password);
    $this->setProductId($product);
    $this->setAmount($amount);
    $this->setTransactionCurrency($currency);
    $this->setTransactionAmount($amount);
    $this->setReturnUrl($returnUrl);
    $this->setClientCode($clientCode);
    $this->setTransactionId($transactionId);
    $this->setTransactionDate($transactionDate);
    $this->setCustomerName($name);
    $this->setCustomerEmailId($email);
    $this->setCustomerMobile($mobile);
    $this->setCustomerBillingAddress($address);
    $this->setCustomerAccount($account);
    $this->setReqHashKey($requestHashKey);
    $url = $this->getPGUrl();
    header("Location: ".$url);
  }
}
?>

दूसरा file index.php है जिसमें फॉर्म का design किया गया है| इसमें कुल पांच field हैं| Name, Email, Mobile, Address और Amount.

File Name: index.php

<!DOCTYPE html>
<html>
<head>
	<title>Atom Payment Gateway Integration</title>
</head>
<body>

	<div>
		<form method="post" action="request.php">
			<label>Name :</label>
			<input type="text" name="name_field"><br><br>

			<label>Email :</label>
			<input type="email" name="email"><br><br>

			<label>Mobile :</label>
			<input type="number" name="mobile"><br><br>

			<label>Address :</label>
			<textarea name="address"></textarea><br><br>

			<label>Amount :</label>
			<input type="number" name="amount"><br><br>

			<button type="submit" style="background: green;color: white;" name="save">Pay Button</button>
		</form>
	</div>
</body>
</html>

तीसरा file request.php हैं जिसमें फॉर्म का data को post कर रहें हैं| इसमें कुछ fields हैं जिनके value हमें ATOM पर account बनाने के बाद मिलते हैं| जैसे की login, password, product, request hash key. यहाँ $env का value दो प्रकार का हो सकता है पहला test और दूसरा live. ATOM पर account बनाने के लिए यहाँ click करें|

<?php

require_once 'Atompay.php';

if(isset($_POST['save']))
{
	$name = $_POST['name_field'];
	$email = $_POST['email'];
	$address = $_POST['address'];
	$mobile = $_POST['mobile'];
	$amount = $_POST['amount'];


	$env = "live"; 
	$login = 121120;
	$password = 'abc@555';
	$product = "abcdemo";
	$currency = "INR";
	$returnUrl = 'http://www.example.com/response.php';
	$clientCode = '45554';
	$account = '63524'; 
	$requestHashKey = 'adaddfsa';


	$atompay = new Atompay();
	$atompay->atom_request($env, $login, $password, $product, $amount, $currency, $returnUrl, $clientCode, $name, $email, $mobile, $address, $account, $requestHashKey);
}

चौथा file response.php है जिसमें हमें payment gateway का response receive हो रहा है| इसमें response hash key है जो की आपको ATOM के website पर account बनाने के बाद मिलता है|

<?php

require_once 'Atompay.php';

$atompay = new Atompay();
$response = $atompay->atomResponse('abcedaldffajljl'); // change your response has key

if(is_array($response))
{
	if(strtolower($response['f_code']) == 'ok')
	{
		echo "Success";
	}
	elseif(strtolower($response['f_code']) == 'c')
	{
		echo "Cancel";
	}
	else
	{
		echo "Failed";
	}
}

ऊपर के code में आपको response मिल रहा है जो की $response variable में receive हो रहा है| यह एक array होगा जिसमें आपको ढेर सारे index और उनके value मिलेंगे आप अपने जरुरत के अनुसार उसे अपने database में save कर सकते हैं|

यहाँ पर हमें तीन प्रकार का response मिल सकता है| पहला OK मतलब की success, C = Cancel, F = Failed

Code Download Link: Click here to download

Video Tutorial

Conclusion and Final Words

Atom payment gateway integration के बहुत ही simple step मैंने आपके साथ share किये हैं| इसमें हमने कई जगह पर integrate करने के बाद ही यहाँ पर पोस्ट share किया है ताकि दुसरो को परेशानी का सामना ना करना पड़े|

इस article में मैंने steps को अच्छे से describe किया है आप इस tutorial को पढ़ के आसानी से atom payment gateway को integrate कर सकते हैं|

Read Also:

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.