gpt4 book ai didi

php - 使用 Symfony2 设置 Payum Bundle 时出错

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:21 30 4
gpt4 key购买 nike

我正在使用 Symfony 2.6 并尝试设置 PayumBundle(paypal 快速结帐),但出现错误

InvalidConfigurationException in BaseNode.php line 313: Invalid configuration for path "payum.security.token_storage": The storage entry must be a valid model class. It is set Acme\featuresBundle\Entity\PaymentToken

我正在执行那里提到的步骤 documetation

这就是我的 config.yml 的样子

    doctrine:
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
auto_mapping: true
mappings:
payum:
is_bundle: false
type: xml
dir: %kernel.root_dir%/../vendor/payum/core/Payum/Core/Bridge/Doctrine/Resources/mapping
prefix: Payum\Core\Model

payum:
security:
token_storage:
Acme\featuresBundle\Entity\PaymentToken: { doctrine: orm }

storages:
Acme\featuresBundle\Entity\PaymentDetails: { doctrine: orm }

contexts:
paypal:
paypal_express_checkout_nvp:
username: 'asdasd'
password: 'adsasd'
signature: 'asdasdasd'
sandbox: true

这是我的实体 PaymentToken

namespace Acme\featuresBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Token;

/**
* @ORM\Table
* @ORM\Entity
*/
class PaymentToken extends Token
{

}

这是实体 PaymentDetails

namespace Acme\featuresBundle\Entity;

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

/**
* @ORM\Table
* @ORM\Entity
*/
class PaymentDetails extends BaseOrder
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*
* @var integer $id
*/
protected $id;
}

我浏览了很多在线文档和其他帖子,例如 this但我不明白为什么会出现此错误。

The storage entry must be a valid model class. It is set Acme\featuresBundle\Entity\PaymentToken

我什至无法访问 Controller ,所以有些东西告诉我是 Payum 的 config.yml 配置设置不正确。我一遍又一遍地浏览文档,但似乎找不到我做错了什么。

我将非常感谢任何有助于解决此错误的帮助。

最佳答案

我终于成功了。

我需要 4 个文件

  1. 支付 Controller
  2. 订单(实体)
  3. 支付 token (实体)
  4. 订单(模型)

这是我的 PaymentController 的样子

<?php

namespace ClickTeck\featuresBundle\Controller;

use ClickTeck\featuresBundle\Entity\Orders;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Payum\Paypal\ExpressCheckout\Nvp\Api;
use Payum\Core\Registry\RegistryInterface;
use Payum\Core\Request\GetHumanStatus;
use Payum\Core\Security\GenericTokenFactoryInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration as Extra;


class PaymentController extends Controller
{
public function preparePaypalExpressCheckoutPaymentAction(Request $request)
{
$paymentName = 'paypal';
$eBook = array(
'author' => 'Jules Verne',
'name' => 'The Mysterious Island',
'description' => 'The Mysterious Island is a novel by Jules Verne, published in 1874.',
'price' => 8.64,
'currency_symbol' => '$',
'currency' => 'USD',
'clientId' => '222',
'clientemail' => 'xyz@abc.com'
);



$storage = $this->get('payum')->getStorage('ClickTeck\featuresBundle\Entity\Orders');
/** @var $paymentDetails Orders */
$paymentDetails = $storage->create();

$paymentDetails->setNumber(uniqid());
$paymentDetails->setCurrencyCode($eBook['currency']);
$paymentDetails->setTotalAmount($eBook['price']);
$paymentDetails->setDescription($eBook['description']);
$paymentDetails->setClientId($eBook['clientId']);
$paymentDetails->setClientEmail($eBook['clientemail']);


$paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = $eBook['currency'];
$paymentDetails['PAYMENTREQUEST_0_AMT'] = $eBook['price'];
$paymentDetails['NOSHIPPING'] = Api::NOSHIPPING_NOT_DISPLAY_ADDRESS;
$paymentDetails['REQCONFIRMSHIPPING'] = Api::REQCONFIRMSHIPPING_NOT_REQUIRED;
$paymentDetails['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = Api::PAYMENTREQUEST_ITERMCATEGORY_DIGITAL;
$paymentDetails['L_PAYMENTREQUEST_0_AMT0'] = $eBook['price'];
$paymentDetails['L_PAYMENTREQUEST_0_NAME0'] = $eBook['author'].'. '.$eBook['name'];
$paymentDetails['L_PAYMENTREQUEST_0_DESC0'] = $eBook['description'];
$storage->update($paymentDetails);
$captureToken = $this->getTokenFactory()->createCaptureToken(
$paymentName,
$paymentDetails,
'payment_done'
);
$paymentDetails['INVNUM'] = $paymentDetails->getId();
$storage->update($paymentDetails);
return $this->redirect($captureToken->getTargetUrl());


}

public function doneAction(Request $request)
{

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

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

// you can invalidate the token. The url could not be requested any more.
// $this->get('payum.security.http_request_verifier')->invalidate($token);

// Once you have token you can get the model from the storage directly.
//$identity = $token->getDetails();
//$order = $payum->getStorage($identity->getClass())->find($identity);

// or Payum can fetch the model for you while executing a request (Preferred).
$payment->execute($status = new GetHumanStatus($token));
$order = $status->getFirstModel();

// you have order and payment status
// so you can do whatever you want for example you can just print status and payment details.

return new JsonResponse(array(
'status' => $status->getValue(),
'response' => array(
'order' => $order->getTotalAmount(),
'currency_code' => $order->getCurrencyCode(),
'details' => $order->getDetails(),
),
));

}

/**
* @return RegistryInterface
*/
protected function getPayum()
{
return $this->get('payum');
}
/**
* @return GenericTokenFactoryInterface
*/
protected function getTokenFactory()
{
return $this->get('payum.security.token_factory');
}

}

这是我的订单实体

<?php

namespace ClickTeck\featuresBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use ClickTeck\featuresBundle\Model\Orders as BasePaymentDetails;

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

private $number;

private $description;

private $client_email;

private $client_id;

private $total_amount;

private $currency_code;

protected $details;



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

/**
* Set number
*
* @param integer $number
* @return Orders
*/
public function setNumber($number)
{
$this->number = $number;

return $this;
}

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

/**
* Set description
*
* @param string $description
* @return Orders
*/
public function setDescription($description)
{
$this->description = $description;

return $this;
}

/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}

/**
* Set client_email
*
* @param string $clientEmail
* @return Orders
*/
public function setClientEmail($clientEmail)
{
$this->client_email = $clientEmail;

return $this;
}

/**
* Get client_email
*
* @return string
*/
public function getClientEmail()
{
return $this->client_email;
}

/**
* Set client_id
*
* @param string $clientId
* @return Orders
*/
public function setClientId($clientId)
{
$this->client_id = $clientId;

return $this;
}

/**
* Get client_id
*
* @return string
*/
public function getClientId()
{
return $this->client_id;
}

/**
* Set total_amount
*
* @param float $totalAmount
* @return Orders
*/
public function setTotalAmount($totalAmount)
{

$this->total_amount = $totalAmount;
return $this;
}

/**
* Get total_amount
*
* @return float
*/
public function getTotalAmount()
{
return $this->total_amount;
}

/**
* Set currency_code
*
* @param string $currencyCode
* @return Orders
*/
public function setCurrencyCode($currencyCode)
{
$this->currency_code = $currencyCode;

return $this;
}

/**
* Get currency_code
*
* @return string
*/
public function getCurrencyCode()
{
return $this->currency_code;
}

/**
* Set details
*
* @param string $details
* @return Orders
*/
public function setDetails($details)
{
$this->details = $details;

return $this;
}

/**
* Get details
*
* @return string
*/
public function getDetails()
{
return $this->details;
}
}

这是我的 PaymentToken 实体

<?php

namespace ClickTeck\featuresBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Token;

/**
* PaymentToken
*/
class PaymentToken extends Token
{

}

这是我的订单模型

<?php

namespace ClickTeck\featuresBundle\Model;

use Payum\Core\Model\ArrayObject;

class Orders extends ArrayObject
{
protected $id;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
}
  1. 现在当我调用 ActionpreparePaypalExpressCheckoutPaymentAction 通过路由
  2. 我被重定向以进行付款
  3. 我可以在 doneAction 中看到响应

非常整洁的图书馆。我花了一段时间才弄明白,我很高兴它现在可以工作了。我确信我还有很多关于 Payum 的知识需要了解,我希望有人可以确认这是否是正确的方法:)

关于php - 使用 Symfony2 设置 Payum Bundle 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28148887/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com