无法使用Symfony向PayPal发送付款

时间:2015-01-27 11:25:00

标签: php symfony paypal payum

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

查看答案指向的文档我提出了以下代码,但是当我尝试访问调用以下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发送付款详细信息?

2 个答案:

答案 0 :(得分:0)

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

{# 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执行更多高级内容,但这可能会指向正确的方向。

答案 1 :(得分:0)

一点理论:

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

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

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

现在回答:

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