Параметр количества обязателен — 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()}}

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

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

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) Это не очень хорошая практика. Если вы поместите этот продукт в переменную Object, вы можете использовать этот объект, не повторяя 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) }}

....

.. скоро

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]