【问题标题】:Payum - How to repeat Paypal payment when user close browser being on paypal side.Payum - 当用户关闭浏览器在贝宝端时如何重复贝宝付款。
【发布时间】:2013-11-17 04:32:28
【问题描述】:

我有一个 ExpressCheckout 正在运行。现在我想让用户有机会在以后付款。例如,他关闭了我保存数据的贝宝流程。

我想这一定很简单,但不知何故它不会再将我重定向到贝宝。到目前为止,我唯一做的就是使用标识符来查找现有模型,而不是创建新模型。这部分有效,因此它将找到 PaypalExpressPaymentDetails 表的特定记录。但正如我所说,它不会重定向到贝宝。代码如下:

$paymentName = 'demo_paypal';
    $storage = $this->get('payum')->getStorageForClass(
        'Demo\UserBundle\Entity\PaypalExpressPaymentDetails',
        $paymentName
    );

    /** @var $paymentDetails PaymentDetails */
    $paymentDetails = $storage->createModel();
    $paymentDetails->setPaymentrequestCurrencycode(0, $currency);
    $paymentDetails->setPaymentrequestAmt(0, $amount);
    $storage->updateModel($paymentDetails);


    $captureToken = $this->getTokenFactory()->createCaptureToken(
        $paymentName,
        $paymentDetails,
        'payments_transaction_success'
    );

    $paymentDetails->setReturnurl($captureToken->getTargetUrl());
    $paymentDetails->setCancelurl($captureToken->getTargetUrl());
    $paymentDetails->setInvnum($paymentDetails->getId());
    $storage->updateModel($paymentDetails);

执行控制器:

...
$identificator = new Identificator($entity->getId(), 'Demo\UserBundle\Entity\PaypalExpressPaymentDetails');
$captureToken = $this->payLateByPaypal($entity->getAmount(), "USD", $entity->getId(), $identificator);
return $this->redirect($captureToken->getTargetUrl());

有什么想法吗?

【问题讨论】:

  • 我可能会回答这个问题,但在我想澄清之前?当您说“例如,他关闭了贝宝流程,我保存了数据。”您的意思是用户关闭浏览器或单击贝宝取消按钮并返回您的网站?您可以在尝试再次付款之前和之后发布您的模型包含的内容吗?顺便说一句:payments_transaction_success - 不是正确的名称,所有失败\待处理\成功的付款都重定向到该网址。你必须在那里检查状态
  • 正是,当他关上窗户什么的。该模型仅包含:id、token、correlationid、paymentaction(销售)、return/cancel url。其余的是一个空的 json。感谢您的提示。我在这个控制器中进行状态检查,但在这里这样做似乎更好。
  • 他是在登录paypal之后还是之前关闭窗口?

标签: symfony payum


【解决方案1】:

我已经在沙盒中重现了它。不幸的是,这是一个已知问题。如果用户第二次登录并访问页面支付considered as canceled。这样做是为了避免您的网站和贝宝之间无休止的重定向。我没有看到一个简单的方法来解决它。

更新

在 1.0 版中,取消问题得到了正确处理。

【讨论】:

  • 啊,我现在明白了这一点:PaymentActionNotInitiated。感谢您的详细调查!我认为这很好处理。要么删除当前(未启动的)付款,然后在用户想要之后付款时创建一个新付款。或者保留数据并在付款时创建一个额外的数据。 (第二个意味着在我的特定情况下我必须处理多对一。我更喜欢删除和创建的方式以及一对一的方式)。
猜你喜欢
  • 2011-07-25
  • 2016-06-17
  • 2011-06-25
  • 2017-07-12
  • 2012-07-20
  • 2016-05-27
  • 2023-04-01
  • 2011-07-18
  • 2014-04-22
相关资源
最近更新 更多