Back | Home
الـ Path الحالي: /home/picotech/domains/instantly.picotech.app/public_html/public/../Modules/PaymentGateway/PaymentGatewayProvider/.
الملفات الموجودة في هذا الـ Path:
.
..
AuthorizeNetPayment.php
CashmallPayment.php
IyzicoPayment.php
MolliePayment.php
PayPalPayment.php
Payment.php
PaymentGateway.php
PaymentInterface.php
PaystackPayment.php
PaytmPayment.php
ProcessPayment.php
StripeCheckoutPayment.php
StripePayment.php
مشاهدة ملف: PaytmPayment.php
<?php
namespace Modules\PaymentGateway\PaymentGatewayProvider;
use App\Models\BillingRequest;
use App\Models\Plan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use paytm\paytmchecksum\PaytmChecksum;
class PaytmPayment implements PaymentInterface
{
public $planReq;
public $redirect_url;
public $error_message;
public $return_view;
public $total;
public $will_redirect= false;
public function __construct($total)
{
$this->total=$total;
return $this;
}
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 request($request)
{
$this->request = $request;
return $this;
}
public function plan($plan){
$this->plan = $plan;
return $this;
}
public function plan_request($planReq){
$this->planReq = $planReq;
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->plan, $this->request, $this->planReq, $credentials);
$this->return_view = view('paymentgateway::paytm', $paytmData);
// return view('paymentgateway::paytm', $paytmData);
} catch (\Exception $ex) {
Log::error($ex);
// dd($ex->getMessage());
return redirect()->route('customer.billing.index')->withErrors(['msg' => trans('Invalid Payment')]);
}
}
function payTmPayment($plan, $req, $planReq, $credentials)
{
$recurring_type = 'week';
$expired = now()->addWeek();
$paytmParams = array();
$orderId = "PLANORDERID_" . $planReq->id;
$mid = $credentials->paytm_mid;
$paytmParams["body"] = array(
"requestType" => "Payment",
"mid" => $mid,
"websiteName" => $credentials->paytm_website,
"orderId" => $orderId,
"callbackUrl" => route('paymentgateway::payment.paytm.redirect'),
"subscriptionAmountType" => "FIX",
"subscriptionFrequency" => "2",
"subscriptionFrequencyUnit" => strtoupper($recurring_type),
"subscriptionExpiryDate" => $expired,
"subscriptionEnableRetry" => "1",
"txnAmount" => array(
"value" => $this->total,
"currency" => "INR",
),
"userInfo" => array(
"custId" => "CUST_" . $planReq->customer_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];
$billingRequest= BillingRequest::find($orderId);
if (!$billingRequest) return redirect()->route('login')->withErrors(['msg' => trans('Invalid Payment')]);
$plan= Plan::where('id',$billingRequest->id)->first();
if ($request->TXNAMOUNT != format_number($this->total, 2)) return redirect()->route('login')->withErrors(['msg' => trans('Invalid Payment')]);
if ($request->STATUS != 'TXN_SUCCESS') return redirect()->route('login')->withErrors(['msg' => trans('Invalid Payment')]);
$billingRequest->status = 'accepted';
$billingRequest->save();
return redirect()->route('login')->with('success', trans('Payment Success'));
}
}