Параметр суммы обязателен - Omnipay paypal с laravel

Здравствуйте, я пытался интегрировать PayPal с корзиной для своего сайта, используя Omnipay PayPal с Laravel 4. В основном я использовал ЭТО руководство.

Я все еще на начальном этапе, но я попал в загвоздку. Когда я пытаюсь оформить заказ, я получаю сообщение об ошибке «Требуется параметр суммы».

Я немного нуб, поэтому я могу делать что-то глупое, но если я жестко запрограммирую сумму (т. Е. «Цена» => 25,00), тогда она работает как надо. Описание и валюта также извлекаются из базы данных и отправляются на страницу PayPal. Вопросы, которые я нашел здесь, похоже, не заставляют людей динамически извлекать данные на свой контроллер, так что, может быть, я делаю что-то не так?

Вот соответствующая часть моего контроллера:

<?php 
use Omnipay\Omnipay; 

class PaymentController extends Controller { 

     public function postPayment() { 

        $params = array( 
            'cancelUrl' => 'http://localhost/cancel_order', 
            'returnUrl' => 'http://localhost/payment_success', 
            'name'  => Input::get('name'), 
            'description' => Input::get('description'), 
            'price' => Input::get('price'), 
            'currency' => Input::get('currency') ); 

            Session::put('params', $params); 

            Session::save(); 

            $gateway = Omnipay::create('PayPal_Express'); 

            $gateway->setUsername('my username'); 

            $gateway->setPassword('my pass'); 

            $gateway->setSignature('my signature'); 

            $gateway->setTestMode(true); 



            $response = $gateway->purchase($params)->send(); 

Вот моя кнопка оформления корзины:

          {{ Form::open([ 'url' => 'pay_via_paypal', 'method' => 'post'  ]) }}
            {{Form::hidden('product',Product::find($productID)->name)}}
            {{Form::hidden('description',Product::find($productID)->description)}}
            {{Form::hidden('amount',Product::find($productID)->price)}}  
            {{Form::hidden('currency',Product::find($productID)->currency)}}
            {{Form::submit('CHECKOUT')}}
          {{Form::close()}}

Форма может выглядеть немного запутанной, но все значения отображаются в форме до того, как я отправлю ее.

Спасибо за любую помощь.


person thomas jaunism    schedule 01.02.2015    source источник


Ответы (1)


Если вы внимательно изучите учебник, вы увидите, что там есть функция index(), которая отвечает за создание формы. и функция postPayment(), которая обрабатывает отправку формы.

В функции index() (в руководстве)

в hello.blade.php есть параметр с именем price

<input type="hidden" value="{{ $price }}" name="price" />

в твоем случае

{{ Form::hidden('amount',Product::find($productID)->price) }}  

следует заменить на

{{ Form::hidden('price',Product::find($productID)->price) }}  

затем, когда вы отправляете форму, она будет перенаправляться к функции postPayment(), здесь, поэтому Route::post('pay_via_paypal', 'PaymentController@postPayment'); этот маршрут должен быть в вашем файле route

в функции postPayment(),

$params = array( 
        'cancelUrl' => 'http://localhost/cancel_order', 
        'returnUrl' => 'http://localhost/payment_success', 
        'name'  => Input::get('name'), 
        'description' => Input::get('description'), 
        // you dont need this price parameter ('price' => Input::get('price'),) 
        'amount' => Input::get('price'), // add amount parameter which is required in paypal.
        'currency' => Input::get('currency') ); 

просто для заметки

вы постоянно используете Product::find($productID), что не является хорошей практикой. Если вы помещаете этот продукт в переменную объекта, вы можете использовать этот объект, не повторяя Product::find($productID).

для этого вы можете передать object в представление блейда из контроллера,

нравится,

$product = Product::find($productId);
return View::make('hello')->with(Array("product" => $product));

в виде лезвия,

....

{{ Form::hidden('product',$product->name) }}
{{ Form::hidden('description',$product->description) }}

....

.. so on

person Kalhan.Toress    schedule 01.02.2015
comment
Большое спасибо! Я уверен, что это была единственная перестановка, которую я не пробовал! Спасибо и за другую заметку. Я постараюсь это реализовать. - person thomas jaunism; 01.02.2015