Payum - Где лучше всего изменить платежные реквизиты?

Я начал использовать PayumBundle, который отлично работает из коробки. Нет, я расширил свой объект PaypalExpressPaymentDetails с помощью своего объекта User:

/**
 * @ORM\OneToOne(targetEntity="Bidder", inversedBy="paymentPaypal")
 * @ORM\JoinColumn(name="bidder_id", referencedColumnName="id")
 */
protected $bidder;

Теперь у меня есть вопрос. Где лучше всего изменить сущность платежа до, а также, что более важно, я думаю, после взаимодействия с Paypal?

Я просматривал код песочницы и думаю, что это должно быть правильное место для установки данных перед транзакцией PayPal:

        $paymentDetails->setReturnurl($captureToken->getTargetUrl());
        $paymentDetails->setCancelurl($captureToken->getTargetUrl());
        $paymentDetails->setInvnum($paymentDetails->getId());
        $paymentDetails->setBidder($bidder); //i think this should be fine at this position
        $storage->updateModel($paymentDetails);

Вот что я сделал в контроллере после того, как меня перенаправили после оплаты из Paypal (также ссылаясь на код песочницы):

    $status = new BinaryMaskStatusRequest($token);
    $payment->execute($status);
    if($status->isSuccess()){
        //mark bidder as paid <- right position?
        $bidder = $status->getModel()->getBidder();
        $bidder->setIsPaid(true);
        $em = $this->getDoctrine()->getManager();
        $em->persist($bidder);
        $em->flush();
    }

Не уверен, что он должен мне нравиться таким, какой он есть. Как насчет прослушивателя событий для ответа PayPal? Был бы признателен за предложение.

Спасибо, Марк


person Marc Juchli    schedule 28.10.2013    source источник


Ответы (1)


Насколько я вижу, вы правильно поняли.

Как правило, вам нужно пройти три шага (дополнительную информацию можно найти в начать).

  1. prepare - где вы создаете детали платежа и устанавливаете в них значения.
  2. Захват - payum позаботится об этом шаге.
  3. done - где вы получаете платеж и проверяете его статус. Здесь вы вольны делать все, что хотите. Допустим, вы продаете электронные книги. Итак, здесь, в случае успеха, вы создаете PDF-файл и отправляете его по электронной почте покупателю. При отказе\отмене и т. д. вы сообщаете об этом пользователю.

Насколько я вижу, вы правильно поняли. О событии: будьте проще, если это весь код, который у вас есть, связанный с платежами. Если все становится более сложным, вы можете ввести событие и переместить его в слушатель:

$bidder = $status->getModel()->getBidder();
$bidder->setIsPaid(true);
$em = $this->getDoctrine()->getManager();
$em->persist($bidder);
$em->flush();
person Maksim Kotlyar    schedule 28.10.2013
comment
Пожалуй, пока оставлю как есть. Спасибо - person Marc Juchli; 28.10.2013