2016-06-10 10 views
1

Ich brauche ein wenig Hilfe bei der Umsetzung von Zahlungsausflug in Laravel Shop. Zahlung, die ich verwende, ist https://gourl.io/ und ich kann nicht verstehen, wie man benötigte Informationen nimmt. Also habe ich die Datei-Datenbank-Tabelle, Datenbank-Verbindung und alle eingestellt .. Jetzt versuche ich Benutzer auf payment.php Seite umleiten, nachdem Bestellformular eingereicht wird. Das ist meine CartController.php orderSubmit FunktionImplementierung von Gataway in Laravel basiert Shop

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.'); 
} 

und das ist 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); 

Meine Frage ist, wie die richtigen Informationen in der payment.php nehmen? Wie man userID, userFormat, orderID und so weiter nimmt?

Antwort

0

Zunächst würde ich vorschlagen, dass Sie Laravel als den Rahmen verwenden, für den es bestimmt ist. In Laravel definieren Sie Controller, die Ihre HTTP-Anfragen behandeln. Machen Sie einen neuen PaymentController und fügen Sie den Code aus der payment.php in diesen Controller ein. Dann machen Sie eine Route zu dieser Controller-Methode.

Legen Sie auch Ihre Konfigurationseinstellungen in Laravels Config-Ordner.

Und die require_once("../cryptobox.class.php"); kann durch eine Abhängigkeitsinjektion in Ihrem Controller-Konstruktor ersetzt werden.

Jetzt zurück zu Ihrer Frage.

$userID ist, wo Sie Ihre registrierte Laravel-Benutzer-ID setzen. (Wenn Sie keine registrierten Benutzer haben, lassen Sie es leer). Warum sollten Sie die ID Ihres Benutzers in diese Variable eingeben? -Es hilft zu verfolgen, welche Benutzer welche Zahlungen geleistet haben. Sie können diese Informationen später in Ihrer Datenbank speichern, wenn Sie den Zahlungsverlauf verfolgen möchten.

$orderID Hier geben Sie Ihre interne Bestell-ID ein. Warum sollten Sie eine interne Bestell-ID verwenden? - Es soll verfolgen, welche Einkäufe welche Produkte von welchen Nutzern getätigt wurden. Sie können Ihre Bestell-ID zusammen mit der Benutzer-ID und der Produkt-ID in Ihrer Datenbank speichern, um ein Kaufverlaufsprotokoll zu erhalten.

$userFormat So speichern Sie Ihre Benutzerinformationen, Sitzung, Cookie usw. Da der Zahlungs-Gateway bei der Ausführung des Auftrags eine Möglichkeit zum Zugriff auf diese Informationen benötigt und daher in der Sitzung oder gespeichert werden muss in einem Cookie.

+0

Ok, ich habe einen neuen Controller erstellt und nachdem der Auftrag platziert wurde, leite ich den Benutzer auf diese Seite um, habe aber den Fehler 'MethodNotAllowedHttpException' ... Ich habe Fehler im Controller –

+0

MethodNotAllowedHttpException erscheint normalerweise, wenn Sie versuchen, auf die Methode zuzugreifen mit dem falschen http-Verb. Wenn Sie beispielsweise versuchen, eine als GET definierte Route mit einem http-POST – henrik

+0

aufzurufen, bekomme ich jetzt die Ausnahme "Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException" unter/var/www/site/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php: 148'. Meine Route ist 'Route :: post ('/ cart/payment', ['benutzt' => 'PaymentController @ paymentView', 'vor' => 'auth | csrf']);' und gehe richtig auf '/ cart/um Zahlung " –

0

Ich würde $_SESSION['$value'] verwenden, wenn Sie Sitzung für Ihre Benutzer verwenden!