0

我开始使用开箱即用的 PayumBundle。不,我用我的用户对象扩展了我的 PaypalExpressPaymentDetails 实体:

/**
 * @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 付款后被重定向后在 Controller 中所做的事情(也参考沙盒代码):

    $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();
    }

不知道我是否应该喜欢它。贝宝响应的事件监听器怎么样?将感谢您的建议。

谢谢,马克

4

1 回答 1

2

据我所知,你做对了。

一般来说,您需要完成三个步骤(可以在 payum 的入门指南中找到更多信息)。

  1. 准备 - 您在其中创建付款详细信息并在其中设置值。
  2. capture - payum 负责这一步。
  3. 完成 - 您在哪里获得付款并检查其状态。在这里,您可以自由地做任何您想做的事情。假设您销售电子书。因此,在这里,成功后,您生成 pdf 并将其发送到买家电子邮件。在失败\取消等你向用户展示它。

据我所知,你做对了。关于事件:如果这是您与付款相关的所有代码,请保持简单。如果事情变得更加复杂,您可以引入一个事件并将其移动到侦听器:

$bidder = $status->getModel()->getBidder();
$bidder->setIsPaid(true);
$em = $this->getDoctrine()->getManager();
$em->persist($bidder);
$em->flush();
于 2013-10-28T08:17:57.807 回答