Я начал использовать 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? Был бы признателен за предложение.
Спасибо, Марк