You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							132 lines
						
					
					
						
							4.8 KiB
						
					
					
				
			
		
		
	
	
							132 lines
						
					
					
						
							4.8 KiB
						
					
					
				| <?php
 | |
| 
 | |
| namespace App\Http\Controllers;
 | |
| 
 | |
| use Illuminate\Http\Request;
 | |
| use MercadoPago\SDK;
 | |
| use MercadoPago\Payment;
 | |
| use MercadoPago\Payer;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use App\Models\Order;
 | |
| use App\Models\BusinessSetting;
 | |
| use App\CentralLogics\Helpers;
 | |
| use App\CentralLogics\OrderLogic;
 | |
| 
 | |
| class MercadoPagoController extends Controller
 | |
| {
 | |
|     private $data;
 | |
| 
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->data = Helpers::get_business_settings('mercadopago');
 | |
|     }
 | |
|     public function index(Request $request)
 | |
|     {
 | |
|         $data = $this->data;
 | |
| 
 | |
|         $order = Order::with(['details'])->where(['id' => session('order_id')])->first();
 | |
| 
 | |
|         return view('payment-view-marcedo-pogo', compact('data', 'order'));
 | |
|     }
 | |
|     public function make_payment(Request $request)
 | |
|     {
 | |
|         SDK::setAccessToken($this->data['access_token']);
 | |
|         $payment = new Payment();
 | |
|         $payment->transaction_amount = (float)$request['transactionAmount'];
 | |
|         $payment->token = $request['token'];
 | |
|         $payment->description = $request['description'];
 | |
|         $payment->installments = (int)$request['installments'];
 | |
|         $payment->payment_method_id = $request['paymentMethodId'];
 | |
|         $payment->issuer_id = (int)$request['issuer'];
 | |
| 
 | |
|         $payer = new Payer();
 | |
|         $payer->email = $request['payer']['email'];
 | |
|         $payer->identification = array(
 | |
|             "type" => $request['payer']['identification']['type'],
 | |
|             "number" => $request['payer']['identification']['number']
 | |
|         );
 | |
|         $payment->payer = $payer;
 | |
| 
 | |
|         $payment->save();
 | |
| 
 | |
|         $response = array(
 | |
|             'status' => $payment->status,
 | |
|             'status_detail' => $payment->status_detail,
 | |
|             'id' => $payment->id
 | |
|         );
 | |
| 
 | |
|         if($payment->error)
 | |
|         {
 | |
|             $response['error'] = $payment->error->message;
 | |
|         }
 | |
|         if($payment->status == 'approved')
 | |
|         {
 | |
|             $order = Order::where(['id' => session('order_id'), 'user_id'=>session('customer_id')])->first();
 | |
|             try {
 | |
|                 $order->transaction_reference = $payment->id;
 | |
|                 $order->payment_method = 'mercadopago';
 | |
|                 $order->payment_status = 'paid';
 | |
|                 $order->order_status = 'confirmed';
 | |
|                 $order->confirmed = now();
 | |
|                 $order->save();
 | |
|                 $fcm_token = $order->customer->cm_firebase_token;
 | |
|                 $value = Helpers::order_status_update_message('confirmed');
 | |
|                 if ($value) {
 | |
|                     $data = [
 | |
|                         'title' =>translate('messages.order_placed_successfully'),
 | |
|                         'description' => $value,
 | |
|                         'order_id' => $order['id'],
 | |
|                         'image' => '',
 | |
|                         'type'=>'order_status'
 | |
|                     ];
 | |
|                     Helpers::send_push_notif_to_device($fcm_token, $data);
 | |
|                     DB::table('user_notifications')->insert([
 | |
|                         'data'=> json_encode($data),
 | |
|                         'user_id'=>$order->customer->id,
 | |
|                         'created_at'=>now(),
 | |
|                         'updated_at'=>now()
 | |
|                     ]);
 | |
|                 }
 | |
|                 $data = [
 | |
|                     'title' =>translate('messages.order_placed_successfully'),
 | |
|                     'description' => translate('messages.new_order_push_description'),
 | |
|                     'order_id' => $order->id,
 | |
|                     'image' => '',
 | |
|                     'type'=>'order_status',
 | |
|                 ];
 | |
|                 Helpers::send_push_notif_to_device($order->restaurant->vendor->firebase_token, $data);
 | |
|                 DB::table('user_notifications')->insert([
 | |
|                     'data'=> json_encode($data),
 | |
|                     'vendor_id'=>$order->restaurant->vendor_id,
 | |
|                     'created_at'=>now(),
 | |
|                     'updated_at'=>now()
 | |
|                 ]);
 | |
|             } catch (\Exception $e) {
 | |
|             }
 | |
|         }
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     public function get_test_user(Request $request)
 | |
|     {
 | |
|         // curl -X POST \
 | |
|         // -H "Content-Type: application/json" \
 | |
|         // -H 'Authorization: Bearer PROD_ACCESS_TOKEN' \
 | |
|         // "https://api.mercadopago.com/users/test_user" \
 | |
|         // -d '{"site_id":"MLA"}'
 | |
| 
 | |
|         $curl = curl_init();
 | |
|         curl_setopt($curl, CURLOPT_URL, "https://api.mercadopago.com/users/test_user");
 | |
|         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 | |
|         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 | |
|         curl_setopt($curl, CURLOPT_POST, true);
 | |
|         curl_setopt($curl, CURLOPT_HTTPHEADER, array(
 | |
|             'Content-Type: application/json',
 | |
|             'Authorization: Bearer '.$this->data['access_token']
 | |
|         ));
 | |
|         curl_setopt($curl, CURLOPT_POSTFIELDS, '{"site_id":"MLA"}');
 | |
|         $response = curl_exec($curl);
 | |
|         dd($response);
 | |
| 
 | |
|     }
 | |
| }
 | |
| 
 |