SaveText.Ru

itvnua95
  1. <?php
  2.  
  3. namespace AppHttpControllers;
  4.  
  5. use IlluminateHttpRequest;
  6. use Cart,Auth,Mail;
  7. use AppModelsOrder;
  8. use AppModelsOrderDetail;
  9. use AppModelsUser;
  10. use AppModelsVnpay;
  11. use AppNotificationscheckoutNoti;
  12. use CarbonCarbon;
  13.  
  14. class VnpayController extends Controller
  15. {
  16.     public function vnpay(){
  17.         $couponId = session()->get('coupon')['couponId'] ?? 0;
  18.         $discount = session()->get('coupon')['discount'] ?? 0;
  19.         $newtotal = (Cart::total() - $discount);
  20.         $content = Cart::content();
  21.         $total = Cart::total();
  22.         return view('frontend.vnpay_index',compact('content','total'))->with([
  23.             'couponId' => $couponId,
  24.             'discount' => $discount,
  25.             'newtotal' => $newtotal
  26.         ]);
  27.     }
  28.     public function create_vnpay(Request $req){
  29.         $valid = array('code' => false, 'messages' => array());
  30.         if($req->city==NULL){
  31.             $valid['code'] = false;
  32.             $valid['messages'] = "Vui lòng nhập thành phố";
  33.             return json_encode(array(
  34.                 'valid' => $valid
  35.             ));
  36.         }
  37.         if($req->district==NULL){
  38.             $valid['code'] = false;
  39.             $valid['messages'] = "Vui lòng nhập quận huyện";
  40.             return json_encode(array(
  41.                 'valid' => $valid
  42.             ));
  43.         }
  44.         if($req->address==NULL){
  45.             $valid['code'] = false;
  46.             $valid['messages'] = "Vui lòng nhập địa chỉ";
  47.             return json_encode(array(
  48.                 'valid' => $valid
  49.             ));
  50.         }
  51.         if($req->note==NULL){
  52.             $valid['code'] = false;
  53.             $valid['messages'] = "Vui lòng nhập nội dung thanh toán";
  54.             return json_encode(array(
  55.                 'valid' => $valid
  56.             ));
  57.         }
  58.        
  59.         $totalMoney = str_replace('.', '', Cart::total());
  60.         $orderId = Order::insertGetId([
  61.             'email' => $req->email,
  62.             'user_id' => Auth::user()->id,
  63.             'total' => ((int)$totalMoney - $discount = session()->get('coupon')['discount']) ?? (int)$totalMoney,
  64.             'note' => $req->note,
  65.             'phone' => $req->phone,
  66.             'city_id' => $req->city,
  67.             'district_id' => $req->district,
  68.             'address' => $req->address,
  69.             'payment_method' => 'atm',
  70.             'payment' => 'Chưa thanh toán',
  71.             'coupon_id' => $couponId = session()->get('coupon')['couponId'] ?? NULL,
  72.             'created_at' => Carbon::now(),
  73.             'updated_at' => Carbon::now()
  74.         ]);
  75.        
  76.         if ($orderId) {
  77.             $content = Cart::content();
  78.             foreach ($content as $item)
  79.             {
  80.                 OrderDetail::insert([
  81.                 'order_id' => $orderId,
  82.                 'product_id' => $item->id,
  83.                 'qty' => $item->qty,
  84.                 'size_id' => $item->options->size,
  85.                 'price' => $item->options->price_old,
  86.                 'price_sale' => $item->options->sale,
  87.                 'created_at' => Carbon::now(),
  88.                 'updated_at' => Carbon::now()
  89.                 ]);
  90.             }
  91.         }
  92.         //Sau khi xu ly xong
  93.         error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
  94.         /**
  95.          * Description of vnpay_ajax
  96.          *
  97.          * @author xonv
  98.          */
  99.         $vnp_TmnCode = "UDOPNWS1"; //Mã website tại VNPAY
  100.         $vnp_HashSecret = "EBAHADUGCOEWYXCMYZRMTMLSHGKNRPBN"; //Chuỗi bí mật
  101.         $vnp_Url = "http://sandbox.vnpayment.vn/paymentv2/vpcpay.html";
  102.         $vnp_Returnurl = "http://localhost/lavoro56/gio-hang/thanh-toan-atm/vnpay-return";
  103.  
  104.         //$vnp_TxnRef = $_POST['order_id']; //Mã đơn hàng. Trong thực tế Merchant cần insert đơn hàng vào DB và gửi mã này sang VNPAY
  105.         //$vnp_OrderInfo = $_POST['order_desc'];
  106.         $vnp_OrderType = $_POST['order_type'];
  107.  
  108.         $vnp_Amount = (((int)$totalMoney - $discount = session()->get('coupon')['discount']) ?? (int)$totalMoney) *100;
  109.        
  110.         $vnp_Locale = $_POST['language'];
  111.         $vnp_BankCode = $_POST['bank_code'];
  112.         $vnp_IpAddr = $_SERVER['REMOTE_ADDR'];
  113.  
  114.         $inputData = array(
  115.             "vnp_Version" => "2.0.0",
  116.             "vnp_TmnCode" => $vnp_TmnCode,
  117.             "vnp_Amount" => $vnp_Amount,
  118.             "vnp_Command" => "pay",
  119.             "vnp_CreateDate" => date('YmdHis'),
  120.             "vnp_CurrCode" => "VND",
  121.             "vnp_IpAddr" => $vnp_IpAddr,
  122.             "vnp_Locale" => $vnp_Locale,
  123.             "vnp_OrderInfo" => $req->note,
  124.             "vnp_OrderType" => $vnp_OrderType,
  125.             "vnp_ReturnUrl" => $vnp_Returnurl,
  126.             "vnp_TxnRef" => $orderId
  127.         );
  128.  
  129.         if (isset($vnp_BankCode) && $vnp_BankCode != "") {
  130.             $inputData['vnp_BankCode'] = $vnp_BankCode;
  131.         }
  132.         ksort($inputData);
  133.         $query = "";
  134.         $i = 0;
  135.         $hashdata = "";
  136.         foreach ($inputData as $key => $value) {
  137.             if ($i == 1) {
  138.                 $hashdata .= '&' . $key . "=" . $value;
  139.             } else {
  140.                 $hashdata .= $key . "=" . $value;
  141.                 $i = 1;
  142.             }
  143.             $query .= urlencode($key) . "=" . urlencode($value) . '&';
  144.         }
  145.  
  146.         $vnp_Url = $vnp_Url . "?" . $query;
  147.         if (isset($vnp_HashSecret)) {
  148.            // $vnpSecureHash = md5($vnp_HashSecret . $hashdata);
  149.             $vnpSecureHash = hash('sha256', $vnp_HashSecret . $hashdata);
  150.             $vnp_Url .= 'vnp_SecureHashType=SHA256&vnp_SecureHash=' . $vnpSecureHash;
  151.         }
  152.         $returnData = array('code' => '00'
  153.             , 'message' => 'success'
  154.             , 'data' => $vnp_Url);
  155.         echo json_encode($returnData);
  156.     }
  157.  
  158.     public function vnpay_ipn(){
  159.  
  160.         /*
  161.          * IPN URL: Ghi nhận kết quả thanh toán từ VNPAY
  162.          * Các bước thực hiện:
  163.          * Kiểm tra checksum
  164.          * Tìm giao dịch trong database
  165.          * Kiểm tra tình trạng của giao dịch trước khi cập nhật
  166.          * Cập nhật kết quả vào Database
  167.          * Trả kết quả ghi nhận lại cho VNPAY
  168.          */
  169.  
  170.         $vnp_TmnCode = "UDOPNWS1"; //Mã website tại VNPAY
  171.         //dd($vnp_TmnCode);
  172.         $vnp_HashSecret = "EBAHADUGCOEWYXCMYZRMTMLSHGKNRPBN"; //Chuỗi bí mật
  173.         $vnp_Url = "http://sandbox.vnpayment.vn/paymentv2/vpcpay.html";
  174.         $vnp_Returnurl = "http://localhost/lavoro56/gio-hang/thanh-toan-atm/vnpay-return";
  175.         $inputData = array();
  176.         $returnData = array();
  177.         $data = $_REQUEST;
  178.         foreach ($data as $key => $value) {
  179.             if (substr($key, 0, 4) == "vnp_") {
  180.                 $inputData[$key] = $value;
  181.             }
  182.         }
  183.  
  184.         $vnp_SecureHash = $inputData['vnp_SecureHash'];
  185.         unset($inputData['vnp_SecureHashType']);
  186.         unset($inputData['vnp_SecureHash']);
  187.         ksort($inputData);
  188.         $i = 0;
  189.         $hashData = "";
  190.         foreach ($inputData as $key => $value) {
  191.             if ($i == 1) {
  192.                 $hashData = $hashData . '&' . $key . "=" . $value;
  193.             } else {
  194.                 $hashData = $hashData . $key . "=" . $value;
  195.                 $i = 1;
  196.             }
  197.         }
  198.         //$vnpayEmail = $inputData['vnp_Email'];
  199.         $vnpTranId = $inputData['vnp_TransactionNo']; //Mã giao dịch tại VNPAY
  200.         $vnp_BankCode = $inputData['vnp_BankCode']; //Ngân hàng thanh toán
  201.         //$secureHash = md5($vnp_HashSecret . $hashData);
  202.         $secureHash = hash('sha256',$vnp_HashSecret . $hashData);
  203.         $Status = 0;
  204.         $orderId = $inputData['vnp_TxnRef'];
  205.  
  206.         try {
  207.             //Check Orderid    
  208.             //Kiểm tra checksum của dữ liệu
  209.             if ($secureHash == $vnp_SecureHash) {
  210.                 //Lấy thông tin đơn hàng lưu trong Database và kiểm tra trạng thái của đơn hàng, mã đơn hàng là: $orderId            
  211.                 //Việc kiểm tra trạng thái của đơn hàng giúp hệ thống không xử lý trùng lặp, xử lý nhiều lần một giao dịch
  212.                 //Giả sử: $order = mysqli_fetch_assoc($result);  
  213.                 $order = NULL;
  214.                 if ($order != NULL) {
  215.                     if ($order["Status"] != NULL && $order["Status"] == 0) {
  216.                         if ($inputData['vnp_ResponseCode'] == '00') {
  217.                             $Status = 1;
  218.                         } else {
  219.                             $Status = 2;
  220.                         }
  221.                         //Cài đặt Code cập nhật kết quả thanh toán, tình trạng đơn hàng vào DB
  222.                         //
  223.                         //
  224.                         //
  225.                         //Trả kết quả về cho VNPAY: Website TMĐT ghi nhận yêu cầu thành công                
  226.                         $returnData['RspCode'] = '00';
  227.                         $returnData['Message'] = 'Confirm Success';
  228.                     } else {
  229.                         $returnData['RspCode'] = '02';
  230.                         $returnData['Message'] = 'Order already confirmed';
  231.                     }
  232.                 } else {
  233.                     $returnData['RspCode'] = '01';
  234.                     $returnData['Message'] = 'Order not found';
  235.                 }
  236.             } else {
  237.                 $returnData['RspCode'] = '97';
  238.                 $returnData['Message'] = 'Chu ky khong hop le';
  239.             }
  240.         } catch (Exception $e) {
  241.             $returnData['RspCode'] = '99';
  242.             $returnData['Message'] = 'Unknow error';
  243.         }
  244.         //Trả lại VNPAY theo định dạng JSON
  245.         echo json_encode($returnData);
  246.     }
  247.  
  248.     public function vnpay_return(Request $req){
  249.         if ($req->vnp_ResponseCode == '00') {
  250.             $orderId = $req->vnp_TxnRef;
  251.             Vnpay::insert([
  252.                 'order_id' => $orderId,
  253.                 'bank_code' => $req->vnp_BankCode,
  254.                 'content' => $req->vnp_OrderInfo,
  255.                 'vnp_code' => $req->vnp_TransactionNo,
  256.                 'created_at' => $req->vnp_PayDate,
  257.                 'updated_at' => $req->vnp_PayDate
  258.                 ]);
  259.             $order = Order::find($orderId);
  260.             if ($order) {
  261.                 $order->status = 0;
  262.                 $order->payment = 'Đã thanh toán';
  263.                 $order->save();
  264.                 $email = $order->email;
  265.                 $data['info'] = $order;
  266.                 $data['total'] = Cart::total();
  267.                 $data['cart'] = Cart::content();
  268.                 Mail::send('frontend.email', $data, function($message) use ($email){
  269.                     $message ->from('[email protected]','Larovo');
  270.                     $message ->to($email,$email);
  271.                     $message ->cc('[email protected]','Hoàng Hải');
  272.                     $message ->subject('Xác nhận hóa đơn mua hàng');
  273.                 });
  274.                 // send notifications
  275.                 $users = User::where('level', 1)->get();
  276.                
  277.                 $when = Carbon::now()->addSeconds(10);
  278.  
  279.                 $order = Order::find($orderId);
  280.                
  281.                 // send notification
  282.                 Notification::send($users, (new checkoutNoti($order))->delay($when));
  283.  
  284.                 Cart::destroy();
  285.                 session()->forget('coupon');
  286.                 return view('frontend.complete');
  287.             }
  288.         }else{
  289.             $orderId = $req->vnp_TxnRef;
  290.             $order = Order::find($orderId);
  291.             $order->delete($orderId);
  292.             Cart::destroy();
  293.             session()->forget('coupon');
  294.             return redirect()->route('frontend.get.home');
  295.         }
  296.        
  297.     }
  298. }
  299.  
  300. // Ngân hàng: NCB
  301. // Số thẻ: 9704198526191432198
  302. // Tên chủ thẻ:NGUYEN VAN A
  303. // Ngày phát hành:07/15
  304. // Mật khẩu OTP:123456

Share with your friends:

Print