Payum - 修改付款细节的最佳位置在哪里?

时间:2013-10-28 03:22:58

标签: symfony payum

我开始使用PayumBundle,开箱即用。 不,我用我的User对象扩展了我的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付款后重定向后在控制器中所做的事情(也引用了沙箱代码):

    $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响应的事件监听器怎么样?会感谢你的建议。

谢谢, 马克

1 个答案:

答案 0 :(得分:2)

据我所见,你说得对。

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

  1. 准备 - 您可以在其中创建付款详细信息并在其中设置值。
  2. capture - payum负责这一步。
  3. 已完成 - 您收到付款并检查其状态。在这里,您可以随心所欲地做任何事情。假设您销售电子书。所以,在成功的过程中,您生成pdf并将其发送给买家电子邮件。在失败\取消等情况下,您向用户显示它。
  4. 据我所见,你说得对。关于活动:如果您拥有与付款相关的所有代码,请保持简单。如果事情变得更加复杂,你可以引入一个事件并将其转移给听众:

    $bidder = $status->getModel()->getBidder();
    $bidder->setIsPaid(true);
    $em = $this->getDoctrine()->getManager();
    $em->persist($bidder);
    $em->flush();