Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 43 |
CRAP | |
0.00% |
0 / 1031 |
PaymentGatewayService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 43 |
32580.00 | |
0.00% |
0 / 1031 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
__clone | n/a |
0 / 0 |
1 | n/a |
0 / 0 |
|||||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
getPaymentGatewayDetails | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 35 |
|||
getPaymentGatewayDetailsByModuleId | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 29 |
|||
getPaymentGatewayDetailsByCodeAndModule | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 27 |
|||
executePayment | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 37 |
|||
executePaymentForSelectedPaymentGateway | |
0.00% |
0 / 1 |
380.00 | |
0.00% |
0 / 61 |
|||
showPaymentGatewaySelectOption | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 147 |
|||
executeEazyPayPayment | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 59 |
|||
validatePaymentReq | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 14 |
|||
getPaymentAttributeValue | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 11 |
|||
executeTechProcessPayment | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 43 |
|||
executePayuMoneyPayment | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 59 |
|||
executePayuBizPayment | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 58 |
|||
executeWorldLinePayment | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
createPaymentReqInfo | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 16 |
|||
getPaymentReqInfo | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
getPaymentReqInfoByLinwaysTxnId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
updatePaymentGatewayResponse | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
updatePaymentGatewayResponseByLinwaysTxnId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
redirectToUserReturnURL | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 20 |
|||
prepareEncryptedPaymentGatewayResponse | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
executeBarodaEGatewayPayment | |
0.00% |
0 / 1 |
132.00 | |
0.00% |
0 / 87 |
|||
executeFederalBankEasyPay | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
executeRazorPay | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
executePaytm | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
executeCCAvenue | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
executeJuspay | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
executeFreeCharge | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 10 |
|||
executeEasebuzz | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 10 |
|||
executeBillDesk | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 10 |
|||
executeWorldLineTechProcessPayment | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
executeOmniware | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 10 |
|||
executeHdfcSmartGateway | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 10 |
|||
savePaymentGatewayToken | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 17 |
|||
getPaymentGatewayToken | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 16 |
|||
savePaymentGatewayUserToken | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 17 |
|||
getPaymentGatewayUserToken | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 7 |
|||
getPaymentGatewayUserTokenByUser | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 7 |
|||
getSettlementDetails | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 22 |
|||
updatePaymentRequestSettlementDetailsByLinwaysTxnId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
getPaymentGatewayModules | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 27 |
|||
executeJodo | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
<?php | |
namespace com\linways\core\ams\professional\service; | |
use Firebase\JWT\JWT; | |
use com\linways\base\mcrypt\CryptAES; | |
use com\linways\base\util\StringUtil; | |
use com\linways\base\util\SecurityUtils; | |
use Symfony\Component\HttpFoundation\Response; | |
use com\linways\core\ams\professional\util\PayUBiz; | |
use com\linways\core\ams\professional\util\PayUMoney; | |
use com\linways\core\ams\professional\dto\PaymentGateway; | |
use com\linways\core\ams\professional\constant\SettingsConstants; | |
use com\linways\core\ams\professional\dto\PaymentGatewayAttribute; | |
use com\linways\core\ams\professional\dto\PaymentGatewayUserTokens; | |
use com\linways\core\ams\professional\request\ExecutePaymentRequest; | |
use com\linways\core\ams\professional\paymentGateway\eazypay\Eazypay; | |
use com\linways\core\ams\professional\paymentGateway\jodo\JodoHelper; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\mapper\PaymentGatewayServiceMapper; | |
use com\linways\core\ams\professional\paymentGateway\juspay\JuspayHelper; | |
use com\linways\core\ams\professional\paymentGateway\paytmnew\PaytmHelper; | |
use com\linways\core\ams\professional\request\GetSettlementDetailsRequest; | |
use com\linways\core\ams\professional\paymentGateway\billdesk\BillDeskHelper; | |
use com\linways\core\ams\professional\paymentGateway\ccavenue\CCAvenueHelper; | |
use com\linways\core\ams\professional\paymentGateway\easebuzz\EasebuzzHelper; | |
use com\linways\core\ams\professional\paymentGateway\omniware\OmniwareHelper; | |
use com\linways\core\ams\professional\paymentGateway\razorpay\RazorPayHelper; | |
use com\linways\core\ams\professional\paymentGateway\barodaegateway\iPay24Pipe; | |
use com\linways\core\ams\professional\paymentGateway\worldLine\WorldLineHelper; | |
use com\linways\core\ams\professional\request\SearchPaymentGatewayModuleRequest; | |
use com\linways\core\ams\professional\paymentGateway\freecharge\FreeChargeHelper; | |
use com\linways\core\ams\professional\paymentGateway\federalbankepay\FederalBankEpayHelper; | |
use com\linways\core\ams\professional\paymentGateway\hdfcSmartGateway\HdfcSmartGatewayHelper; | |
use com\linways\core\ams\professional\paymentGateway\worldlineTechprocess\WorldLineTechProcessHelper; | |
class PaymentGatewayService extends BaseService { | |
// /Condition 1 - Presence of a static member variable | |
private static $_instance = null; | |
private $mapper = []; | |
// /Condition 2 - Locked down the constructor | |
private function __construct() { | |
$this->mapper = PaymentGatewayServiceMapper::getInstance()->getMapper(); | |
} | |
// Prevent any oustide instantiation of this class | |
// /Condition 3 - Prevent any object or instance of that class to be cloned | |
private function __clone() {} | |
// Prevent any copy of this object | |
// /Condition 4 - Have a single globally accessible static method | |
public static function getInstance() { | |
if (! is_object(self ::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null ) | |
self ::$_instance = new self(); | |
return self ::$_instance; | |
} | |
/** | |
* getPaymentGatewayDetails of given module and category | |
* | |
* @param string $module | |
* @param string $category | |
* @param int $id default null | |
* @throws ProfessionalException | |
* @return PaymentGateway | |
*/ | |
public function getPaymentGatewayDetails($module, $category,$id = null) { | |
$module = $this->realEscapeObject($module); | |
$category = $this->realEscapeObject($category); | |
$id = $this->realEscapeString($id); | |
$paymentGateways = null; | |
$sql = "SELECT | |
pg.id as paymentGatewayId,pg.code as paymentGatewayCode, | |
pg.name as paymentGatewayName, | |
pg.url as paymentGatewayUrl, | |
pga.id as paymentGatewayAttrId, | |
pga.code as paymentGatewayAttrCode, | |
pga.name as paymentGatewayAttrName, | |
pgav.id as paymentGatewayAttrValueId, | |
pgm.id as paymentGatewayModuleId, | |
pgav.value as paymentGatewayAttrValue, | |
pg.logo | |
FROM PaymentGatewayModule pgm | |
INNER JOIN PaymentGateway pg on pg.id = pgm.paymentGatewayId | |
INNER JOIN PaymentGatewayAttr pga on pga.paymentGatewayid = pg.id | |
LEFT JOIN paymentGatewayAttrValue pgav on pgav.paymentGatewayAttrId = pga.id | |
AND pgav.paymentGatewayModuleId = pgm.id | |
WHERE pgm.module = '$module' | |
AND pgm.category='$category' | |
AND pgm.is_active = '1' | |
"; | |
if($id) | |
{ | |
$sql .= " AND pg.id='$id'"; | |
} | |
try { | |
$paymentGateways = $this->executeQueryForList($sql, $this->mapper[PaymentGatewayServiceMapper ::GET_PAYMENT_GATEWAY_DETAILS]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $paymentGateways; | |
} | |
/** | |
* getPaymentGatewayDetails by module Id | |
* | |
* @param integer $moduleId | |
* @throws ProfessionalException | |
* @return PaymentGateway | |
*/ | |
public function getPaymentGatewayDetailsByModuleId($moduleId, $paymentGatewayId = null) { | |
$moduleId = $this->realEscapeObject($moduleId); | |
$paymentGatewayId = $this->realEscapeObject($paymentGatewayId); | |
$paymentGateway = null; | |
$sql = "SELECT | |
pg.id as paymentGatewayId,pg.code as paymentGatewayCode, | |
pg.name as paymentGatewayName, | |
pg.url as paymentGatewayUrl, | |
pga.id as paymentGatewayAttrId, | |
pga.code as paymentGatewayAttrCode, | |
pga.name as paymentGatewayAttrName, | |
pgav.id as paymentGatewayAttrValueId, | |
pgm.id as paymentGatewayModuleId, | |
pgav.value as paymentGatewayAttrValue | |
FROM PaymentGatewayModule pgm | |
INNER JOIN PaymentGateway pg on pg.id = pgm.paymentGatewayId | |
INNER JOIN PaymentGatewayAttr pga on pga.paymentGatewayid = pg.id | |
LEFT JOIN paymentGatewayAttrValue pgav on pgav.paymentGatewayAttrId = pga.id | |
AND pgav.paymentGatewayModuleId = pgm.id | |
WHERE pgm.id = $moduleId"; | |
if (! empty($paymentGatewayId)) { | |
$sql .= " AND pgm.paymentGatewayId = $paymentGatewayId"; | |
} | |
try { | |
$paymentGateway = $this->executeQueryForObject($sql, false, $this->mapper[PaymentGatewayServiceMapper ::GET_PAYMENT_GATEWAY_DETAILS]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $paymentGateway; | |
} | |
/** | |
* getPaymentGatewayDetails by module Id ad paymentGatewaycode | |
* | |
* @param integer $moduleId | |
* @param string $paymentGatewayCode | |
* @throws ProfessionalException | |
* @return PaymentGateway | |
*/ | |
public function getPaymentGatewayDetailsByCodeAndModule($module,$category, $paymentGatewayCode) { | |
$module = $this->realEscapeObject($module); | |
$paymentGatewayCode = $this->realEscapeObject($paymentGatewayCode); | |
$category = $this->realEscapeString($category); | |
$paymentGateway = null; | |
$sql = "SELECT | |
pg.id as paymentGatewayId,pg.code as paymentGatewayCode, | |
pg.name as paymentGatewayName, | |
pg.url as paymentGatewayUrl, | |
pga.id as paymentGatewayAttrId, | |
pga.code as paymentGatewayAttrCode, | |
pga.name as paymentGatewayAttrName, | |
pgav.id as paymentGatewayAttrValueId, | |
pgm.id as paymentGatewayModuleId, | |
pgav.value as paymentGatewayAttrValue | |
FROM PaymentGatewayModule pgm | |
INNER JOIN PaymentGateway pg on pg.id = pgm.paymentGatewayId | |
INNER JOIN PaymentGatewayAttr pga on pga.paymentGatewayid = pg.id | |
LEFT JOIN paymentGatewayAttrValue pgav on pgav.paymentGatewayAttrId = pga.id | |
AND pgav.paymentGatewayModuleId = pgm.id | |
WHERE pgm.module = '$module' AND pg.code = '$paymentGatewayCode' AND pgm.category='$category'"; | |
try { | |
$paymentGateway = $this->executeQueryForObject($sql, false, $this->mapper[PaymentGatewayServiceMapper ::GET_PAYMENT_GATEWAY_DETAILS]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $paymentGateway; | |
} | |
/** | |
* Method for executing payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @throws ProfessionalException | |
*/ | |
public function executePayment($exePaymentReq) { | |
try { | |
$paymentGateway = null; | |
$paymentGatewayList = []; | |
$exePaymentReq = $this->realEscapeObject($exePaymentReq); | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$paymentGatewayList = $this->getPaymentGatewayDetails($exePaymentReq->module, $exePaymentReq->category,$exePaymentReq->paymentGatewayId); | |
if (! empty($paymentGatewayList) && count($paymentGatewayList) > 0) { | |
// If multiple paymentgateways configured show option to choose else proceed with the configured payment gateway. | |
if (count($paymentGatewayList) > 1) { | |
switch ($exePaymentReq->paymentTransactionMode) { | |
case PaymentGateway ::PAYMENT_MODE_REFUND: | |
case PaymentGateway ::PAYMENT_MODE_INQUIRY: | |
$paymentReqInfo = $this->getPaymentReqInfoByLinwaysTxnId($exePaymentReq->linwaysTxnId); | |
if(empty($paymentReqInfo)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PAYMENT_REQUEST_INFO,"Payment request for the given linways transaction id is not found"); | |
} | |
$paymentGateway = $this->getPaymentGatewayDetailsByModuleId($paymentReqInfo->paymentGatewayModuleId,$paymentReqInfo->paymentGatewayId); | |
return $this->executePaymentForSelectedPaymentGateway($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAYMENT_MODE_PURCHASE: | |
$this->showPaymentGatewaySelectOption($paymentGatewayList, $exePaymentReq); | |
break; | |
default: | |
throw new ProfessionalException(ProfessionalException ::INVALID_PAYMENT_TRANSACTION_MODE, "Invalid Payment Transaction mode"); | |
break; | |
} | |
} else { | |
$paymentGateway = $paymentGatewayList[0]; | |
return $this->executePaymentForSelectedPaymentGateway($exePaymentReq, $paymentGateway); | |
} | |
} else { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
public function executePaymentForSelectedPaymentGateway($exePaymentReq, $paymentGateway) { | |
switch ($paymentGateway->code) { | |
case PaymentGateway ::TECH_PROCESS: | |
// $this->executePayuMoneyPayment($exePaymentReq, $paymentGateway); | |
$this->executeTechProcessPayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAY_U_MONEY: | |
return $this->executePayuMoneyPayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAY_U_BIZ: | |
return $this->executePayuBizPayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::WORLD_LINE: | |
return $this->executeWorldLinePayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::EAZYPAY: | |
return $this->executeEazyPayPayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::BANK_BARODA_EGATEWAY: | |
$this->executeBarodaEGatewayPayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::FEDERAL_BANK_EASY_PAY: | |
return $this->executeFederalBankEasyPay($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::RAZORPAY: | |
return $this->executeRazorPay($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAYTM: | |
return $this->executePaytm($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::CCAVENUE: | |
return $this->executeCCAvenue($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::JUSPAY: | |
$this->executeJuspay($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::FREE_CHARGE: | |
$this->executeFreeCharge($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::EASEBUZZ: | |
return $this->executeEasebuzz($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::BILLDESK: | |
return $this->executeBillDesk($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::JODO: | |
return $this->executeJodo($exePaymentReq,$paymentGateway); | |
break; | |
case PaymentGateway::WORLDLINE_TECHPROCESS: | |
return $this->executeWorldLineTechProcessPayment($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::OMNIWARE: | |
return $this->executeOmniware($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::HDFC_SMART_GATEWAY: | |
return $this->executeHdfcSmartGateway($exePaymentReq, $paymentGateway); | |
break; | |
default: | |
throw new ProfessionalException(ProfessionalException ::INVALID_PAYMENT_GATEWAY, "Payment gateway is not supported or integrated '$paymentGateway->code"); | |
; | |
break; | |
} | |
} | |
private function showPaymentGatewaySelectOption($paymentGatewayList, $exePaymentReq) { | |
$exePaymentReqArray = []; | |
$exePaymentReqArray['exePaymentReq'] = $exePaymentReq; | |
$jqueryUrl = "https://".$_SERVER['HTTP_HOST']."/libcommon/plugins/jQuery3.2.1/jquery-3.2.1.min.js"; | |
$encryptedReq = $this->prepareEncryptedPaymentGatewayResponse($exePaymentReqArray); | |
$multipaymentmethodResponseUrl = "https://" . $_SERVER['HTTP_HOST'] . "/paymentGateway/multiplePaymentGatewayHandler.php"; | |
$paymentGatewayInstructions = base64_decode(CommonService::getInstance()->getSettings(SettingsConstants::PAYMENT_GATEWAY,SettingsConstants::MULTIPLE_PAYMENT_GATEWAY_PAGE_INSTRUCTIONS)); | |
$checkoutHTML = "<!DOCTYPE html> | |
<html> | |
<head> | |
<meta name='viewport' content='width=device-width, initial-scale=1'> | |
<script type='text/javascript' src='$jqueryUrl'></script> | |
<style> | |
* { | |
box-sizing: border-box; | |
} | |
input[type=text], select, textarea { | |
width: 100%; | |
padding: 12px; | |
border: 1px solid #ccc; | |
border-radius: 4px; | |
resize: vertical; | |
} | |
label { | |
padding: 12px 12px 12px 0; | |
display: inline-block; | |
} | |
input[type=submit] { | |
background-color: #4CAF50; | |
color: white; | |
padding: 12px 20px; | |
border: none; | |
border-radius: 4px; | |
cursor: pointer; | |
float: right; | |
} | |
input[type=submit]:hover { | |
background-color: #45a049; | |
} | |
.container { | |
border-radius: 5px; | |
background-color: #f7f7f7; | |
padding: 20px; | |
width:60%; | |
} | |
.col-25 { | |
float: left; | |
width: 25%; | |
margin-top: 6px; | |
} | |
.col-75 { | |
float: left; | |
width: 75%; | |
margin-top: 6px; | |
text-align:left; | |
} | |
.col-100 { | |
float: left; | |
width: 100%; | |
margin-top: 6px; | |
text-align:left; | |
} | |
/* Clear floats after the columns */ | |
.row:after { | |
content: ''; | |
display: table; | |
clear: both; | |
} | |
/* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */ | |
@media screen and (max-width: 600px) { | |
.col-25, .col-75, input[type=submit] { | |
width: 100%; | |
margin-top: 0; | |
} | |
} | |
.hidden { | |
display:none; | |
} | |
</style> | |
<script> | |
function formSubmitHandler(e) | |
{ | |
$('#pay-btn').addClass('hidden'); | |
$('#errorMsg').html(''); | |
var selectedPaymentMethod = $(\"input[name='rbPaymentGateway']:checked\").val(); | |
if(!selectedPaymentMethod) | |
{ | |
$('#errorMsg').html('Please select one Payment Gateway to proceed payment'); | |
e.preventDefault(); | |
$('#pay-btn').removeClass('hidden'); | |
} | |
} | |
</script> | |
</head> | |
<body> | |
<center> | |
<h2>Available Payment Gateways for online payment</h2> | |
<div class='container'> | |
<form id='mulpaymentForm' name='mulpaymentForm' onSubmit='formSubmitHandler(event)' action='$multipaymentmethodResponseUrl' method='POST'> | |
<input type='hidden' name='executePaymentReq' value='$encryptedReq'> | |
<div class='row'> | |
<div class='col-25'> | |
<label for='famount'>Amount to pay:</label> | |
</div> | |
<div class='col-75'> | |
<input type='text' id='famount' name='amount' disabled value='$exePaymentReq->amount'> | |
</div> | |
</div> | |
<h4 style='text-align:left'>Choose Payment Gateway to proceed payment</h4> | |
<div class='row'> | |
<div class='col-25'> | |
</div> | |
<div class='col-75'>"; | |
foreach ($paymentGatewayList as $paymentGateway) { | |
$checkoutHTML .= "<div class='col-100' style='display: flex;align-items: center;'><input type='radio' id='$paymentGateway->code' name='rbPaymentGateway' value='$paymentGateway->code'>"; | |
if(!empty($paymentGateway->logo) ) { | |
$checkoutHTML .= "<img src='$paymentGateway->logo' style='width:150px;margin-left:10px;'/>"; | |
} else { | |
$checkoutHTML .= "<label for='$paymentGateway->code' style='margin-left:10px;'>$paymentGateway->name</label>"; | |
} | |
$checkoutHTML .= "</div>"; | |
} | |
$checkoutHTML .= " </div> | |
</div> | |
<div class='row'> | |
<div class='col-25'> | |
</div> | |
<div class='col-25'> | |
<input type='submit' value='Proceed to payment' id='pay-btn'> | |
</div> | |
<div class='col-75'> | |
<span id='errorMsg' style=' | |
color: red; | |
'/> | |
</div> | |
<div class='col-100'> | |
$paymentGatewayInstructions | |
</div> | |
</div> | |
</form> | |
</div> | |
</center> | |
</body> | |
</html>"; | |
return Response::create($checkoutHTML, 200, [ | |
'Content-type' => 'text/html; charset=utf-8' | |
])->send(); | |
} | |
/** | |
* Execute PayUBiz payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeEazyPayPayment(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
$merchantId = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::EAZYPAY_MERCHANT_ID, $paymentGateway->paymentGatewayAttribiues); | |
$encryptionKey = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::EAZYPAY_ENCRYPTION_KEY, $paymentGateway->paymentGatewayAttribiues); | |
$courseType = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::EAZYPAY_COURSE_TYPE, $paymentGateway->paymentGatewayAttribiues); | |
$mandatoryFieldsFormat = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::EAZYPAY_MANDATORY_FIELDS_FORMAT, $paymentGateway->paymentGatewayAttribiues); | |
$subMerchantId = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::EAZYPAY_SUB_MERCHANT_ID, $paymentGateway->paymentGatewayAttribiues); | |
$referenceNo = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::EAZYPAY_REFERENCE_NO, $paymentGateway->paymentGatewayAttribiues); | |
$optionalFields = $this->getPaymentAttributeValue(PaymentGatewayAttribute::EAZYPAY_OPTIONAL_FIELDS,$paymentGateway->paymentGatewayAttribiues); | |
$responseURL = "https://" . $_SERVER['HTTP_HOST'] . "/paymentGateway/eazypayRespHandler.php"; | |
$eazypay = new Eazypay(); | |
$eazypay->baseUrl = $paymentGateway->url; | |
$eazypay->merchantId = $merchantId; | |
$eazypay->encryptionKey = $encryptionKey; | |
$eazypay->returnURL = $responseURL; | |
$eazypay->paymode = 9; | |
$eazypay->mobileNo = $exePaymentReq->phone; | |
// Max Char allowed is 30 | |
$eazypay->username = substr($exePaymentReq->userName, 0, 30); | |
$eazypay->courseType = $courseType; | |
$eazypay->amount = $exePaymentReq->amount; | |
$eazypay->mandatoryFieldFormat = $mandatoryFieldsFormat; | |
$eazypay->optionalField = $optionalFields ? $optionalFields : null; | |
$eazypay->subMerchantId = $subMerchantId; | |
$eazypay->paymentUserdfParams = $exePaymentReq->userdfParams ?? [] ; | |
if($exePaymentReq->paymentTransactionMode == PaymentGateway::PAYMENT_MODE_INQUIRY) { | |
$eazypay->referenceNo = $exePaymentReq->linwaysTxnId; | |
$response = $eazypay->executeCheckTransactionStatus(); | |
$payemntReqInfo = PaymentGatewayService::getInstance()->getPaymentReqInfoByLinwaysTxnId($exePaymentReq->linwaysTxnId); | |
$executePaymentResponse = $exePaymentReq->userdfParams; | |
$executePaymentResponse['clientTxnId'] = $exePaymentReq->linwaysTxnId; | |
$executePaymentResponse['paymentGateway'] = PaymentGateway::EAZYPAY; | |
$executePaymentResponse['paymentGatewayId'] = $paymentGateway->id; | |
$executePaymentResponse['paymentGatewayModuleId'] = $paymentGateway->paymentGatewayModuleId; | |
$executePaymentResponse['status'] = strtoupper($response['status']) === "SUCCESS" ? PaymentGateway::PAYMENT_SUCCESS : PaymentGateway::PAYMENT_FAILED; | |
$executePaymentResponse['paymentGatewayTxnId'] = $response['ezpaytranid']; | |
PaymentGatewayService::getInstance()->updatePaymentGatewayResponseByLinwaysTxnId($payemntReqInfo->linwaysTxnId, json_encode($response)); | |
if($exePaymentReq->isBrowserRedirected == "0") { | |
return $executePaymentResponse; | |
} | |
PaymentGatewayService::getInstance()->redirectToUserReturnURL($executePaymentResponse, $exePaymentReq->returnURL); | |
} else { | |
if(empty($exePaymentReq->phone)) { | |
throw new ProfessionalException(ProfessionalException::INSUFFICIENT_PARAMETERS,"Empty phone no! Please add phone no and try again"); | |
} | |
// Create current request info | |
$currentPaymentReqId = $this->createPaymentReqInfo($paymentGateway->id, $paymentGateway->paymentGatewayModuleId, $exePaymentReq->returnURL, $exePaymentReq->userdfParams, $exePaymentReq->userId,$exePaymentReq->txnId); | |
$_SESSION['eazyPayCurrentPaymentReqId'] = $currentPaymentReqId; | |
$sessionToken = $this->savePaymentGatewayToken($_SESSION); | |
$eazypay->sentBy = $sessionToken; | |
$eazypay->referenceNo = $exePaymentReq->txnId; | |
$eazypay->initiatePurchase(); | |
} | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Validate payment request | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @throws ProfessionalException | |
* @return boolean | |
*/ | |
public function validatePaymentReq($exePaymentReq) { | |
if (! empty($exePaymentReq)) { | |
if (! empty($exePaymentReq->module)) { | |
if (! empty($exePaymentReq->category)) { | |
return true; | |
} else { | |
throw new ProfessionalException(ProfessionalException ::INVALID_PAYMENT_GATEWAY_MODULE_CATEGORY, "Invalid_payment_gateway_module_category:module category is empty or not valid."); | |
} | |
} else { | |
throw new ProfessionalException(ProfessionalException ::INVALID_PAYMENT_GATEWAY_MODULE, "Invalid_payment_gateway_module:module is empty or not valid."); | |
} | |
} else { | |
throw new ProfessionalException(ProfessionalException ::INVALID_REQUEST, "Invalid Request"); | |
} | |
} | |
/** | |
* get payment attribute value from attributelist | |
* | |
* @param string $attributeCode | |
* @param array $attributesList | |
* @return NULL | |
*/ | |
public function getPaymentAttributeValue($attributeCode, $attributesList) { | |
$attrValue = null; | |
if (! empty($attributesList) && ! empty($attributeCode)) { | |
foreach ($attributesList as $attr) { | |
if ($attr->code == $attributeCode) { | |
$attrValue = empty($attr->paymentGatewayAttributeValue) ? null : $attr->paymentGatewayAttributeValue->value; | |
break; | |
} | |
} | |
} | |
return $attrValue; | |
} | |
/** | |
* Execute tech process payment | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception | |
*/ | |
public function executeTechProcessPayment($exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
$paymentIV = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::TECH_PROCESS_ATTR_PAYMENT_IV, $paymentGateway->paymentGatewayAttribiues); | |
$paymentKey = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::TECH_PROCESS_ATTR_PAYMENT_KEY, $paymentGateway->paymentGatewayAttribiues); | |
$merchantId = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::TECH_PROCESS_ATTR_MERCHANT_ID, $paymentGateway->paymentGatewayAttribiues); | |
$reqDetails = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::TECH_PROCESS_ATTR_REGUEST_DETAILS, $paymentGateway->paymentGatewayAttribiues); | |
$bankCD = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::TECH_PROCESS_ATTR_BANK_CD, $paymentGateway->paymentGatewayAttribiues); | |
$url = $paymentGateway->url; | |
$tpResponseURL = "https://" . $_SERVER['HTTP_HOST'] . "/paymentGateway/techProcessRespHandler.php"; | |
$currentPaymentReqId = $this->createPaymentReqInfo($paymentGateway->id, $paymentGateway->paymentGatewayModuleId, $exePaymentReq->returnURL, $exePaymentReq->userdfParams, $exePaymentReq->userId,$exePaymentReq->txnId); | |
$reqDetails = StringUtil::replace_tags($reqDetails, array( | |
'amount' => $exePaymentReq->amount | |
)); | |
// constructing payload | |
$payload = "rqst_type=T|tpsl_clnt_cd=" . $merchantId . "|clnt_txn_ref=" . $exePaymentReq->txnId . "|clnt_rqst_meta={paymentReqInfoId:$currentPaymentReqId}|rqst_amnt=" . $exePaymentReq->amount . "|rqst_crncy=$exePaymentReq->currency|rtrn_url=$tpResponseURL|clnt_dt_tm=" . $exePaymentReq->timeStamp . "|rqst_rqst_dtls=$reqDetails|tpsl_bank_cd=$bankCD"; | |
// Need to store $currentPaymentReqId since techprocess send the response in encrypted format | |
$_SESSION['currentPaymentReqId'] = $currentPaymentReqId; | |
$aes = new CryptAES(); | |
$aes->require_pkcs5(); | |
$aes->set_cipher(MCRYPT_RIJNDAEL_128); | |
$aes->set_mode(MCRYPT_MODE_CBC); | |
$aes->set_iv($paymentIV); | |
$aes->set_key($paymentKey); | |
$checksumkey = SHA1($payload); | |
$payloadWithSha1 = $payload . '|hash=' . $checksumkey; | |
$dataToPostToPg = $aes->encrypt($payloadWithSha1); | |
$dataToPostToPg = $dataToPostToPg . "|" . $merchantId . "~"; | |
// techprocess | |
$wsdl = $url; | |
$options = array( | |
'location' => $wsdl | |
); | |
$client = new \SoapClient($wsdl, $options); | |
$result = $client->getTransactionToken(array( | |
'msg' => $dataToPostToPg | |
)); | |
$url = $result->getTransactionTokenReturn; | |
header("Location: $url"); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute Payumoney payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception | |
*/ | |
public function executePayuMoneyPayment($exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
// if($exePaymentReq->paymentTransactionMode === PaymentGateway::PAYMENT_MODE_INQUIRY) { | |
// throw new ProfessionalException(ProfessionalException::METHOD_NOT_IMPLEMENTED,"Feature not implemented"); | |
// } | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
$merchantId = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::PAY_U_MONEY_ATTR_MERCHANT_ID, $paymentGateway->paymentGatewayAttribiues); | |
$merchantSalt = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::PAY_U_MONEY_ATTR_MERCHANT_SALT, $paymentGateway->paymentGatewayAttribiues); | |
$authorizationHeader = $this->getPaymentAttributeValue(PaymentGatewayAttribute::PAY_U_MONEY_AUTHORIZATION_HEADER,$paymentGateway->paymentGatewayAttribiues); | |
$sessionToken = $this->savePaymentGatewayToken($_SESSION); | |
$payUResponseURL = "https://" . $_SERVER['HTTP_HOST'] . "/paymentGateway/payUMoneyRespHandler.php?sentBy=$sessionToken"; | |
$payumoney = new PayUMoney([ | |
'merchantId' => $merchantId, | |
'secretKey' => $merchantSalt, | |
'testMode' => false, | |
'authorizationHeader' => $authorizationHeader | |
]); | |
$payumoney->url = $paymentGateway->url; | |
if($exePaymentReq->paymentTransactionMode === PaymentGateway::PAYMENT_MODE_INQUIRY) { | |
$response = $payumoney->executeCheckTransactionStatus($exePaymentReq->linwaysTxnId); | |
$paymentReqInfo = $this->getPaymentReqInfoByLinwaysTxnId($exePaymentReq->linwaysTxnId); | |
$executePaymentResponse = json_decode($paymentReqInfo->userdfParams, true); | |
$executePaymentResponse['status'] = $response->status; | |
$executePaymentResponse['paymentGatewayTxnId'] = $response->data->postBackParam->mihpayid; | |
$executePaymentResponse['clientTxnId'] = $paymentReqInfo->linwaysTxnId; | |
$executePaymentResponse['paymentGateway'] = PaymentGateway ::PAY_U_MONEY; | |
$executePaymentResponse['paymentGatewayId'] = $paymentReqInfo->paymentGatewayId; | |
$executePaymentResponse['paymentGatewayModuleId'] = $paymentReqInfo->paymentGatewayModuleId; | |
$executePaymentResponse['error'] = $response->errorMessage; | |
if($exePaymentReq->isBrowserRedirected == "0") { | |
return $executePaymentResponse; | |
} else { | |
$this->redirectToUserReturnURL($executePaymentResponse, $exePaymentReq->returnURL); | |
} | |
} else{ | |
$currentPaymentReqId = $this->createPaymentReqInfo($paymentGateway->id, $paymentGateway->paymentGatewayModuleId, $exePaymentReq->returnURL, $exePaymentReq->userdfParams, $exePaymentReq->userId,$exePaymentReq->txnId); | |
// All of these parameters are required! | |
$params = [ | |
'txnid' => $exePaymentReq->txnId, | |
'amount' => $exePaymentReq->amount, | |
'productinfo' => $exePaymentReq->productInfo, | |
'firstname' => $exePaymentReq->userName, | |
'email' => $exePaymentReq->email, | |
'phone' => $exePaymentReq->phone, | |
'surl' => $payUResponseURL, | |
'furl' => $payUResponseURL, | |
'address1' => $exePaymentReq->address1, | |
'address2' => $exePaymentReq->address2, | |
'city' => $exePaymentReq->city, | |
'state' => $exePaymentReq->state, | |
'country' => $exePaymentReq->country, | |
'zipcode' => $exePaymentReq->zipcode, | |
'udf1' => $currentPaymentReqId | |
]; | |
// Redirects to PayUMoney | |
$payumoney->initializePurchase($params)->send(); | |
} | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute PayUBiz payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executePayuBizPayment($exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
$merchantId = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::PAY_U_MONEY_ATTR_MERCHANT_ID, $paymentGateway->paymentGatewayAttribiues); | |
$merchantSalt = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::PAY_U_MONEY_ATTR_MERCHANT_SALT, $paymentGateway->paymentGatewayAttribiues); | |
$sessionToken = $this->savePaymentGatewayToken($_SESSION); | |
$payUResponseURL = "https://" . $_SERVER['HTTP_HOST'] . "/paymentGateway/payUBizRespHandler.php?sentBy=".$sessionToken; | |
$payuBiz = new PayUBiz([ | |
'merchantId' => $merchantId, | |
'secretKey' => $merchantSalt, | |
'testMode' => false | |
]); | |
$payuBiz->url = $paymentGateway->url; | |
if($exePaymentReq->paymentTransactionMode === PaymentGateway::PAYMENT_MODE_INQUIRY) { | |
$response = $payuBiz->checkTransactionStatus($exePaymentReq->linwaysTxnId); | |
// building response | |
$executePaymentResponse = []; | |
$this->updatePaymentGatewayResponseByLinwaysTxnId($exePaymentReq->linwaysTxnId,json_encode($response->data)); | |
// Load user defined params | |
$executePaymentResponse = empty($exePaymentReq->userdfParams) ? [] : $exePaymentReq->userdfParams; | |
$executePaymentResponse['status'] = $response->status; | |
$executePaymentResponse['paymentGatewayTxnId'] = $response->data->mihpayid; | |
$executePaymentResponse['clientTxnId'] = $exePaymentReq->linwaysTxnId; | |
$executePaymentResponse['linwaysTxnId'] = $exePaymentReq->linwaysTxnId; | |
$executePaymentResponse['paymentGateway'] = $paymentGateway->code; | |
$executePaymentResponse['paymentGatewayId'] = $paymentGateway->id; | |
$executePaymentResponse['paymentGatewayModuleId'] = $paymentGateway->paymentGatewayModuleId; | |
$executePaymentResponse['error'] = $response->data->error_Message; | |
if($exePaymentReq->isBrowserRedirected === "0") { | |
return $executePaymentResponse; | |
} | |
PaymentGatewayService::getInstance()->redirectToUserReturnURL($executePaymentResponse, $exePaymentReq->returnURL); | |
} else { | |
$currentPaymentReqId = $this->createPaymentReqInfo($paymentGateway->id, $paymentGateway->paymentGatewayModuleId, $exePaymentReq->returnURL, $exePaymentReq->userdfParams, $exePaymentReq->userId,$exePaymentReq->txnId); | |
// All of these parameters are required! | |
$params = [ | |
'txnid' => $exePaymentReq->txnId, | |
'amount' => $exePaymentReq->amount, | |
'productinfo' => $exePaymentReq->productInfo, | |
'firstname' => $exePaymentReq->userName, | |
'email' => $exePaymentReq->email, | |
'phone' => $exePaymentReq->phone, | |
'surl' => $payUResponseURL, | |
'furl' => $payUResponseURL, | |
'address1' => $exePaymentReq->address1, | |
'address2' => $exePaymentReq->address2, | |
'city' => $exePaymentReq->city, | |
'state' => $exePaymentReq->state, | |
'country' => $exePaymentReq->country, | |
'zipcode' => $exePaymentReq->zipcode, | |
'udf1' => $currentPaymentReqId | |
]; | |
// Redirects to PayUBiz | |
$payuBiz->initializePurchase($params)->send(); | |
} | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute PayUBiz payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeWorldLinePayment($exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
// Initiate purchase | |
$worldLineHelper = new WorldLineHelper(); | |
switch ($exePaymentReq->paymentTransactionMode) { | |
case PaymentGateway ::PAYMENT_MODE_REFUND: | |
$worldLineHelper->executeRefund($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAYMENT_MODE_INQUIRY: | |
return $worldLineHelper->executeCheckTransactionStatus($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAYMENT_MODE_PURCHASE: | |
$worldLineHelper->executePurchase($exePaymentReq, $paymentGateway); | |
break; | |
default: | |
$worldLineHelper->executePurchase($exePaymentReq, $paymentGateway); | |
break; | |
} | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Create payment gateway request information | |
* | |
* @param int $paymentGatewayId | |
* @param int $paymentGatewayModuleId | |
* @param string $returnURL | |
* @param array $paymentUserdfParams | |
* @param int $userId | |
* @throws ProfessionalException | |
* @return object|NULL|\com\linways\base\util\$objectList[] | |
*/ | |
public function createPaymentReqInfo($paymentGatewayId, $paymentGatewayModuleId, $returnURL, $paymentUserdfParams, $userId, $linwaysTxnId = 0) { | |
$paymentGatewayId = $this->realEscapeObject($paymentGatewayId); | |
$paymentGatewayModuleId = $this->realEscapeObject($paymentGatewayModuleId); | |
$returnURL = $this->realEscapeObject($returnURL); | |
$paymentUserdfParams = $this->realEscapeObject($paymentUserdfParams); | |
$userId = $this->realEscapeObject($userId); | |
$linwaysTxnId = $this->realEscapeObject($linwaysTxnId); | |
$paymentUserdfParamsJson = json_encode($paymentUserdfParams); | |
$sql = "INSERT INTO PaymentReqInfo (`paymentGatewayId`,`paymentGatewayModuleId`, `returnURL`,`userdfParams`, `createdBy`, `updatedBy`, `createdDate`, `updatedDate`,`linwaysTxnId`) VALUES ($paymentGatewayId,'$paymentGatewayModuleId', '$returnURL','".addSlashes($paymentUserdfParamsJson)."', $userId, $userId, utc_timestamp(), utc_timestamp(),'$linwaysTxnId'); | |
"; | |
try { | |
$id = $this->executeQueryForObject($sql, TRUE); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $id; | |
} | |
/** | |
* Get payment gateway req information | |
* | |
* @param int $paymentRequestId | |
* @throws ProfessionalException | |
* @return object|NULL|\com\linways\base\util\$objectList[] | |
*/ | |
public function getPaymentReqInfo($paymentRequestId) { | |
$paymentRequestId = $this->realEscapeString($paymentRequestId); | |
$sql = "SELECT * FROM PaymentReqInfo WHERE id = $paymentRequestId; | |
"; | |
try { | |
$resp = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $resp; | |
} | |
/** | |
* Get payment gateway req information by linwaysTxnId | |
* | |
* @param int $linwaysTxnId | |
* @throws ProfessionalException | |
* @return object|NULL|\com\linways\base\util\$objectList[] | |
*/ | |
public function getPaymentReqInfoByLinwaysTxnId($linwaysTxnId) { | |
$linwaysTxnId = $this->realEscapeString($linwaysTxnId); | |
$sql = "SELECT * FROM PaymentReqInfo WHERE linwaysTxnId = '$linwaysTxnId' "; | |
try { | |
$resp = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $resp; | |
} | |
/** | |
* | |
* @param int $paymentRequestId | |
* @param string $paymentGatewayResponse | |
* : Should be json format text | |
* @throws ProfessionalException | |
* @return object|NULL|\com\linways\base\util\$objectList[] | |
*/ | |
public function updatePaymentGatewayResponse($paymentRequestId, $paymentGatewayResponse, $linwaysTxnId = 0) { | |
$paymentRequestId = $this->realEscapeString($paymentRequestId); | |
$paymentGatewayResponse = $this->realEscapeString($paymentGatewayResponse, false); | |
$linwaysTxnId = $this->realEscapeString($linwaysTxnId); | |
$sql = "update PaymentReqInfo set paymentGatewayResponse='$paymentGatewayResponse',linwaysTxnId = '$linwaysTxnId' WHERE id = $paymentRequestId;"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Method for updatePaymentGatewayResponseByLinwaysTxnId by using linwaysTxnId | |
* | |
* @param int $linwaysTxnId | |
* @param string $paymentGatewayResponse | |
* : Should be json format text | |
* @throws ProfessionalException | |
* @return object|NULL|\com\linways\base\util\$objectList[] | |
*/ | |
public function updatePaymentGatewayResponseByLinwaysTxnId($linwaysTxnId, $paymentGatewayResponse) { | |
$linwaysTxnId = $this->realEscapeObject($linwaysTxnId); | |
$sql = "update PaymentReqInfo set paymentGatewayResponse='$paymentGatewayResponse' WHERE linwaysTxnId = '$linwaysTxnId'"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Redirect to user defined return url. | |
* | |
* @param array $params | |
* @param string $returnURL | |
*/ | |
public function redirectToUserReturnURL(array $requestParams, $returnURL) { | |
$requestParams = array_map(function ($param) { | |
return htmlentities($param, ENT_QUOTES, 'UTF-8', false); | |
}, $requestParams); | |
$params = []; | |
$params['paymentResponse'] = $this->prepareEncryptedPaymentGatewayResponse($requestParams); | |
$output = sprintf('<form id="payment_form" method="POST" action="%s">', $returnURL); | |
foreach ($params as $key => $value) { | |
$output .= sprintf('<input type="hidden" name="%s" value="%s" />', $key, $value); | |
} | |
// $output .= '<input type="hidden" name="service_provider" value="" size="64" />'; | |
$output .= '<div id="redirect_info" style="display: none"><h4 align="center" style="color:red">Redirecting...</h4></div> | |
<input id="payment_form_submit" type="submit" value="Proceed to payment response" /> | |
</form> | |
<script> | |
document.getElementById(\'redirect_info\').style.display = \'block\'; | |
document.getElementById(\'payment_form_submit\').style.display = \'none\'; | |
document.getElementById(\'payment_form\').submit(); | |
</script>'; | |
// echo $output; | |
return Response::create($output, 200, [ | |
'Content-type' => 'text/html; charset=utf-8' | |
])->send(); | |
} | |
public function prepareEncryptedPaymentGatewayResponse(array $params) { | |
require_once getenv('NUCLEUS_CONF'); // getting secret password | |
$params['ts'] = time(); // Current unix timestamp | |
$jsonPayload = json_encode($params); | |
if ($jsonPayload === false) { | |
throw new ProfessionalException(ProfessionalException ::INVALID_PAYMENT_GATEWAY_RESPONSE, ProfessionalException ::INVALID_PAYMENT_GATEWAY_RESPONSE); | |
} | |
return SecurityUtils::encryptAndSign($jsonPayload, $GLOBALS['GENERAL_SALT']); | |
} | |
/** | |
* Execute Bank of Baroda payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeBarodaEGatewayPayment(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
$exePaymentReq = $this->realEscapeObject($exePaymentReq); | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
$currentPaymentReqId = $this->createPaymentReqInfo($paymentGateway->id, $paymentGateway->paymentGatewayModuleId, $exePaymentReq->returnURL, $exePaymentReq->userdfParams, $exePaymentReq->userId,$exePaymentReq->txnId); | |
// Need to store $currentPaymentReqId since paymentgateway send the response in encrypted format | |
$_SESSION['bbegCurrentPaymentReqId'] = null; | |
$_SESSION['bbegCurrentPaymentReqId'] = $currentPaymentReqId; | |
$sessionToken = $this->savePaymentGatewayToken($_SESSION); | |
$responseURL = "https://" . $_SERVER['HTTP_HOST'] . "/paymentGateway/barodaEgatewayRespHandler.php?sentBy=".$sessionToken; | |
// $responseURL = "https://professional.test/paymentGateway/barodaEgatewayRespHandler.php"; | |
// $ini_array = parse_ini_file("hostedhttp.ini"); | |
// $currency = 356; | |
// $language = 'USA'; | |
// $receiptURL = $responseURL; | |
// $errorURL = $responseURL; | |
// $resourcePath = "/var/www/html/core_professional/paymentGateway/barodaEgateway/cgnfile/"; | |
$aliasName = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::BANK_BARODA_EGATEWAY_ALIAS, $paymentGateway->paymentGatewayAttribiues); | |
$merchantName = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::BANK_BARODA_EGATEWAY_MERCHANT_NAME, $paymentGateway->paymentGatewayAttribiues); | |
$resourcePath = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::BANK_BARODA_EGATEWAY_RESOURCE_PATH, $paymentGateway->paymentGatewayAttribiues); | |
$currency = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::BANK_BARODA_EGATEWAY_CURRENCY, $paymentGateway->paymentGatewayAttribiues); | |
$language = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::BANK_BARODA_EGATEWAY_LANGUAGE, $paymentGateway->paymentGatewayAttribiues); | |
$transactionRef = $this->getPaymentAttributeValue(PaymentGatewayAttribute ::BANK_BARODA_EGATEWAY_TRANSACTION_REF, $paymentGateway->paymentGatewayAttribiues); | |
// Add seq no along with transaction ref | |
$transactionRef .= $currentPaymentReqId; | |
// Set payment transactin mode | |
$action = 1; | |
$transactionActionType = null; | |
// This is used for PAYMENT_MODE_REFUND and PAYMENT_MODE_INQUIRY | |
$paymentGatewayTxnId = null; | |
$iPayObj = new iPay24Pipe(); | |
$iPayObj->setResourcePath(trim($resourcePath)); | |
$iPayObj->setKeystorePath(trim($resourcePath)); | |
$iPayObj->setAlias(trim($aliasName)); | |
$iPayObj->setCurrency(trim($currency)); | |
$iPayObj->setLanguage(trim($language)); | |
$iPayObj->setResponseURL(trim($responseURL)); | |
$iPayObj->setErrorURL(trim($responseURL)); | |
$iPayObj->setAmt($exePaymentReq->amount); | |
$iPayObj->settrackId($exePaymentReq->txnId); | |
$iPayObj->setUdf16($currentPaymentReqId); | |
$iPayObj->setudf6($merchantName); | |
$iPayObj->setudf7($exePaymentReq->userName); | |
$iPayObj->setudf8($exePaymentReq->email); | |
$iPayObj->setudf9($exePaymentReq->phone); | |
$iPayObj->setudf10($exePaymentReq->userAddress); | |
$iPayObj->setudf11($exePaymentReq->amount); | |
$iPayObj->setudf12($transactionRef); | |
$iPayObj->setudf13($exePaymentReq->txnId); | |
switch ($exePaymentReq->paymentTransactionMode) { | |
case PaymentGateway ::PAYMENT_MODE_REFUND: | |
$action = 2; // 2 – Credit | |
$transactionActionType = "D"; // D (Debit) or C (Credit) | |
$linwaysTxnId = $exePaymentReq->linwaysTxnId; // Track ID generated for purchase | |
$iPayObj->setAction(trim($action)); | |
$iPayObj->settransId($linwaysTxnId); | |
// As per integration doc | |
// //Values to set in UDF5 based on the Original Transaction ID set in TransId as follows: | |
// If TransID contains Original Payment ID → UDF5 - PaymentID | |
// If TransID contains Original Track ID → UDF5 - TrackID | |
// If TransID contains Original Tran ID → UDF5 - TRANID | |
// $myObj->setUdf5(“udf5”); // PaymentID or TrackID or TRANID | |
$iPayObj->setudf5('TrackID'); | |
$iPayObj->setTypes($transactionActionType); | |
if (trim($iPayObj->performTransactionHTTP()) != 0) { | |
throw new ProfessionalException("PAYMENT_GATEWAY_HANDSHAKE_FAILED", $iPayObj->geterror()); | |
} | |
break; | |
case PaymentGateway ::PAYMENT_MODE_INQUIRY: | |
$action = 8; // 8 – Inquiry | |
$transactionActionType = "D"; // D (Debit) or C (Credit) | |
$linwaysTxnId = $exePaymentReq->linwaysTxnId; // Track ID generated for purchase | |
$iPayObj->setAction(trim($action)); | |
$iPayObj->settransId($linwaysTxnId); | |
// As per integration doc | |
// //Values to set in UDF5 based on the Original Transaction ID set in TransId as follows: | |
// If TransID contains Original Payment ID → UDF5 - PaymentID | |
// If TransID contains Original Track ID → UDF5 - TrackID | |
// If TransID contains Original Tran ID → UDF5 - TRANID | |
// $myObj->setUdf5(“udf5”); // PaymentID or TrackID or TRANID | |
$iPayObj->setudf5('TrackID'); | |
$iPayObj->setTypes($transactionActionType); | |
if (trim($iPayObj->performTransactionHTTP()) != 0) { | |
throw new ProfessionalException("PAYMENT_GATEWAY_HANDSHAKE_FAILED", $iPayObj->geterror()); | |
} | |
break; | |
case PaymentGateway ::PAYMENT_MODE_PURCHASE: | |
$action = 1; // Purchase// | |
$iPayObj->setAction(trim($action)); | |
if (trim($iPayObj->performPaymentInitializationHTTP()) != 0) { | |
throw new ProfessionalException("PAYMENT_GATEWAY_HANDSHAKE_FAILED", $iPayObj->geterror()); | |
} | |
break; | |
default: | |
$action = 1; // Purchase// | |
$iPayObj->setAction(trim($action)); | |
if (trim($iPayObj->performPaymentInitializationHTTP()) != 0) { | |
throw new ProfessionalException("PAYMENT_GATEWAY_HANDSHAKE_FAILED", $iPayObj->geterror()); | |
} | |
break; | |
} | |
$url = trim($iPayObj->getWebAddress()); | |
echo "<meta http-equiv='refresh' content='0;url=$url'>"; | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute Federal Bank Epay payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeFederalBankEasyPay(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$federalBankEpayHelper = new FederalBankEpayHelper(); | |
return $federalBankEpayHelper->executePayment($exePaymentReq, $paymentGateway); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute Razorpay payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeRazorPay(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$razorPayHelper = new RazorPayHelper(); | |
return $razorPayHelper->executePayment($exePaymentReq, $paymentGateway); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute Paytm payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception | |
*/ | |
public function executePaytm(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$paytmHelper = new PaytmHelper(); | |
return $paytmHelper->executePayment($exePaymentReq, $paymentGateway); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute CCAvenue payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception | |
*/ | |
public function executeCCAvenue(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$ccavenueHelper = new CCAvenueHelper(); | |
return $ccavenueHelper->executePayment($exePaymentReq, $paymentGateway); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute CCAvenue payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception | |
*/ | |
public function executeJuspay(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$juspayHelper = new JuspayHelper(); | |
$juspayHelper->executePayment($exePaymentReq, $paymentGateway); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
public function executeFreeCharge (ExecutePaymentRequest $exePaymentReq,PaymentGateway $paymentGateway) { | |
try{ | |
if($this->validatePaymentReq($exePaymentReq)) | |
{ | |
$freeChargeHelper = new FreeChargeHelper(); | |
$freeChargeHelper->executePayment($exePaymentReq,$paymentGateway); | |
} | |
}catch(\Exception $e) { | |
throw $e; | |
} | |
} | |
public function executeEasebuzz (ExecutePaymentRequest $exePaymentReq,PaymentGateway $paymentGateway) { | |
try{ | |
if($this->validatePaymentReq($exePaymentReq)) | |
{ | |
$easebuzzHelper = new EasebuzzHelper(); | |
return $easebuzzHelper->executePayment($exePaymentReq,$paymentGateway); | |
} | |
}catch(\Exception $e) { | |
throw $e; | |
} | |
} | |
public function executeBillDesk (ExecutePaymentRequest $exePaymentReq,PaymentGateway $paymentGateway) { | |
try{ | |
if($this->validatePaymentReq($exePaymentReq)) | |
{ | |
$billDeskHelper = new BillDeskHelper(); | |
return $billDeskHelper->executePayment($exePaymentReq,$paymentGateway); | |
} | |
}catch(\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* Execute PayUBiz payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeWorldLineTechProcessPayment($exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
if (empty($paymentGateway)) { | |
throw new ProfessionalException(ProfessionalException ::NO_PAYMENT_GATEWAY_FOUND, "Payment gateway not configured or no payment gateway found for module '$exePaymentReq->module' and category '$exePaymentReq->category'"); | |
} | |
// Initiate purchase | |
$worldLineTechProcessHelper = new WorldLineTechProcessHelper(); | |
switch ($exePaymentReq->paymentTransactionMode) { | |
case PaymentGateway ::PAYMENT_MODE_REFUND: | |
$worldLineTechProcessHelper->executeRefund($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAYMENT_MODE_INQUIRY: | |
return $worldLineTechProcessHelper->executeCheckTransactionStatus($exePaymentReq, $paymentGateway); | |
break; | |
case PaymentGateway ::PAYMENT_MODE_PURCHASE: | |
$worldLineTechProcessHelper->executePurchase($exePaymentReq, $paymentGateway); | |
break; | |
default: | |
$worldLineTechProcessHelper->executePurchase($exePaymentReq, $paymentGateway); | |
break; | |
} | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
public function executeOmniware (ExecutePaymentRequest $exePaymentReq,PaymentGateway $paymentGateway) { | |
try{ | |
if($this->validatePaymentReq($exePaymentReq)) | |
{ | |
$omniwareHelper = new OmniwareHelper(); | |
return $omniwareHelper->executePayment($exePaymentReq,$paymentGateway); | |
} | |
}catch(\Exception $e) { | |
throw $e; | |
} | |
} | |
public function executeHdfcSmartGateway (ExecutePaymentRequest $exePaymentReq,PaymentGateway $paymentGateway) { | |
try{ | |
if($this->validatePaymentReq($exePaymentReq)) | |
{ | |
$hdfcSmartGatewayHelper = new HdfcSmartGatewayHelper(); | |
return $hdfcSmartGatewayHelper->executePayment($exePaymentReq,$paymentGateway); | |
} | |
}catch(\Exception $e) { | |
throw $e; | |
} | |
} | |
/** | |
* save payment gateway tokens | |
* @param Array $payload | |
*/ | |
public function savePaymentGatewayToken($payload,$exp = 600,$id=null) | |
{ | |
$createdBy = $_SESSION['studentID']; | |
require_once getenv('NUCLEUS_CONF'); // getting secret password | |
try{ | |
$token = array( | |
"sub" => $payload, | |
"exp" => time() + $exp | |
); | |
$jwt = JWT::encode($token,$GLOBALS['GENERAL_SALT']); | |
$id = $id ? $id : SecurityUtils::getRandomString(); | |
$query = "INSERT INTO paymentGatewayTokens (id,jwt,created_by,created_date,updated_by,updated_date) VALUES ('$id','$jwt','$createdBy',UTC_TIMESTAMP(),'$createdBy',UTC_TIMESTAMP()) ON DUPLICATE KEY UPDATE jwt='$jwt',updated_by='$createdBy',updated_date=UTC_TIMESTAMP();"; | |
$this->executeQuery($query); | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
return $id; | |
} | |
public function getPaymentGatewayToken($id) | |
{ | |
if(empty($id)) | |
{ | |
throw new ProfessionalException(ProfessionalException::INVALID_REQUEST,"ID is empty!Please provide a valid ID"); | |
} | |
require_once getenv('NUCLEUS_CONF'); // getting secret password | |
$id = $this->realEscapeString($id); | |
$query = "SELECT id,jwt FROM paymentGatewayTokens WHERE id='$id'"; | |
try{ | |
$paymentGatewayToken = $this->executeQueryForObject($query); | |
$payload = JWT::decode($paymentGatewayToken->jwt,$GLOBALS['GENERAL_SALT'],array('HS256')); | |
return (array) $payload->sub; | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
} | |
public function savePaymentGatewayUserToken(PaymentGatewayUserTokens $paymentGatewayUserTokens){ | |
try{ | |
$generatedTokenDetails = $this->getPaymentGatewayUserTokenByUser($paymentGatewayUserTokens); | |
$id = SecurityUtils::getRandomString(); | |
if(empty($generatedTokenDetails)) | |
{ | |
$query = "INSERT INTO `payment_gateway_user_tokens` (`id`, `token`, `user_id`, `user_type`, `module`, `created_by`, `created_date`, `updated_by`, `updated_date`) VALUES ('$id', '$paymentGatewayUserTokens->token', '$paymentGatewayUserTokens->userId', '$paymentGatewayUserTokens->userType', '$paymentGatewayUserTokens->module', '$paymentGatewayUserTokens->createdBy', UTC_TIMESTAMP(), '$paymentGatewayUserTokens->updatedBy', UTC_TIMESTAMP())"; | |
} | |
else | |
{ | |
$query = "UPDATE payment_gateway_user_tokens SET token='$paymentGatewayUserTokens->token' WHERE user_id='$paymentGatewayUserTokens->userId' AND user_type='$paymentGatewayUserTokens->userType' AND module='$paymentGatewayUserTokens->module'"; | |
} | |
$this->executeQuery($query); | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
return $id; | |
} | |
public function getPaymentGatewayUserToken(PaymentGatewayUserTokens $paymentGatewayUserTokens){ | |
try{ | |
$query = "SELECT id,token,user_id as userId, user_type as userType, module FROM payment_gateway_user_tokens WHERE token='$paymentGatewayUserTokens->token' AND user_id='$paymentGatewayUserTokens->userId' AND user_type='$paymentGatewayUserTokens->userType' AND module='$paymentGatewayUserTokens->module'"; | |
return $this->executeQueryForObject($query); | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
} | |
private function getPaymentGatewayUserTokenByUser(PaymentGatewayUserTokens $paymentGatewayUserTokens){ | |
try{ | |
$query = "SELECT id,token,user_id as userId, user_type as userType, module FROM payment_gateway_user_tokens WHERE user_id='$paymentGatewayUserTokens->userId' AND user_type='$paymentGatewayUserTokens->userType' AND module='$paymentGatewayUserTokens->module'"; | |
return $this->executeQueryForObject($query); | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* Get settlement details | |
* @param GetSettlementDetailsRequest $request | |
* return $settlementDetails | |
*/ | |
public function getSettlementDetails($request) | |
{ | |
$settlementDetails = []; | |
$request = $this->realEscapeObject($request); | |
$paymentGateways = $this->getPaymentGatewayDetails($request->module,$request->category,$request->paymentGatewayId); | |
foreach($paymentGateways as $paymentGateway) { | |
$settlements = []; | |
switch($paymentGateway->code) { | |
case PaymentGateway::WORLD_LINE: | |
$worldLineHelper = new WorldLineHelper(); | |
$settlements = $worldLineHelper->executeGetSettlementDetailsBetweenTwoDates($request,$paymentGateway); | |
break; | |
case PaymentGateway::RAZORPAY: | |
$razorPayHelper = new RazorPayHelper(); | |
$settlements = $razorPayHelper->getSettlementDetails($request,$paymentGateway); | |
break; | |
case PaymentGateway::WORLDLINE_TECHPROCESS: | |
break; | |
} | |
$settlementDetails = array_merge($settlementDetails,$settlements); | |
} | |
return $settlementDetails; | |
} | |
public function updatePaymentRequestSettlementDetailsByLinwaysTxnId($linwaysTxnId,$settlementDetails) | |
{ | |
$linwaysTxnId = $this->realEscapeString($linwaysTxnId); | |
$settlementDetails = $this->realEscapeObject($settlementDetails); | |
$query = "UPDATE PaymentReqInfo SET settlement_details='".addslashes(json_encode($settlementDetails))."' WHERE linwaysTxnId='$linwaysTxnId'"; | |
try{ | |
$this->executeQuery($query); | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
} | |
public function getPaymentGatewayModules(SearchPaymentGatewayModuleRequest $request) | |
{ | |
$query = "SELECT pgm.id,pgm.paymentGatewayId,pgm.module,pgm.category,pgm.is_active AS isActive,pg.name,pg.code | |
FROM | |
PaymentGatewayModule pgm | |
INNER JOIN PaymentGateway pg ON pg.id=pgm.paymentGatewayId WHERE 1=1"; | |
if(!empty($request->module)) { | |
$query .= " AND pgm.module='$request->module'"; | |
} | |
if(!empty($request->category)) { | |
$query .= " AND pgm.category='$request->category'"; | |
} | |
if(!empty($request->paymentGatewayId)) { | |
$query .= " AND pgm.paymentGatewayId='$request->paymentGatewayId'"; | |
} | |
if(!empty($request->id)) { | |
$query .= " AND pgm.id='$request->id'"; | |
} | |
if($request->isActive == 1 || $request->isActive == 0) { | |
$query .= " AND pgm.is_active='$request->isActive'"; | |
} | |
try{ | |
$paymentGatewayList = $this->executeQueryForList($query); | |
}catch(\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
return $paymentGatewayList; | |
} | |
/** | |
* Execute Jodo payment process | |
* | |
* @param ExecutePaymentRequest $exePaymentReq | |
* @param PaymentGateway $paymentGateway | |
* @throws \Exception:: | |
*/ | |
public function executeJodo(ExecutePaymentRequest $exePaymentReq, PaymentGateway $paymentGateway) { | |
try { | |
if ($this->validatePaymentReq($exePaymentReq)) { | |
$jodoPayHelper = new JodoHelper(); | |
return $jodoPayHelper->executePayment($exePaymentReq, $paymentGateway); | |
} | |
} catch (\Exception $e) { | |
throw $e; | |
} | |
} | |
} | |