2016-06-10 4 views
1

Мне нужна небольшая помощь в осуществлении оплаты в магазине Laravel. Оплата, которую я использую, составляет https://gourl.io/, и я не могу понять, как принять необходимую информацию. Поэтому я установил таблицу базы данных файлов, подключение к базе данных и все. Теперь я пытаюсь перенаправить пользователя на страницу payment.php после отправки бланка заказа. Это мой CartController.php orderSubmit функцияВыполнение платежа Gataway в магазине на базе Laravel

public function orderSubmit() { 
    $cart = Session::get(self::CART_SESSION_KEY, array()); 
    if (count($cart) < 1) { 
     return Redirect::to('/'); 
    } 

    $validatorRules = array(
     'captcha' => 'required|captcha', 
     'shipping_address' => 'required|min:10', 
     'shipping_method' => 'required|in:' . implode(',', [Settings::SETTINGS_SHIPPING_NORMAL, Settings::SETTINGS_SHIPPING_EXPRESS]) 
    ); 

    Input::merge(array_map('trim', Input::all())); 
    $validator = Validator::make(Input::all(), $validatorRules); 

    if ($validator->fails()) { 
     return Redirect::to('/cart/order?_token=' . csrf_token())->withErrors($validator->errors())->withInput(Input::except(['captcha'])); 
    } 

    $shipping = array(
     'quantity' => 1, 
     'image' => '/img/noimage.png', 
     'description' => '', 
     'title' => 'FIX ME', // this should never occur, 
     'price' => 100000 // this should never occur 
    ); 
    switch (Input::get('shipping_method')) { 
     case Settings::SETTINGS_SHIPPING_NORMAL: 
      $shipping['title'] = 'Normal Delivery'; 
      $shipping['price'] = 0; 
      break; 

     case Settings::SETTINGS_SHIPPING_EXPRESS: 
      $shipping['title'] = sprintf('Express Delivery - $%.2f', Settings::getOption('express_shipping_cost')); 
      $shipping['price'] = doubleval(Settings::getOption('express_shipping_cost')); 
      break; 
    } 

    $cart['shipping'] = $shipping; 
    $order = new Order(); 
    $order->user_id = self::$user->user_id; 
    $order->data = json_encode($cart); 
    $order->address = Input::get('shipping_address'); 
    $order->pgp_key = Input::get('gpgkey'); 
    $order->info = Input::get('additional_info'); 
    $order->save(); 

    Session::put(self::CART_SESSION_KEY, array()); 
    return Redirect::to('payment.php')->with('message_success', 'Order created! We will contact you shortly to confirm your order and payment details.'); 
} 

и это payment.php

require_once("../cryptobox.class.php"); 

/**** CONFIGURATION VARIABLES ****/ 

$userID   = "";    // place your registered userID or md5(userID) here (user1, user7, uo43DC, etc). 
            // you don't need to use userID for unregistered website visitors 
            // if userID is empty, system will autogenerate userID and save in cookies 
$userFormat  = "";   // save userID in cookies (or you can use IPADDRESS, SESSION) 
$orderID  = ""; 
$amountUSD  = 20;   
$period   = "NOEXPIRY";  
$def_language = "en";    
$public_key  = "mypublickey"; 
$private_key = "myprivatekey"; 



/** PAYMENT BOX **/ 
$options = array(
     "public_key" => $public_key, // your public key from gourl.io 
     "private_key" => $private_key, // your private key from gourl.io 
     "webdev_key" => "",  // optional, gourl affiliate key 
     "orderID"  => $orderID,  // order id or product name 
     "userID"  => $userID,  // unique identifier for every user 
     "userFormat" => $userFormat, // save userID in COOKIE, IPADDRESS or SESSION 
     "amount"  => 0,    // product price in coins OR in USD below 
     "amountUSD" => $amountUSD, // we use product price in USD 
     "period"  => $period,  // payment valid period 
     "language" => $def_language // text on EN - english, FR - french, etc 
); 

// Initialise Payment Class 
$box = new Cryptobox ($options); 

// coin name 
$coinName = $box->coin_name(); 

// Successful Cryptocoin Payment received 
if ($box->is_paid()) 
{ 
    if (!$box->is_confirmed()) { 
     $message = "Thank you for payment (payment #".$box->payment_id()."). Awaiting transaction/payment confirmation"; 
    }           
    else 
    { // payment confirmed (6+ confirmations) 

     // one time action 
     if (!$box->is_processed()) 
     { 
      // One time action after payment has been made/confirmed 

      $message = "Thank you for order (order #".$orderID.", payment #".$box->payment_id()."). We will send soon"; 

      // Set Payment Status to Processed 
      $box->set_status_processed(); 
     } 
     else $message = "Thank you. Your order is in process"; // General message 
    } 
} 
else $message = "This invoice has not been paid yet"; 

$languages_list = display_language_box($def_language); 

Мой вопрос заключается в том, чтобы принять правильные данные в payment.php? Как взять userID, userFormat, orderID и так далее?

ответ

0

Прежде всего, я предлагаю вам использовать Laravel в качестве рамки, для которой он предназначен. В Laravel вы определяете контроллеры для обработки ваших http-запросов. Создайте новый PaymentController и поместите код из payment.php в этот контроллер. Затем сделайте маршрут к этому методу-контроллеру.

Также поместите свои настройки в конфигурационную папку Laravels.

И require_once("../cryptobox.class.php"); может быть заменен инъекцией зависимостей в вашем конструкторе контроллеров.

Теперь вернемся к вашему вопросу.

$userID где вы размещаете зарегистрированный идентификатор пользователя Laravel. (Если у вас нет зарегистрированных пользователей, оставьте поле пустым). Почему вы должны поместить свой идентификатор пользователя в эту переменную? -Он помогает отслеживать, какие пользователи сделали какие платежи. Вы можете впоследствии сохранить эту информацию в своей базе данных, если хотите отслеживать историю платежей.

$orderID Здесь вы указываете свой внутренний идентификатор заказа. Почему вы должны использовать внутренний идентификатор заказа? -После того, как отслеживать, какие покупки были произведены пользователями. Вы можете сохранить свой идентификатор заказа в своей базе данных вместе с идентификатором пользователя и идентификатором продукта, чтобы получить журнал истории покупок.

$userFormat Это то, как вы хотите хранить информацию о пользователе, сеанс, файл cookie и т. Д. Поскольку, когда покупка выполнена, шлюзу оплаты необходим способ доступа к этой информации, и поэтому он должен храниться в сеансе или в печенье.

+0

Хорошо, я создал новый контроллер и после размещения заказа я перенаправляю пользователя на эту страницу, но получил ошибку 'MethodNotAllowedHttpException' ... У меня есть ошибки в контроллере –

+0

MethodNotAllowedHttpException обычно появляется, когда вы пытаетесь получить доступ к методу с неправильным http-глаголом. Например, если вы пытаетесь вызвать маршрут, определенный как GET с http-POST – henrik

+0

Теперь я получаю «исключение» Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 'в/var/www/site/vendor/laravel/framework/src /Illuminate/Routing/RouteCollection.php: 148'. Мой маршрут: «Route :: post» («/ cart/payment», ['uses' => 'PaymentController @ paymentView', 'before' => 'auth | csrf']); 'и правильно перенаправлять' '/ cart/payment' –

0

Я бы использовал $_SESSION['$value'], если вы используете сеанс для своих пользователей!

 Смежные вопросы

  • Нет связанных вопросов^_^