草庐IT

php - Laravel 5 - Paypal 支付 - 将数据表单传递给 Controller

coder 2023-10-24 原文

我在 paypal 付款后存储表单输入时遇到问题。 我已经将数据从表单 (name, phone_ship, address_ship ecc...) 传递到我的函数 orderSave () 所以我可以将数据与其他信息一起存储。但它不起作用。 我的变量 $request->get('inputs of form') 不存在函数 saveOrder

Argument 1 passed to dixard\Http\Controllers\PaypalController::saveOrder() must be an instance of Illuminate\Http\Request, none given, called in C:\xampp\htdocs\2016\app\Http\Controllers\PaypalController.php on line 191 and defined

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>

路线.PHP

//支付宝路由

Route::post('payment', array(
    'as' => 'payment',
    'uses' => 'PaypalController@postPayment',

));


Route::get('payment', array(
    'as' => 'payment',
    'uses' => 'PaypalController@getPayment',
));

//Route::get('auth/register', 'Auth\AuthController@getRegister');
//Route::post('auth/register', 'Auth\AuthController@postRegister');



//paypal redirect alla nostra route

Route::get('payment/status', array(
    'as' => 'payment.status',
    'uses' => 'PaypalController@getPaymentStatus',
));

// Pagine ordine completato

Route::get('orderComplete','CartController@orderComplete');

最佳答案

您没有传递Request 对象。将此添加到 getPaymentStatus():

public function getPaymentStatus(Request $request)
{

然后像这样使用saveOrder():

$this->saveOrder($request);

关于php - Laravel 5 - Paypal 支付 - 将数据表单传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37115970/

有关php - Laravel 5 - Paypal 支付 - 将数据表单传递给 Controller的更多相关文章

  1. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  2. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  3. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  4. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  5. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  6. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  7. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  8. ruby-on-rails - Controller 中的 Rails 辅助模块 - 2

    我有一个Controller,我想为这个Controller创建一个助手,我可以在不包含它的情况下使用它。我尝试像这样创建一个与Controller同名的助手classCars::EnginesController我创建的助手是moduleCars::EnginesHelperdefcheck_fuellogger.debug("chekingfuel")endend我得到的错误是undefinedlocalvariableormethod`check_fuel'for#有没有我遗漏的约定? 最佳答案 如果你真的想在Controll

  9. ruby-on-rails - 在 Controller 中干净地处理多个过滤器(参数) - 2

    我有一个名为Post的类,我需要能够适应以下场景:如果用户选择了一个类别,则只显示该类别的帖子如果用户选择了一种类型,则只显示该类型的帖子如果用户选择了一个类别和类型,则只显示该类别中该类型的帖子如果用户没有选择任何内容,则显示所有帖子我想知道我的Controller是否不可避免地会因大量条件语句而显得粗糙...这是我解决此问题的错误方法-有谁知道我如何才能做到这一点?classPostsController 最佳答案 您最好遵循“胖模型,瘦Controller”的惯例,这意味着您应该将这种逻辑放在模型本身中。Post类应该能够报告

  10. ruby-on-rails - 优雅的 Rails : multiple routes, 相同的 Controller Action - 2

    让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来

随机推荐