Перечислите несколько товаров через Paypal Express, используя Omnipay & Laravel 4
Можно ли перечислить все товары на сайтах "корзины" в PayPal. Я спрашиваю, потому что PayPal говорит "описания" вместо описания, и это было бы лучше, чем иметь общую сумму с бесполезным описанием "вашей корзины"
$request = $gateway->purchase([
'amount' => '150.00',
'currency' => 'GBP',
'description' => 'Your basket',
'returnUrl' => 'http://localhost:8080/checkout/success',
'cancelUrl' => 'http://localhost:8080/checkout/cancel'
])->send();
Документация расплывчатая, или я, возможно, упустил возможность, но я пытался:
$request = $gateway->purchase([
'amount' => array('100','200'),
'currency' => 'GBP',
'description' => array('prod1','prod2'),
'returnUrl' => 'http://localhost:8080/checkout/success',
'cancelUrl' => 'http://localhost:8080/checkout/cancel'
])->send();
& $request = $gateway->purchase([data],[data])->send();
где данные соответствуют приведенной выше схеме.
2 ответа
Решение
Я нашел этот пост на Github, который объясняет, как это достижимо.
setItems
Функция была добавлена так, что массив элементов может быть передан так:
$request = $gateway->purchase([
'amount'=>'70.00',
'returnUrl' => 'http://localhost:8080/checkout/success',
'cancelUrl' => 'http://localhost:8080/checkout/cancel'
])->setItems(array(
array('name' => 'item1', 'quantity' => 2, 'price' => '10.00'),
array('name' => 'item2', 'quantity' => 1, 'price' => '50.00')
))->send();
Что-то отметить
Запрос не будет выполнен, если сумма покупки не равна сумме массива товаров.
$gateway = Omnipay\Omnipay::create('PayPal_Express');
$gateway->setUsername('....');
$gateway->setPassword('....');
$gateway->setSignature('.....');
$items = new Omnipay\Common\ItemBag();
$items->add(array(
'name' => 'prova',
'quantity' => '1',
'price' => 40.00,
));
$items->add(array(
'name' => 'prova 2',
'quantity' => '1',
'price' => 10.00,
));
$response = $gateway->purchase(
array(
'cancelUrl'=>'http://.../pay/',
'returnUrl'=>'http://.../pay/return_to_site',
'amount' => 50.00,
'currency' => 'EUR'
)
)->setItems($items)->send();
$response->redirect();