Я пытаюсь интегрировать ominipay с PayPal Express Checkout на своем веб-сайте. У меня есть команда table (заказываю по-английски), где я сохраняю ссылку, дату, user_id, commande => [commande хранит: priceTTC, priceHT, адрес, количество, токен].Интеграция Omnipay с PayPal Express Checkout [symfony2]
Когда пользователь нажимает на кнопку Pay у меня есть эта ошибка:
Controller "FLY\BookingsBundle\Controller\PayController::postPaymentAction" for URI "/payment/2" is not callable.
Это мой validation.html.twig
<form action="{{ path('postPayment', { 'id' : commande.id }) }}"
method="POST"/>
<input name="token" type="hidden" value="{{ commande.commande.token }}" />
<input name="price" type="hidden" value="{{ commande.commande.priceTTC }}" />
<input name="date" type="hidden" value="{{ commande.date|date('dmyhms') }}" />
<button type="submit" class="btn btn-success pull-right">Pay</button>
</form>
routing.yml
postPayment:
pattern: /payment/{id}
defaults: { _controller: FLYBookingsBundle:Pay:postPayment }
getSuccessPayment:
pattern: /success/{id}
defaults: { _controller: FLYBookingsBundle:Pay:getSuccessPayment }
PayController.php
class PayController extends Controller
{
public function postPayment (Commandes $commande)
{
$params = array(
'cancelUrl' => 'here you should place the url to which the users will be redirected if they cancel the payment',
'returnUrl' => 'here you should place the url to which the response of PayPal will be proceeded', // in your case // you have registered in the routes 'payment_success'
'amount' => $commande->get('priceTTC'),
);
session()->put('params', $params); // here you save the params to the session so you can use them later.
session()->save();
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('xxxxxxxxx-facilitator_api1.gmail.com'); // here you should place the email of the business sandbox account
$gateway->setPassword('xxxxxxxxxxxxxx'); // here will be the password for the account
$gateway->setSignature('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); // and the signature for the account
$gateway->setTestMode(true); // set it to true when you develop and when you go to production to false
$response = $gateway->purchase($params)->send(); // here you send details to PayPal
if ($response->isRedirect()) {
// redirect to offsite payment gateway
$response->redirect();
}
else {
// payment failed: display message to customer
echo $response->getMessage();
}
}
.
public function getSuccessPayment (Auth $auth, Transaction $transaction)
{
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('xxxxxxxxxxx-facilitator_api1.gmail.com\''); // here you should place the email of the business sandbox account
$gateway->setPassword('xxxxxxxxxxxxxxxx'); // here will be the password for the account
$gateway->setSignature('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); // and the signature for the account
$gateway->setTestMode(true);
$params = session()->get('params');
$response = $gateway->completePurchase($params)->send();
$paypalResponse = $response->getData(); // this is the raw response object
if(isset($paypalResponse['PAYMENTINFO_0_ACK']) && $paypalResponse['PAYMENTINFO_0_ACK'] === 'Success') {
// here you process the response. Save to database ...
}
else {
// Failed transaction ...
}
}
}
Это больше похоже на проблему с symfony, чем на проблему всемогущества. То, что вы делаете в действии вашего контроллера, выглядит правильно с точки зрения всенаправленного просмотра, но сообщение об ошибке, похоже, указывает на то, что маршрутизатор symfony не находит ваш контроллер. Я не эксперт по symfony, но, возможно, ваше действие с контроллером нужно называть postPaymentAction вместо postPayment? – delatbabel
Я удалил маршрут в routing.yml, и я создал маршрут поверх моего контроллера следующим образом: '/ ** * * 0RUS (* ") * /' then in validation.html.twig я изменил путь 'pay'. Кажется, что это работает, но когда я нажимаю на кнопку, платите, она перенаправляет меня на пустую страницу. 'http: //127.0.0.1/symfony/web/app_dev.php/? id = 34'.я думаю, что я должен перенаправить на paypal, чтобы пользователь мог сделать платеж ...? – Sirius
Я также изменил postPayment на postPaymentAction. Теперь у меня есть эта ошибка: «Попытка вызвать функцию« сеанс »из пространства имен« FLY \ BookingsBundle \ Controller »' 'session() -> put ('params', $ params);' Я думаю, я знаю, почему у меня много ошибок , потому что контроллер, который у меня есть, предназначен для работы с laravel, а не с symfony2. – Sirius