首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2中的PayPal

Symfony2中的PayPal
EN

Stack Overflow用户
提问于 2013-03-04 06:57:08
回答 2查看 9.7K关注 0票数 8

我正在尝试在JMSPaymentPaypalBundle中使用JMSPaymentCoreBundle,但我找不到一个明确的示例来说明如何做到这一点。

我已经完成了文档中指定的所有步骤,但我无法使其正常工作。有谁能帮帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-04 07:20:17

创建付款指示的默认方式是通过jms_choose_payment_method表单:

代码语言:javascript
复制
$form = $this->getFormFactory()->create('jms_choose_payment_method', null, array(
        'amount'   => 12.99,
        'currency' => 'EUR',
        'default_method' => 'payment_paypal', // Optional
        'predefined_data' => array(
            'paypal_express_checkout' => array(
                'return_url' => $this->get('router')->generate('payment_complete', array(
                    'number' => $order->getOrderNumber(),
                ), true),
                'cancel_url' => $this->get('router')->generate('payment_cancel', array(
                    'number' => $order->getOrderNumber(),
                ), true)
            ),
        ),
    ));

您也可以人工创建付款指示:

代码语言:javascript
复制
        use JMS\Payment\CoreBundle\Entity\ExtendedData;
        use JMS\Payment\CoreBundle\Entity\Payment;
        use JMS\Payment\CoreBundle\PluginController\Result;
        use JMS\Payment\CoreBundle\Plugin\Exception\ActionRequiredException;
        use JMS\Payment\CoreBundle\Plugin\Exception\Action\VisitUrl;
        use JMS\Payment\CoreBundle\Entity\PaymentInstruction;


        $extendedData = new ExtendedData();
        $extendedData->set('return_url', $this->get('router')->generate('payment_complete', array(
                'number' => $order->getOrderNumber(),
            ), true));

        $extendedData->set('cancel_url', $this->get('router')->generate('payment_cancel', array(
                'number' => $order->getOrderNumber(),
            ), true));

        $instruction = new PaymentInstruction((float)$order->getCharge() > 0 ? $order->getCharge() : $order->getAmount(), 'EUR', 'paypal_express_checkout', $extendedData);
        $this->get('payment.plugin_controller')->createPaymentInstruction($instruction);

        $order->setPaymentInstruction($instruction);
        $em = $this->get('doctrine.orm.entity_manager');
        $em->persist($order);
        $em->flush();

我的payment_complete路由如下所示:

代码语言:javascript
复制
public function completeAction(Booking $order)
{
    $instruction = $order->getPaymentInstruction();
    if (($instruction->getAmount() - $instruction->getDepositedAmount()) > 0) {
        if (null === $pendingTransaction = $instruction->getPendingTransaction()) {
            $payment = $this->get('payment.plugin_controller')->createPayment($instruction->getId(), $instruction->getAmount() - $instruction->getDepositedAmount());
        } else {
            $payment = $pendingTransaction->getPayment();
        }

        $result = $this->get('payment.plugin_controller')->approveAndDeposit($payment->getId(), $payment->getTargetAmount());
        if (Result::STATUS_PENDING === $result->getStatus()) {
            $ex = $result->getPluginException();

            if ($ex instanceof ActionRequiredException) {
                $action = $ex->getAction();

                if ($action instanceof VisitUrl) {
                    return new RedirectResponse($action->getUrl());
                }

                throw $ex;
            }
        } else if (Result::STATUS_SUCCESS !== $result->getStatus()) {
            throw new \RuntimeException('Transaction was not successful: '.$result->getReasonCode());
        }
    }

    $order->setTransactionAmount((float)$order->getAmount());
    $creditPurchased = (float)$order->getCharge() > (float)$order->getAmount() ? (float)$order->getCharge() - (float)$order->getAmount() : 0;
    $em->persist($order);
    $em->flush();

我通过http://jmsyst.com/bundles/JMSPaymentCoreBundle/master/usage让它运行起来

票数 8
EN

Stack Overflow用户

发布于 2013-08-19 17:38:56

Payum bundle支持通过bridge的jms支付。这些链接描述了如何入门。

使用该捆绑包有几个优点:

  • 安全捕获行动。
  • 有信用卡的形式,可以要求用户的信用卡
  • 能力,以方便设置IPN.Notify操作也是安全的。
  • 内置支持所有omnipay网关(25 +),jms插件(+ 10)和payum原生库。
  • Payum paypal库支持经常性支付和数字商品的Payum集成到支付过程中,所以你不担心数据可能会丢失。
  • 域名友好。事实上,Payum提供了一些模型,但它并不限制你使用它们。
  • ,它已经支持PSR-0记录器。在开发它记录执行支付的行动,以方便调试(访问symfony配置文件日志标签)。
  • 这是可能设置几个付款(一个欧盟贝宝帐户和一个为美国的example)
  • Extremely可定制。添加您的自定义支付操作或扩展,或者storages.
  • There是symfony沙箱(code|web)来帮助您开始。

附注:这不是功能的完整列表。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15191944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档