无法使用 Symfony 向 PayPal 发送付款
Not able to send payment to PayPal using Symfony
我正在使用 Symfony 并尝试使用 SO 中的 PayumBundle, I got PayumBundle configured and I got it to work until getting redirected to paypal but no payment details were being sent so I searched on line and came across this 问题将付款详细信息发送到 PayPal,这正是我看到的空白信息屏幕。
查看答案指向的文档,我想出了以下代码,但是当我尝试访问调用以下 prepare
操作的路由时。我运行进入错误
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;
}
}
谁能帮我看看这是怎么回事?已经 2 天了,我一直在努力让 PayumBundle 工作。
我将非常感谢这方面的任何帮助。如何将付款详细信息发送到 PayPal?
根据要求,这是一个将“立即购买”按钮构建到 Twig 模板的简单示例:
{# 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 做很多更高级的事情,但这可能会为您指明正确的方向。
一些理论:
您搞砸了使用 Payum 的不同方式。第一个是完全自定义的(换句话说,付款特定格式)。在这种情况下,您可以使用任何实现 \ArrayAccess 接口的东西。字段名称及其值看起来与 Paypal 文档中的相同。
另一种方法是在第一个上添加一个薄层,以增加统一性。在这里你必须使用 Order 模型并使用可用的 setter 填充它。您仍然可以使用 setDetails 方法添加一些特定字段。
还有第三种方法:使用您自己的模型(Order\Invoice\Payment 您自己命名)并在 Payum 中提供集成。
现在答案:
这个 \ClickTeck\featuresBundle\Entity\Orders
模型长什么样?您是从 Payum 实现 OrderInterface 还是扩展 ArrayObject?我猜是第一个如果您想使用完全自定义的解决方案,请扩展 ArrayObject 并将其用作数组。如果您需要统一变体(您将来要进行其他付款),请选择 Order
我正在使用 Symfony 并尝试使用 SO 中的 PayumBundle, I got PayumBundle configured and I got it to work until getting redirected to paypal but no payment details were being sent so I searched on line and came across this 问题将付款详细信息发送到 PayPal,这正是我看到的空白信息屏幕。
查看答案指向的文档,我想出了以下代码,但是当我尝试访问调用以下 prepare
操作的路由时。我运行进入错误
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;
}
}
谁能帮我看看这是怎么回事?已经 2 天了,我一直在努力让 PayumBundle 工作。
我将非常感谢这方面的任何帮助。如何将付款详细信息发送到 PayPal?
根据要求,这是一个将“立即购买”按钮构建到 Twig 模板的简单示例:
{# 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 做很多更高级的事情,但这可能会为您指明正确的方向。
一些理论:
您搞砸了使用 Payum 的不同方式。第一个是完全自定义的(换句话说,付款特定格式)。在这种情况下,您可以使用任何实现 \ArrayAccess 接口的东西。字段名称及其值看起来与 Paypal 文档中的相同。
另一种方法是在第一个上添加一个薄层,以增加统一性。在这里你必须使用 Order 模型并使用可用的 setter 填充它。您仍然可以使用 setDetails 方法添加一些特定字段。
还有第三种方法:使用您自己的模型(Order\Invoice\Payment 您自己命名)并在 Payum 中提供集成。
现在答案:
这个 \ClickTeck\featuresBundle\Entity\Orders
模型长什么样?您是从 Payum 实现 OrderInterface 还是扩展 ArrayObject?我猜是第一个如果您想使用完全自定义的解决方案,请扩展 ArrayObject 并将其用作数组。如果您需要统一变体(您将来要进行其他付款),请选择 Order