Viewing file: PaytmPayment.php (6.32 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Modules\PaymentGateway\TopUpProvider;
use App\Models\BillingRequest;
use App\Models\Customer;
use App\Models\number;
use App\Models\NumberRequest;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Modules\PaymentGateway\Services\PaymentCredentials;
use paytm\paytmchecksum\PaytmChecksum;
class PaytmPayment implements PaymentInterface
{
public $numberReq;
public $redirect_url;
public $error_message;
public $return_view;
public $will_redirect= false;
public function __construct()
{
}
public function pay()
{
// TODO: Implement pay() method.
}
public function getCredentials()
{
$credentials= PaymentCredentials::get();
if (!$credentials->paytm_environment || !$credentials->paytm_mid || !$credentials->paytm_secret_key || !$credentials->paytm_website || !$credentials->paytm_txn_url) {
throw new \Exception('Credentials not found. Please contact with the administrator');
}
return $credentials;
}
public function topUpRequest($topup_request){
$this->topup_request=$topup_request;
return $this;
}
public function request($request)
{
$this->request = $request;
return $this;
}
public function amount($amount)
{
$this->amount = $amount;
return $this;
}
public function will_redirect()
{
// TODO: Implement will_redirect() method.
return $this->will_redirect;
}
public function redirect_url()
{
// TODO: Implement redirect_url() method.
return $this->redirect_url;
}
public function return_view()
{
// TODO: Implement redirect_url() method.
return $this->return_view;
}
public function error_message()
{
// TODO: Implement error_message() method.
return $this->error_message;
}
public function process()
{
try {
$credentials = $this->getCredentials();
$paytmData = $this->payTmPayment($this->amount, $this->request, $credentials);
$this->return_view = view('paymentgateway::number_purchase.paytm', $paytmData);
// return view('paymentgateway::paytm', $paytmData);
} catch (\Exception $ex) {
Log::error($ex);
return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Invalid Payment')]);
}
}
function payTmPayment($amount, $req, $credentials)
{
$recurring_type = 'week';
$expired = now()->addWeek();
$paytmParams = array();
$orderId = "numberORDERID_";
$mid = $credentials->paytm_mid;
$paytmParams["body"] = array(
"requestType" => "Payment",
"mid" => $mid,
"websiteName" => $credentials->paytm_website,
"orderId" => $orderId,
"callbackUrl" => route('paymentgateway::payment.number.paytm.redirect'),
"subscriptionAmountType" => "FIX",
"subscriptionFrequency" => "2",
"subscriptionFrequencyUnit" => strtoupper($recurring_type),
"subscriptionExpiryDate" => $expired,
"subscriptionEnableRetry" => "1",
"txnAmount" => array(
"value" => $amount,
"currency" => "INR",
),
"userInfo" => array(
"custId" => "CUST_"
),
);
/*
* Generate checksum by parameters we have in body
* Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys
*/
$checksum = PaytmChecksum::generateSignature(json_encode($paytmParams["body"], JSON_UNESCAPED_SLASHES), $credentials->paytm_secret_key);
$paytmParams["head"] = array(
"signature" => $checksum
);
$post_data = json_encode($paytmParams, JSON_UNESCAPED_SLASHES);
if ($credentials->paytm_environment == 'staging') {
/* for Staging */
$url = "https://securegw-stage.paytm.in/theia/api/v1/initiateTransaction?mid=" . $mid . "&orderId=" . $orderId;
}
if ($credentials->paytm_environment == 'production') {
/* for Production */
$url = "https://securegw.paytm.in/theia/api/v1/initiateTransaction?mid=" . $mid . "&orderId=" . $orderId;
}
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
$response = curl_exec($ch);
$paytmBody = $paytmParams["body"];
$paytmUserInfo = $paytmBody['userInfo'];
$response = json_decode($response);
if (!isset($response->body) || !isset($response->body->resultInfo) || $response->body->resultInfo->resultStatus != 'S') {
throw new \Exception(trans('Invalid Payment'));
}
$data['environment'] = $credentials->paytm_environment;
$data['response'] = $response;
$data['mid'] = $mid;
$data['order_id'] = $orderId;
return $data;
}
function processPaytmRedirect(Request $request)
{
if (!$this->request->TXNID || !$this->request->TXNAMOUNT || !$this->request->STATUS) {
return redirect()->route('login')->withErrors(['msg' => trans('layout.message.invalid_payment')]);
}
$credentials = $this->getCredentials();
if (!$credentials->paytm_secret_key) {
return redirect()->route('login')->withErrors(['msg' => trans('invalid Payment')]);
}
$paytmParams = $_POST;
$paytmChecksum = $_POST['CHECKSUMHASH'];
unset($paytmParams['CHECKSUMHASH']);
$isVerifySignature = PaytmChecksum::verifySignature($paytmParams, $credentials->paytm_secret_key, $paytmChecksum);
if (!$isVerifySignature) return redirect()->route('login')->withErrors(['msg' => trans('Invalid Payment')]);
$orderId = $request->ORDERID;
$orderId = explode('_', $orderId)[1];
return redirect()->route('login')->with('success', trans('Payment Success'));
}
}
|