2016-05-09 9 views
1

私は支払いのペイパルの後にフォームの入力を保存するのに問題があります。 私はフォーム(name、phone_ship、address_ship ecc ...)から私の関数orderSave()にデータを渡しました。私は他の情報と一緒にデータを保存することができます。しかし、それは動作しません。 dixard \のHttp \コントローラ\ PaypalController :: saveOrder()に渡されたLaravel 5 - Paypal Payment - コントローラにデータフォームを渡す

引数1が点灯の インスタンスでなければなりませんsaveOrder マイvariabile $要求 - >ます( 'フォームの入力が')機能のために存在するのdoesnt \のHttp \要求、いずれ Cで呼び出される、与えられない:行 191上のコントローラ\ PaypalController.php \ \ XAMPP \ htdocsに\ 2016 \アプリ\ HTTPおよびPAYPALCONTROLLER.php

を定義

<?php 

namespace dixard\Http\Controllers; 

use Illuminate\Http\Request; 

use dixard\Http\Requests; 
use dixard\Http\Controllers\Controller; 




use Illuminate\Foundation\Bus\DispatchesCommands; 
use Illuminate\Routing\Controller as BaseController; 
use Illuminate\Foundation\Validation\ValidatesRequests; 





use PayPal\Rest\ApiContext; 
use PayPal\Auth\OAuthTokenCredential; 
use PayPal\Api\Amount; 
use PayPal\Api\Details; 
use PayPal\Api\Item; 
use PayPal\Api\ItemList; 
use PayPal\Api\Payer; 
use PayPal\Api\Payment; 
use PayPal\Api\RedirectUrls; 
use PayPal\Api\ExecutePayment; 
use PayPal\Api\PaymentExecution; 
use PayPal\Api\Transaction; 

use dixard\Order; 
use dixard\OrderItem; 

class PaypalController extends BaseController 
{ 
    private $_api_context; //conterrà tutte config 

    public function __construct() 
    { 
     // setup PayPal api context 
     $paypal_conf = \Config::get('paypal'); 
     $this->_api_context = new ApiContext(new OAuthTokenCredential($paypal_conf['client_id'], $paypal_conf['secret'])); 
     $this->_api_context->setConfig($paypal_conf['settings']); 
    } 

    // 

    public function postPayment(Request $request) 
    { 
     $payer = new Payer(); 
     $payer->setPaymentMethod('paypal'); 

     $items = array(); 
     $subtotal = 0; 
     $cart = \Session::get('cart'); //ottenere tutta l'informazione dalla session cart 
     $currency = 'EUR'; 

     $cell = $request->get('phone_ship'); 

     //return $cell; 

     // impostiamo tutte le informazioni 
     foreach($cart as $producto){ 
      $item = new Item(); 
      $item->setName($producto->name) 
      ->setCurrency($currency) 
      ->setDescription($producto->extract) 
      ->setQuantity($producto->quantity) 
      ->setPrice($producto->price); 

      $items[] = $item; 
      $subtotal += $producto->quantity * $producto->price; 
     } 

     //// 
     $item_list = new ItemList(); 
     $item_list->setItems($items); 
     // // 
     $details = new Details(); 
     $details->setSubtotal($subtotal) 
     ->setShipping(1); 

     //// 

     $total = $subtotal + 1; 

     $amount = new Amount(); 
     $amount->setCurrency($currency) 
      ->setTotal($total) 
      ->setDetails($details); 

     // creiamo oggetto transaction e passiamo l'imposrto 

     $transaction = new Transaction(); 
     $transaction->setAmount($amount) 
      ->setItemList($item_list) 
      ->setDescription('order Laravel App Store'); 


     // Redirect // 
     $redirect_urls = new RedirectUrls(); 
     $redirect_urls->setReturnUrl(\URL::route('payment.status')) 
      ->setCancelUrl(\URL::route('payment.status')); 

     // /// 

     $payment = new Payment(); 
     $payment->setIntent('Sale') 
      ->setPayer($payer) 
      ->setRedirectUrls($redirect_urls) 
      ->setTransactions(array($transaction)); 

     //controll api/

     try { 
      $payment->create($this->_api_context); 
     } catch (\PayPal\Exception\PPConnectionException $ex) { 
      if (\Config::get('app.debug')) { 
       echo "Exception: " . $ex->getMessage() . PHP_EOL; 
       $err_data = json_decode($ex->getData(), true); 
       exit; 
      } else { 
       die('Ups! error'); 
      } 
     } 

     // URL approval 

     foreach($payment->getLinks() as $link) { 
      if($link->getRel() == 'approval_url') { 
       $redirect_url = $link->getHref(); 
       break; 
      } 
     } 

     // add payment ID to session, // 
     \Session::put('paypal_payment_id', $payment->getId()); 

     // // 

     if(isset($redirect_url)) { 
      // redirect to paypal 
      return \Redirect::away($redirect_url); 
     } 

     // 
     return \Redirect::route('cart-show') 
      ->with('message', 'Ups! Error.'); 




    } 







    public function getPaymentStatus() 
    { 
     // Get the payment ID before session clear 
     $payment_id = \Session::get('paypal_payment_id'); 

     // clear the session payment ID 
     \Session::forget('paypal_payment_id'); 

     $payerId = \Input::get('PayerID'); 
     $token = \Input::get('token'); 

     if (empty($payerId) || empty($token)) { 
      return \Redirect('products') 
       ->with('message', 'Error with payment'); 
     } 

     $payment = Payment::get($payment_id, $this->_api_context); 

     $execution = new PaymentExecution(); 
     $execution->setPayerId(\Input::get('PayerID')); 

     $result = $payment->execute($execution, $this->_api_context); 


     if ($result->getState() == 'approved') { 

      $this->saveOrder(); // quindi richiamo metodo saveOrder e salviamo tutto 
      // completat order 

      \Session::forget('cart'); 

      return \Redirect('orderComplete') 
       ->with('message', 'Order complete! good!'); 
     } 
     return \Redirect('orderComplete') 
      ->with('message-error', 'Payment cancelled'); 
    } 

    protected function saveOrder(Request $Request) 
    { 
     $subtotal = 0; 
     $cart = \Session::get('cart'); 
     $shipping = 1; 




     foreach($cart as $producto){ 
      $subtotal += $producto->quantity * $producto->price; 

     } 



     $order = Order::create([ 
      'subtotal' => $subtotal, 
      'shipping' => $shipping, 
      'phone_ship' => $request->get('phone_ship') , 

      //'user_id' => \Auth::user()->id 
     ]); 

     foreach($cart as $producto){ 
      $this->saveOrderItem($producto, $order->id); 
     } 
    } 

    protected function saveOrderItem($producto, $order_id) 
    { 
     OrderItem::create([ 
      'price' => $producto->price, 
      'quantity' => $producto->quantity, 
      'product_id' => $producto->id, 
      'order_id' => $order_id 
     ]); 
    } 
} 

ORDER-DETAIL.PHP

<form class="login" method="post" action="{{url('payment')}}"> 

{{csrf_field()}} 
<!--<form action="checkout.html" method="POST" >--> 
    <div class="checkout-wrapper"> 
     <div class="container"> 

      <div class="text-alert"> 
       <p>Returning customer? <a href="#">Click here to login</a></p> 
      </div><!-- /.text-alert --> 

      <div class="row"> 
       <div class="col-md-6"> 
        <h2>Fatturazione</h2> 


        <fieldset id="billinfo"> 
        <div class="row"> 
         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="first_name_shipping">Nome <sup>*</sup></label> 
           <input type="text" class="form-control dark" id="first_name_shipping" placeholder="Nome" > 
          </div><!-- /.form-group --> 
         </div> 

         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="last_name_shipping">Cognome <sup>*</sup></label> 
           <input type="text" class="form-control dark" id="last_name_shipping" placeholder="Cognome"> 
          </div><!-- /.form-group --> 
         </div> 
        </div> 

        <div class="row"> 
         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="address_shipping">Indirizzo <sup>*</sup></label> 
           <input type="text" class="form-control dark" id="address_shipping" placeholder="Via/Piazza/Viale" > 
          </div><!-- /.form-group --> 
         </div> 

         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="address2_shipping">Interno/Scala <sup>*</sup></label> 
           <input type="text" class="form-control dark" id="address2_shipping" placeholder="ScalaA/Interno:11" > 
          </div><!-- /.form-group --> 
         </div> 
        </div> 

        <div class="row"> 
         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="province_shipping">Provincia<sup>*</sup></label> 
           <input type="text" class="form-control dark" id="province_shipping" placeholder="Roma,Milano,ecc" > 
          </div><!-- /.form-group --> 
         </div> 

         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="country_shipping">Paese<sup>*</sup></label> 
           <input type="text" class="form-control dark" id="country_shipping" placeholder="Paese" value="" > 
          </div><!-- /.form-group --> 
         </div> 
        </div> 

        <div class="row"> 
         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="email_shipping">Email<sup>*</sup></label> 
           <input type="text" class="form-control dark" id="email_shipping" placeholder="Email" value="{{Auth::user()->email}}" > 
          </div><!-- /.form-group --> 
         </div> 

         <div class="col-md-6"> 
          <div class="form-group"> 
           <label for="phone_shipping">Cellulare<sup>*</sup></label> 
           <input type="text" class="form-control dark" id="phone_ship" placeholder="Telefono/Cellulare" name="phone_ship" > 
          </div><!-- /.form-group --> 
         </div> 
        </div> 

        </fieldset> 
</form> 

routes.phpの

// PayPalのルートは

Route::post('payment', array(
    'as' => 'payment', 
    'uses' => '[email protected]', 

)); 


Route::get('payment', array(
    'as' => 'payment', 
    'uses' => '[email protected]', 
)); 

//Route::get('auth/register', 'Auth\[email protected]'); 
//Route::post('auth/register', 'Auth\[email protected]'); 



//paypal redirect alla nostra route 

Route::get('payment/status', array(
    'as' => 'payment.status', 
    'uses' => '[email protected]', 
)); 

// Pagine ordine completato 

Route::get('orderComplete','[email protected]'); 

答えて

0

あなたはRequestオブジェクトを渡すことはありません。

public function getPaymentStatus(Request $request) 
{ 

そして、このようなsaveOrder()使用:getPaymentStatus()にこれを追加はい、私はそうして、しかし、今私は、このエラーが発生している

$this->saveOrder($request); 
+0

を、SQLSTATE [23000]:整合性制約違反:1048列「fullname_ship 'は、nullにはできません(SQL: 'orders''''''''''''''''''''''''''''''''''''''''''''''''''''

+0

@ Diego182、このエラーは元の質問とは関係ありません。新しい質問をして関連するデータを投稿する必要があります(モデル、関係、適切なコードなど)。 –

+1

はい私はこれに新しい質問を追加しました:http://stackoverflow.com/questions/37117747/laravel-5-error-storage-form-dataありがとうございました! –

関連する問題