From 066be692163f1730bb59b01b034c22d252d4cf1e Mon Sep 17 00:00:00 2001 From: franknstayn Date: Sat, 30 Oct 2021 19:20:22 +0800 Subject: [PATCH] updated paypal --- .../Controllers/paypal/PaypalController.php | 323 ++++++++++-------- app/Models/paypal/PayPalModel.php | 12 +- 2 files changed, 186 insertions(+), 149 deletions(-) diff --git a/app/Http/Controllers/paypal/PaypalController.php b/app/Http/Controllers/paypal/PaypalController.php index 92dbe5f..fab9382 100755 --- a/app/Http/Controllers/paypal/PaypalController.php +++ b/app/Http/Controllers/paypal/PaypalController.php @@ -30,7 +30,7 @@ class PaypalController extends Controller public function __construct() { - $paypal_env = "live"; + $paypal_env = "sandbox"; $paypal_apiUrl = 'https://api.paypal.com'; // default if ($paypal_env == 'live') { @@ -88,7 +88,7 @@ class PaypalController extends Controller $userId = Auth::user()->id; $array_address_book = $UserModel->selectAddresBook('UserId', $userId); - if(count($array_address_book) <= 0) { + if (count($array_address_book) <= 0) { $message = 'Please complete your shipping address. click here .'; Session::flash('cartkeyError', $message); return Redirect::back(); @@ -392,6 +392,22 @@ class PaypalController extends Controller public function getDone(Request $request) { + + $paypal_model = new PayPalModel; + $m = new TeamStoreModel; + $cartKey = $request->session()->get('cartkey'); + $userId = Auth::user()->id; + $user_email = Auth::user()->email; + + + $checkCartKey = $paypal_model->checkCartKey($cartKey); + + if(count($checkCartKey) > 0) { + $message = 'You already paid for this order. Please check your Order Page. click here .'; + Session::put('cartkeyError', $message); + return Redirect::route('cart'); + } + $id = $request->get('paymentId'); $token = $request->get('token'); $payer_id = $request->get('PayerID'); @@ -405,6 +421,159 @@ class PaypalController extends Controller $executePayment = $payment->execute($paymentExecution, $this->_apiContext); $obj = json_decode($executePayment); // var_dump($obj); + + if ($executePayment->getState() == 'approved') { + + /** it's all right **/ + /** Here Write your database logic like that insert record or value in database if you want **/ + + // \Session::put('success','Payment success'); + // return Redirect::route('paywithpaypal'); + $line2 = null; + + //details + $total = $obj->transactions[0]->amount->total; + $sub_total = $obj->transactions[0]->amount->details->subtotal; + $tax = $obj->transactions[0]->amount->details->tax; + $shipping = $obj->transactions[0]->amount->details->shipping; + + $relatedResources = $obj->transactions[0]->related_resources[0]; + $saleId = $relatedResources->sale->id; // transaction_id + + $currency = $obj->transactions[0]->amount->currency; + $invoice_number = $obj->transactions[0]->invoice_number; + // var_dump( $obj->transactions[0]->item_list->phone); + //shipping address details + $recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name; + $line1 = $obj->transactions[0]->item_list->shipping_address->line1; + if (isset($obj->transactions[0]->item_list->shipping_address->line2)) { + $line2 = $obj->transactions[0]->item_list->shipping_address->line2; + } + $city = $obj->transactions[0]->item_list->shipping_address->city; + $state = $obj->transactions[0]->item_list->shipping_address->state; + $postal_code = $obj->transactions[0]->item_list->shipping_address->postal_code; + $country_code = $obj->transactions[0]->item_list->shipping_address->country_code; + + // payer info + $payment_method = $obj->payer->payment_method; + $email = $obj->payer->payer_info->email; + $first_name = $obj->payer->payer_info->first_name; + $last_name = $obj->payer->payer_info->last_name; + $_payer_id = $obj->payer->payer_info->payer_id; + + /// end paypal codes + + + + $payment_details = array( + + 'UserId' => $userId, + 'CartKey' => $cartKey, + 'PaymentId' => $id, + 'Token' => $token, + 'PayerId' => $payer_id, + 'InvoiceNumber' => $invoice_number, + 'Currency' => $currency, + 'Total' => $total, + 'SubTotal' => $sub_total, + 'Tax' => $tax, + 'Payer_Email' => $email, + 'Payer_Firstname' => $first_name, + 'Payer_Lastname' => $last_name, + 'PaymentMethod' => $payment_method, + 'ShippingCost' => $shipping, + 'TransactionId' => $saleId + ); + + $p_id = $paypal_model->insertToPaypalDetails($payment_details); + + $shipping_address = array( + 'PaymentDetail_Id' => $p_id, + 'recipient_name' => $recipient_name, + 'line1' => $line1, + 'line2' => $line2, + 'city' => $city, + 'state' => $state, + 'postal_code' => $postal_code, + 'country_code' => $country_code, + ); + // iinsert shipping address + $paypal_model->insertShippingAddress($shipping_address); + + // insert order from cart_tmp to orders table + $l = $paypal_model->insertToOrders($cartKey); // insert to orders table + + //email sending + $newUserModel = new UserModel; + $order_item_array = $newUserModel->selectOrderItem($cartKey); + $item_goup_array = $newUserModel->itemGroup($cartKey); + $item_thumbs = $newUserModel->selectDisplayItemThumb(); + $array_payment_details = $newUserModel->selectPaymentDetails('CartKey', $cartKey); + $array_storename = $newUserModel->selectTeamStoreName($cartKey); // email subject + + + foreach ($array_storename as $storname) { + + $sName[] = $storname->StoreName; + $sid[] = $storname->Id; + } + $sName = implode(", ", $sName); + + + $user_loginsArray = $newUserModel->selectUserLoginsWhereIn($sid); + + foreach ($user_loginsArray as $userdata) { + + $other_email[] = $userdata->other_email; + } + + if ($other_email[0] != null) { + $other_email = implode(", ", $other_email); + $email_cc = "orders@merchbay.com" . "," . $other_email; + } else { + $email_cc = "orders@merchbay.com"; + } + + $explode_other_email = explode(",", $email_cc); + + $data = array( + 'order_item_array' => $order_item_array, + 'item_goup_array' => $item_goup_array, + 'img_thumb' => $item_thumbs, + 'array_payment_details' => $array_payment_details, + 'receiver' => $user_email, + 'email_cc' => $explode_other_email, + 'subject' => $sName . ' ORDERS', + ); + + Mail::send('emails.orders', $data, function ($message) use ($data) { + $message->from('support@merchbay.com', 'Merchbay'); + $message->bcc($data['email_cc'], 'Orders From Merchbay'); + $message->to($data['receiver'])->subject($data['subject']); + }); + // end email sending + + + $insertTracking = array( + "StepId" => 1, + "ScannedBy" => 1, + "InvoiceNumber" => $invoice_number, + "created_at" => date('Y-m-d H:i:s') + ); + + $ApiModel = new ApiModel; + $ApiModel->insertTracking($insertTracking); + + $request->session()->forget('cartkey'); // clear session for cartkey + + // redirect to thank you page. + return view('paypal.get_done') + ->with('currency', $currency) + ->with('total', $total); + }else { + Session::put('cartkeyError', 'Something went wrong. Please try again.'); + return Redirect::route('cart'); + } } catch (PayPalConnectionException $e) { //throw $th; // echo $e->getCode(); @@ -427,152 +596,6 @@ class PaypalController extends Controller // var_dump($obj->payer->payer_info->shipping_address); // var_dump($obj->transactions[0]->item_list->shipping_address); - - $line2 = null; - - //details - $total = $obj->transactions[0]->amount->total; - $sub_total = $obj->transactions[0]->amount->details->subtotal; - $tax = $obj->transactions[0]->amount->details->tax; - $shipping = $obj->transactions[0]->amount->details->shipping; - - $relatedResources = $obj->transactions[0]->related_resources[0]; - $saleId = $relatedResources->sale->id; // transaction_id - - $currency = $obj->transactions[0]->amount->currency; - $invoice_number = $obj->transactions[0]->invoice_number; - // var_dump( $obj->transactions[0]->item_list->phone); - //shipping address details - $recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name; - $line1 = $obj->transactions[0]->item_list->shipping_address->line1; - if (isset($obj->transactions[0]->item_list->shipping_address->line2)) { - $line2 = $obj->transactions[0]->item_list->shipping_address->line2; - } - $city = $obj->transactions[0]->item_list->shipping_address->city; - $state = $obj->transactions[0]->item_list->shipping_address->state; - $postal_code = $obj->transactions[0]->item_list->shipping_address->postal_code; - $country_code = $obj->transactions[0]->item_list->shipping_address->country_code; - - // payer info - $payment_method = $obj->payer->payment_method; - $email = $obj->payer->payer_info->email; - $first_name = $obj->payer->payer_info->first_name; - $last_name = $obj->payer->payer_info->last_name; - $_payer_id = $obj->payer->payer_info->payer_id; - - /// end paypal codes - - $paypal_model = new PayPalModel; - $m = new TeamStoreModel; - $cartKey = $request->session()->get('cartkey'); - $userId = Auth::user()->id; - $user_email = Auth::user()->email; - - $payment_details = array( - - 'UserId' => $userId, - 'CartKey' => $cartKey, - 'PaymentId' => $id, - 'Token' => $token, - 'PayerId' => $payer_id, - 'InvoiceNumber' => $invoice_number, - 'Currency' => $currency, - 'Total' => $total, - 'SubTotal' => $sub_total, - 'Tax' => $tax, - 'Payer_Email' => $email, - 'Payer_Firstname' => $first_name, - 'Payer_Lastname' => $last_name, - 'PaymentMethod' => $payment_method, - 'ShippingCost' => $shipping, - 'TransactionId' => $saleId - ); - - $p_id = $paypal_model->insertToPaypalDetails($payment_details); - - $shipping_address = array( - 'PaymentDetail_Id' => $p_id, - 'recipient_name' => $recipient_name, - 'line1' => $line1, - 'line2' => $line2, - 'city' => $city, - 'state' => $state, - 'postal_code' => $postal_code, - 'country_code' => $country_code, - ); - // iinsert shipping address - $paypal_model->insertShippingAddress($shipping_address); - - // insert order from cart_tmp to orders table - $l = $paypal_model->insertToOrders($cartKey); // insert to orders table - - //email sending - $newUserModel = new UserModel; - $order_item_array = $newUserModel->selectOrderItem($cartKey); - $item_goup_array = $newUserModel->itemGroup($cartKey); - $item_thumbs = $newUserModel->selectDisplayItemThumb(); - $array_payment_details = $newUserModel->selectPaymentDetails('CartKey', $cartKey); - $array_storename = $newUserModel->selectTeamStoreName($cartKey); // email subject - - - foreach ($array_storename as $storname) { - - $sName[] = $storname->StoreName; - $sid[] = $storname->Id; - } - $sName = implode(", ", $sName); - - - $user_loginsArray = $newUserModel->selectUserLoginsWhereIn($sid); - - foreach ($user_loginsArray as $userdata) { - - $other_email[] = $userdata->other_email; - } - - if ($other_email[0] != null) { - $other_email = implode(", ", $other_email); - $email_cc = "orders@merchbay.com" . "," . $other_email; - } else { - $email_cc = "orders@merchbay.com"; - } - - $explode_other_email = explode(",", $email_cc); - - $data = array( - 'order_item_array' => $order_item_array, - 'item_goup_array' => $item_goup_array, - 'img_thumb' => $item_thumbs, - 'array_payment_details' => $array_payment_details, - 'receiver' => $user_email, - 'email_cc' => $explode_other_email, - 'subject' => $sName . ' ORDERS', - ); - - Mail::send('emails.orders', $data, function ($message) use ($data) { - $message->from('support@merchbay.com', 'Merchbay'); - $message->bcc($data['email_cc'], 'Orders From Merchbay'); - $message->to($data['receiver'])->subject($data['subject']); - }); - // end email sending - - - $insertTracking = array( - "StepId" => 1, - "ScannedBy" => 1, - "InvoiceNumber" => $invoice_number, - "created_at" => date('Y-m-d H:i:s') - ); - - $ApiModel = new ApiModel; - $ApiModel->insertTracking($insertTracking); - - $request->session()->forget('cartkey'); // clear session for cartkey - - // redirect to thank you page. - return view('paypal.get_done') - ->with('currency', $currency) - ->with('total', $total); } @@ -584,6 +607,10 @@ class PaypalController extends Controller $items = $m->myCart($cartKey); $getSubtotal = $m->getSubtotal($cartKey); + if($items == null) { + return redirect()->route('cart'); + } + foreach ($items as $item) { if ($item->VoucherId != null) { $voucherIds[] = $item->VoucherId; diff --git a/app/Models/paypal/PayPalModel.php b/app/Models/paypal/PayPalModel.php index 7dd97c2..9a04e55 100755 --- a/app/Models/paypal/PayPalModel.php +++ b/app/Models/paypal/PayPalModel.php @@ -37,5 +37,15 @@ class PayPalModel extends Model { ->get(); // var_dump($i); return $i; - } + } + + function checkCartKey($ck){ + + $i = DB::table('payment_details') + ->where('CartKey', $ck) + // ->take(1) + ->get(); + // var_dump($i); + return $i; + } }