【问题标题】:Payum Bundle send empty payment - and paypal accept it :) :(Payum Bundle 发送空付款 - 贝宝接受它:) :(
【发布时间】:2023-04-01 15:32:01
【问题描述】:

我从这个例子http://payum.forma-dev.com/documentation/0.8/PayumBundle/simple_purchase_examples/paypal_express_checkout配置Bundle

当我转到 /payment 时,我被重定向到 PayPal 网站 - 但没有任何相关信息。

有信息-您可以查看详细信息-但这不是真的-我接受付款(不知道价格和说明-付款成功!?

此捆绑包已准备好使用或工作阶段?

配置:

payum:
    security:
        token_storage:
            ed\partnerBundle\Entity\PayumSecurityToken:
                doctrine:
                    driver: orm
    contexts:
        frei_payment:
            paypal_express_checkout_nvp:
              api:
                  options:
                      username:  'myusername'
                      password:  'mypass'
                      signature: 'mysing'
                      sandbox: false
            storages:
                ed\partnerBundle\Entity\PaymentDetails:
                    doctrine:
                        driver: orm

路由:

payment_start:
    pattern:  /payment
    defaults: { _controller: edpartnerBundle:Payment:preparePaypalExpressCheckoutPayment }

edpartner_payment_done:
    pattern:  /payment/done
    defaults: { _controller: edpartnerBundle:Payment:done }

支付控制器中的操作:

  public function doneAction(){

        $request = $this->getRequest();

        $token = $this->get('payum.security.http_request_verifier')->verify($request);

        $payment = $this->get('payum')->getPayment($token->getPaymentName());

        $status = new BinaryMaskStatusRequest($token);
        $payment->execute($status);

        if ($status->isSuccess()) {
            $this->getUser()->addCredits(100);
            $this->getRequest()->getSession()->getFlashBag()->set(
                'notice',
                'Payment success. Credits were added'
            );
        } else if ($status->isPending()) {
            $this->getRequest()->getSession()->getFlashBag()->set(
                'notice',
                'Payment is still pending. Credits were not added'
            );
        } else {
            $this->getRequest()->getSession()->getFlashBag()->set('error', 'Payment failed');
        }

        return $this->redirect('homepage');



    }

    /**
     */
    public function preparePaypalExpressCheckoutPaymentAction(){

        $paymentName = 'my_payment';

        $storage = $this->get('payum')->getStorageForClass(
            'ed\partnerBundle\Entity\PaymentDetails',
            $paymentName
        );

        /** @var \ed\partnerBundle\Entity\PaymentDetails $paymentDetails */
        $paymentDetails = $storage->createModel();
        $paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
        $paymentDetails['PAYMENTREQUEST_0_AMT'] = 1.23;
        $storage->updateModel($paymentDetails);

        $captureToken = $this->get('payum.security.token_factory')->createCaptureToken(
            $paymentName,
            $paymentDetails,
            'edpartner_payment_done' // the route to redirect after capture;
        );

        $paymentDetails['INVNUM'] = $paymentDetails->getId();
        $paymentDetails['RETURNURL'] = $captureToken->getTargetUrl();
        $paymentDetails['CANCELURL'] = $captureToken->getTargetUrl();
        $storage->updateModel($paymentDetails);


        return $this->redirect($captureToken->getTargetUrl());



    }

【问题讨论】:

  • 您能否解释一下您是如何设法将信息发送到 PayPal 的,因为我被困在同一点上,无法理解答案。我会很感激的。

标签: php symfony paypal payum


【解决方案1】:

您描述的行为是可能的,这里有任何问题。要查看付款详细信息,您必须配置其他字段。 sandbox中有一个例子

【讨论】:

  • 好的,现在可以了,但我在 paypal 中有。这几乎是您在现场确认的付款... - 但是当我点击确定时 - 付款已执行而不要求确认?
  • 我很奇怪你为什么不在手册页上添加详细信息 - payum.forma-dev.com/documentation/0.8/PayumBundle/… 我想有人想发送空付款...
  • payum 不抽象支付字段,因此您仍然需要了解 paypal 规范。他们就是这样做的。
  • 好的,我理解,但我认为在示例贝宝集成中,您可以添加工作示例,而不仅仅是部分工作。但感谢好的图书馆。
  • 公平地说,这个问题似乎更多地出现在 PayPal 端,它允许此类数据通过。公平地说,Payum 可以(并且可能应该)在此之前处理事情,但 PayPal 应该在创建交易之前回复某种“无效字段”响应。
猜你喜欢
  • 2013-02-26
  • 2011-08-31
  • 2014-10-30
  • 2011-07-25
  • 2016-06-17
  • 2012-09-09
  • 2014-08-15
  • 2016-06-08
  • 2011-11-17
相关资源
最近更新 更多