/ / Как да генерираме url за първия тест на пакет Payum Payment със symfony2.8 - php, symfony, Payment, payum

Как да генерираме URL адрес за първия тест на Payum Payment Bundle с symfony2.8 - php, symfony, payment, payum

Опитвам се да интегрирам пакета payum за плащания в symfony 2.8

Крайната ми цел беше да се справя с приложението за абонамент на paypal.

Завърших първата настройка, както е описано тук.

Но не знам как да тествам или къде да започна.

Има public function prepareAction(), Предполагам, че в началото би трябвало да имам достъп тук.

Така че пуснах в моя route.yml

acme_payment:
resource: "@AcmePaymentBundle/Resources/config/routing.yml"
prefix:   /payment

и в моето Acme / PaymentBundle / Resources / config.routing.yml

acme_payment_prepare:
path:     /prepare
defaults: { _controller: AcmePaymentBundle:Payment:prepare }

След това опитайте да получите достъп,

http://localhost/myapp/web/app_dev.php/payment/prepare

Въпреки това показва грешката като тази.

Unable to generate a URL for the named route "done" as such route does not exist.

Сигурен съм, че това е свързано с моя PaymentController.php

Мисля, че тази грешка се появява в PaymentController.php, но как мога да я поправя ??

"done" // the route to redirect after capture

<?php


namespace AcmePaymentBundleController;

use SymfonyBundleFrameworkBundleControllerController;

use PayumCoreRequestGetHumanStatus;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationJsonResponse;

class PaymentController extends Controller
{
public function prepareAction()
{
$gatewayName = "offline";

$storage = $this->get("payum")->getStorage("AcmePaymentBundleEntityPayment");

$payment = $storage->create();
$payment->setNumber(uniqid());
$payment->setCurrencyCode("EUR");
$payment->setTotalAmount(123); // 1.23 EUR
$payment->setDescription("A description");
$payment->setClientId("anId");
$payment->setClientEmail("foo@example.com");

$storage->update($payment);

$captureToken = $this->get("payum")->getTokenFactory()->createCaptureToken(
$gatewayName,
$payment,
"done" // the route to redirect after capture
);

return $this->redirect($captureToken->getTargetUrl());
}
public function doneAction(Request $request)
{
$token = $this->get("payum")->getHttpRequestVerifier()->verify($request);

$gateway = $this->get("payum")->getGateway($token->getGatewayName());

// you can invalidate the token. The url could not be requested any more.
// $this->get("payum")->getHttpRequestVerifier()->invalidate($token);

// Once you have token you can get the model from the storage directly.
//$identity = $token->getDetails();
//$payment = $this->get("payum")->getStorage($identity->getClass())->find($identity);

// or Payum can fetch the model for you while executing a request (Preferred).
$gateway->execute($status = new GetHumanStatus($token));
$payment = $status->getFirstModel();

// you have order and payment status
// so you can do whatever you want for example you can just print status and payment details.

return new JsonResponse(array(
"status" => $status->getValue(),
"payment" => array(
"total_amount" => $payment->getTotalAmount(),
"currency_code" => $payment->getCurrencyCode(),
"details" => $payment->getDetails(),
),
));
}

}



}

Отговори:

1 за отговор № 1

Във вашия Acme/PaymentBundle/Resources/config.routing.yml трябва да определите и вашите done маршрут.

Така конфигурацията на маршрута може да изглежда по следния начин:

acme_payment_prepare:
path:     /prepare
defaults: { _controller: AcmePaymentBundle:Payment:prepare }

acme_payment_done:
path:     /done
defaults: { _controller: AcmePaymentBundle:Payment:done }

След това във вътрешността си prepareAction метод в PaymentController.php променете направения маршрут:

$captureToken = $this->get("payum")->getTokenFactory()->createCaptureToken(
$gatewayName,
$payment,
"acme_payment_done" // NOTE: I replaced `done` with `acme_payment_done`
);

Никога не съм използвал пакета payum, но се надявам, че това помага.