【问题标题】:Not able to send payment to PayPal using Symfony无法使用 Symfony 向 PayPal 发送付款
【发布时间】:2015-01-27 11:24:59
【问题描述】:

我正在使用 Symfony 并尝试使用 PayumBundle 将付款详细信息发送到 PayPal,我配置了 PayumBundle 并让它工作,直到被重定向到 paypal 但没有发送付款详细信息,所以我在线搜索并遇到this SO 中的问题,这是我看到的确切的空白信息屏幕。

查看答案指向的文档,我想出了以下代码,但是当我尝试访问调用以下prepare Action 的路由时。我遇到了一个错误

public function prepareAction(Request $request)
{
    $paymentName = 'paypal';

    $storage = $this->getPayum()->getStorage('ClickTeck\featuresBundle\Entity\Orders');

    /** @var \ClickTeck\featuresBundle\Entity\Orders $paymentDetails */
    $paymentDetails = $storage->create();
    $paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
    $paymentDetails['PAYMENTREQUEST_0_AMT'] = 1500;
    $storage->update($paymentDetails);

    $notifyToken = $this->getTokenFactory()->createNotifyToken($paymentName, $paymentDetails);
    $captureToken = $this->getTokenFactory()->createCaptureToken(
        $paymentName,
        $paymentDetails,
        'payment_done'
    );

    $paymentDetails['PAYMENTREQUEST_0_NOTIFYURL'] = $notifyToken->getTargetUrl();
    $paymentDetails['INVNUM'] = $paymentDetails->getId();
    $storage->update($paymentDetails);
    return $this->redirect($captureToken->getTargetUrl());

}

Error: Cannot use object of type ClickTeck\featuresBundle\Entity\Orders as array

然后我尝试使用以下内容,但这会导致 paypal 端出现另一个错误

$paymentDetails->PAYMENTREQUEST_0_CURRENCYCODE = 'USD';
$paymentDetails->PAYMENTREQUEST_0_AMT = 1500;

This transaction cannot be processed. The amount to be charged is zero

这就是我的Order 实体的样子

<?php

namespace ClickTeck\featuresBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Order as BaseOrder;


/**
 * Orders
 */
class Orders extends BaseOrder
{
    /**
     * @var integer
     */
    protected $id;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}

有人可以帮我看看这是怎么回事吗?我试图让 PayumBundle 工作已经 2 天了。

我将非常感谢这方面的任何帮助。如何向 PayPal 发送付款详情?

【问题讨论】:

  • 如果您在捆绑包上没有获得帮助,我可以发布一些 sn-ps,展示如何在没有捆绑包的情况下发布付款。可能会帮助您了解发生了什么。请告诉我。
  • 那你太好了。请分享

标签: php symfony paypal payum


【解决方案1】:

一点理论:

您搞砸了使用 Payum 的不同方式。第一个是完全自定义的(换句话说,付款特定格式)。在这种情况下,您可以使用任何实现 \ArrayAccess 接口的东西。字段名称及其值与 Paypal 文档中的相同。

另一种方式是在第一个之上添加一层薄层,以增加统一性。在这里,您必须使用 Order 模型并使用可用的 setter 填充它。您仍然可以使用 setDetails 方法添加一些特定字段。

还有第三种方法:使用您自己的模型(Order\Invoice\Payment 您命名它)并在 Payum 中提供集成。

现在是答案:

这个\ClickTeck\featuresBundle\Entity\Orders 模型是什么样子的?您是否从 Payum 实现 OrderInterface 或扩展 ArrayObject?我猜是第一个。如果您想使用完全自定义的解决方案,请扩展 ArrayObject 并将其用作数组。如果您需要统一变体(您将来要进行其他付款),请使用 Order

【讨论】:

  • 非常感谢您提供反馈。老实说,我以前从未使用过Payum,这是我第一次,所以你所说的对我来说没有任何意义,因为我对payum的了解有限,我感谢你抽出时间和解释它给我。这是我在prepareActionpayum.org/doc/0.13/PayumBundle/get_it_started 之前所做的,但那是向贝宝发送空白信息,所以我更改了您在我的问题中看到的代码
  • 我更新了我的问题并添加了Order Entity,这样你就可以看到它的样子。我不想使用自定义格式。只是将信息发送到贝宝的简单格式,仅此而已并将其保存在数据库中。你在某处有这方面的工作示例吗?
  • 感谢反馈,终于搞定了。我将感谢您的反馈stackoverflow.com/questions/28148887/…
【解决方案2】:

根据要求,下面是一个将“立即购买”按钮构建到树枝模板的简单示例:

{# buynow.html.twig #}
<script 
data-tax="0" 
data-shipping="0" 
data-amount="{{ total }}"
data-quantity="1" 
data-name="Player Registration {{ playDate ~ ' ' ~ player.nameLastPlayer ~ ', ' ~ player.nameFirstPlayer }} {{ player.initialPlayer }}"
data-button="buynow" 
data-custom="My custom information"
src="{{  asset('bundles/ceradteam/js/paypal-button.min.js') }}?merchant=MYMERCHANTID" 
></script>

控制器传入总量。您需要设置商家 ID。

paypal-button.min.js 是一个由paypal 开发站点生成的java 脚本文件。自从我做我的以来已经有一段时间了,但它应该是直截了当的。这就是简单付款所需的一切。

请注意,您可以使用 paypal 做很多更高级的事情,但这可能会为您指明正确的方向。

【讨论】:

  • 谢谢。我会深入研究的。
猜你喜欢
  • 2015-12-25
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2021-02-22
  • 2012-07-07
  • 2015-01-01
  • 2011-11-04
相关资源
最近更新 更多