Я новичок в Ларавеле. Несколько дней я пытался внедрить Paypal Express Checkout на своем веб-сайте, чтобы сделать пожертвования некоммерческой организации. Благодаря этим объяснениям я установить Omnipay, позволить пользователю ввести сумму (суммы), которую он хочет пожертвовать, и перейти в Paypal. Но когда я пытаюсь завершить транзакцию (оплатить), я не перенаправляюсь на сообщение об успешном завершении. В моем аккаунте в песочнице также не отображаются транзакции, поэтому кажется, что платеж не был завершен правильно. Я предполагаю, что что-то не так с моей функцией "getSuccessPayment", но я не могу понять, что это такое...
Вот мой контроллер:
<?php namespace App\Http\Controllers;
use Omnipay\Omnipay;
use Session;
use App\Http\Requests\PaymentRequest;
class PaymentController extends Controller {
public function postPayment(PaymentRequest $request)
{
$price = $request->get('price');
$items[] = array('name' => 'Don', 'quantity' => 1, 'price' => $price);
$params = array(
'cancelUrl'=>url('/donner'),
'returnUrl'=>url('/payment_success'),
'amount' => $price,
'currency' => 'EUR'
);
Session::put('params', $params);
Session::save();
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('my sandbox email');
$gateway->setPassword('my sandbox password');
$gateway->setSignature('my sandbox signature');
$gateway->setTestMode(true);
$response = $gateway->purchase($params)->setItems($items)->send();
if ($response->isSuccessful()) {
print_r($response);
} elseif ($response->isRedirect()) {
$response->redirect();
} else {
echo $response->getMessage();
}
}
public function getSuccessPayment()
{
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('my sandbox email');
$gateway->setPassword('my sandbox password');
$gateway->setSignature('my sandbox signature');
$gateway->setTestMode(true);
$params = Session::get('params');
$response = $gateway->completePurchase($params)->send();
$paypalResponse = $response->getData();
if(isset($paypalResponse['PAYMENTINFO_0_ACK']) && $paypalResponse['PAYMENTINFO_0_ACK'] === 'Success') {
return redirect('/payment_success');
} else {
//payment fails
return redirect('/payment_failure');
}
}
}
?>
И мои маршруты:
Route::post('donner',
['as' => 'payment', 'uses' => 'PaymentController@postPayment']);
Route::get('payment_success', 'PaymentController@getSuccessPayment');
Route::get('payment_failure', 'PaymentController@getSuccessPayment');
composer require symfony/event-dispatcher:^2.8
. после этого запустите в терминале:composer require omnipay/paypal:"2.6.3"
. Конечно, моя версия PayPal является текущей (вы также можете указать composer require omnipay/paypal:*). Надеюсь, это поможет кому-то. :) - person Matija   schedule 14.03.2017composer require ignited/laravel-omnipay:"2.3.0"
и это должно сработать. После этого вам нужно указать поставщика услуг: ` 'Ignited\LaravelOmnipay\LaravelOmnipayServiceProvider',` и псевдоним: ` 'Omnipay' =› 'Ignited\LaravelOmnipay\Facades\OmnipayFacade',` в config/app.php - person Matija   schedule 14.03.2017