2016-05-09 4 views
1

私はリクエストフォームからストレージデータに問題がありますpaypal支払い後。この私の誤りであるLaravel 5.1 - エラー格納フォームデータ、

SQLSTATE [23000]:整合性制約違反:1048カラム 'fullname_ship' はNULLにすることはできません(SQL:orderssubtotalshippingfullname_shipupdated_atcreated_at)の値(10、挿入 1、2016年5月9日午後03時39分40秒、2016年5月9日午後03時39分40秒))

MODELのORDER.PHP

CHECKOUT PAGE- ORDER-DETAIL.PHP

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

{{csrf_field()}} 

    <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="fullname_ship">Nome e cognome<sup>*</sup></label> 
           <input type="text" class="form-control dark" id="fullname_ship" placeholder="Nome" name="fullname_ship" > 
          </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> 

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; 

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

    // postPayment 

    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'; 



     // 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); 



     $transaction = new Transaction(); 
     $transaction->setAmount($amount) 
      ->setItemList($item_list) 
      ->setDescription('Pedido de prueba en mi Laravel App Store'); 


     // Redirect se si completa il pagamento O si cancella 
     $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)); 



     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! Algo salió mal'); 
      } 
     } 



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

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




    } 







    public function getPaymentStatus(Request $request) 
    { 
     // 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', 'Hubo un problema al intentar pagar con Paypal'); 
     } 

     $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(); 
      $this->saveOrder($request); 


      \Session::forget('cart'); 

      return \Redirect('orderComplete') 
       ->with('message', 'Compra realizada de forma correcta'); 
     } 
     return \Redirect('orderComplete') 
      ->with('message-error', 'La compra fue cancelada'); 
    } 

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




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

     } 

     //$cellulare =$request->get('fullname_ship'); 

     $order = Order::create([ 
      'subtotal' => $subtotal, 
      'shipping' => $shipping, 
      'fullname_ship' => $request->get('fullname_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 
     ]); 
    } 
} 

routes.phpの

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

)); 


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



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

答えて

0

あなたの他の機能に$requestからすべてのデータを渡すことができ、私は、セッションカートにすべての値の入力を追加し、私のデータベースのストレージ。注文を保存した後、私はセッションカートを削除しました。みんなありがとう!

0

あなたがここに空fullname_shipを取得しているようだ:

fullname_ship' => $request->get('fullname_ship'), 

したがって、入力を検証し、このフィールドを入力するようユーザーに指示する必要があります(required)。または、デフォルト値を設定することもできます(空の場合は、dafault値が使用されます)。または、このフィールドをDB内にnullableとマークすると、それは空ですが、エラーは発生しません。の

<input required="required" type="text" class="form-control dark" id="fullname_ship" placeholder="Nome" name="fullname_ship" > 
+0

@Aleeyについては入力フォームがうまくいっていますが、私はfullname_shipを返そうとしましたが、うまくいきました。問題は$ requestデータ情報がsaveOrder()に渡されなかったと思います。私は入力( 'fullname_ship')または( 'fullname_ship')を使用しようとしましたが、それは動作しません。 –

0

$request->get('fullname_ship') Laravelで動作しません5 Laravel 5.0から5.2の現在の値に至る

、正しい方法:

最も簡単な方法は、フォーム要素にrequiredを追加することですフォーム入力を取得することは、次のとおりです。

$request->input('fullname_ship') or Input::get('fullname_ship') 

あなたuse Input;場合は、2番目の方法は、唯一のコントローラの上部に動作します。

他に必要な場合は、thisを参照してください。

+0

私のバージョンlaravelは5.1です。私は入力を返すように努めています。リクエスト変数は問題ではありません –

0

同じRequestオブジェクトは、コントローラのすべての機能に渡されません。

postPayment()ファンクション自体の中のfullname_shipの値を読み取る必要があります。私はセッションからすべての入力を取得する方法のsaveOrderのよう

エルス

、あなたは私が問題を解決する

public function postPayment(Request $request) 
{ 
    ... 
    $input = $request->all(); 
    ... 
    $this->getPaymentStatus($input); 
    ... 
} 

public function getPaymentStatus ($input) 
{ 
    ... 
    $fullname_ship = $input['fullname_ship']; 
    ... 
}