Viewing file: PaytmPayment.php (6.46 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Modules\PaymentGateway\SenderIdPurchaseGateway;
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 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 = json_decode(get_settings('payment_gateway')); 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 senderId($sender_id){ $this->sender_id = $sender_id; 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->sender_id, $credentials);
$this->return_view = view('paymentgateway::sender_id.paytm', $paytmData); // return view('paymentgateway::sender_id.paytm', $paytmData); } catch (\Exception $ex) { Log::error($ex); dd($ex->getMessage()); return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Invalid Payment')]); } }
function payTmPayment($sender_id, $credentials) { $recurring_type = 'week'; $expired = now()->addWeek();
$paytmParams = array(); $price = json_decode(get_settings('senderid_price'))->sender_id_price; $orderId = "ORDERID_" . $sender_id->id; $mid = $credentials->paytm_mid; $paytmParams["body"] = array( "requestType" => "Payment", "mid" => $mid, "websiteName" => $credentials->paytm_website, "orderId" => $orderId, "callbackUrl" => route('paymentgateway::sender.id.paytm.redirect'), "subscriptionAmountType" => "FIX", "subscriptionFrequency" => "2", "subscriptionFrequencyUnit" => strtoupper($recurring_type), "subscriptionExpiryDate" => $expired, "subscriptionEnableRetry" => "1", "txnAmount" => array( "value" => $price, "currency" => "INR", ), "userInfo" => array( "custId" => "CUST_" . auth('customer')->user()->id, ), );
/* * 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->ORDERID || !$this->request->TXNID || !$this->request->TXNAMOUNT || !$this->request->STATUS) { return redirect()->route('login')->withErrors(['msg' => trans('layout.message.invalid_payment')]); }
$credentials = json_decode(get_settings('payment_gateway')); 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];
$senderId= auth('customer')->user()->sender_ids()->where('id', $orderId)->first(); if (!$senderId) return redirect()->route('login')->withErrors(['msg' => trans('Invalid Payment')]);
if ($request->STATUS != 'TXN_SUCCESS') return redirect()->route('login')->withErrors(['msg' => trans('Invalid Payment')]);
$senderId->is_paid = 'yes'; $senderId->save();
return redirect()->route('login')->with('success', trans('Payment Success'));
}
}
|