VOOZH about

URL: https://payum.gitbook.io/payum/storages

⇱ Storages | Payum


For the complete documentation index, see llms.txt. This page is also available as Markdown.

Storage allow you save,fetch payment related information. They could be used explicitly, it means you have to call save or fetch methods when it is required. Or you can integrate a storage to a gateway using StorageExtension. In this case every time gateway finish to execute a request it stores the information. StorageExtension could also load a model by it is Identificator so you do not have to care about that.

Explicitly used example:

<?php
use Payum\Core\Storage\FilesystemStorage;
$storage=newFilesystemStorage('/path/to/storage','Payum\Core\Model\Payment','number');
$order=$storage->create();
$order->setTotalAmount(123);
$order->setCurrency('EUR');
$storage->update($order);
$foundOrder=$storage->find($order->getNumber());

Implicitly used example:

<?php
use Payum\Core\Extension\StorageExtension;
use Payum\Core\Gateway;
use Payum\Core\Storage\FilesystemStorage;
$gateway->addExtension(newStorageExtension(
newFilesystemStorage('/path/to/storage','Payum\Core\Model\Payment','number')
));

Usage of a model identity with the extension:

Doctrine ORM

Add token and order classes:

next, you have to create an entity manager and Payum's storage:

Doctrine MongoODM.

next, you have to create an entity manager and Payum's storage:

Filesystem.

Custom.

You can create your own custom storage. To do so just implement StorageInterface.

TODO

  • Pdo Storage - https://github.com/Payum/Payum/issues/205

  • Yii ActiveRecord Storage - https://github.com/Payum/PayumYiiExtension/pull/4


Supporting Payum

Payum is an MIT-licensed open source project with its ongoing development made possible entirely by the support of community and our customers. If you'd like to join them, please consider:

Last updated

<?php
use Payum\Core\Extension\StorageExtension;
use Payum\Core\Storage\FilesystemStorage;
use Payum\Core\Request\Capture;
$storage = new FilesystemStorage('/path/to/storage', 'Payum\Core\Model\Payment', 'number');
$order = $storage->create();
$storage->update($order);
/** @var \Payum\Core\Gateway $gateway */
$gateway->addExtension(new StorageExtension($storage));
$gateway->execute($capture = new Capture(
 $storage->identify($order)
));
echo get_class($capture->getModel());
// -> Payum\Core\Model\Payment
php composer.phar install "doctrine/orm"
<?php
namespace Acme\Entity;
use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Token;
/**
 * @ORM\Table
 * @ORM\Entity
 */
class PaymentToken extends Token
{
}
<?php
namespace Acme\Entity;
use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Payment as BasePayment;
/**
 * @ORM\Table
 * @ORM\Entity
 */
class Payment extends BasePayment
{
 /**
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 *
 * @var integer $id
 */
 protected $id;
}
<?php
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver;
use Payum\Core\Bridge\Doctrine\Storage\DoctrineStorage;
$config = new Configuration();
$driver = new MappingDriverChain;
// payum's basic models
$driver->addDriver(
 new SimplifiedXmlDriver(array('path/to/Payum/Core/Bridge/Doctrine/Resources/mapping' => 'Payum\Core\Model')), 
 'Payum\Core\Model'
);
// your models
$driver->addDriver(
 $config->newDefaultAnnotationDriver(array('path/to/Acme/Entity'), false), 
 'Acme\Entity'
);
$config->setAutoGenerateProxyClasses(true);
$config->setProxyDir(\sys_get_temp_dir());
$config->setProxyNamespace('Proxies');
$config->setMetadataDriverImpl($driver);
$config->setQueryCacheImpl(new ArrayCache());
$config->setMetadataCacheImpl(new ArrayCache());
$connection = array('driver' => 'pdo_sqlite', 'path' => ':memory:');
$orderStorage = new DoctrineStorage(
 EntityManager::create($connection, $config),
 'Payum\Entity\Payment'
);
$tokenStorage = new DoctrineStorage(
 EntityManager::create($connection, $config),
 'Payum\Entity\PaymentToken'
);
php composer.phar require "doctrine/mongodb-odm:^2.1"
<?php
namespace Acme\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as Mongo;
use Payum\Core\Model\Token;
/**
 * @Mongo\Document
 */
class PaymentToken extends Token
{
}
<?php
namespace Acme\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as Mongo;
use Payum\Core\Model\Payment as BasePayment;
/**
 * @Mongo\Document
 */
class Payment extends BasePayment
{
 /**
 * @Mongo\Id
 *
 * @var integer $id
 */
 protected $id;
}
<?php
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use Doctrine\Persistence\Mapping\Driver\SymfonyFileLocator;
use Doctrine\ODM\MongoDB\Types\Type;
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
use Doctrine\ODM\MongoDB\Mapping\Driver\XmlDriver;
use Doctrine\ODM\MongoDB\DocumentManager;
use Doctrine\ODM\MongoDB\Configuration;
use Payum\Core\Bridge\Doctrine\Storage\DoctrineStorage;
Type::addType('object', 'Payum\Core\Bridge\Doctrine\Types\ObjectType');
$driver = new MappingDriverChain;
// payum's basic models
$driver->addDriver(
 new XmlDriver(
 new SymfonyFileLocator(array(
 '/path/to/Payum/Core/Bridge/Doctrine/Resources/mapping' => 'Payum\Core\Model'
 ), '.mongodb.xml'),
 '.mongodb.xml'
 ), 
 'Payum\Core\Model'
);
// your models
$driver->addDriver(
 new AnnotationDriver(new AnnotationReader(), array(
 'path/to/Acme/Document',
 )), 
 'Acme\Document'
);
$config = new Configuration();
$config->setProxyDir(\sys_get_temp_dir());
$config->setProxyNamespace('Proxies');
$config->setHydratorDir(\sys_get_temp_dir());
$config->setHydratorNamespace('Hydrators');
$config->setMetadataDriverImpl($driver);
$config->setMetadataCacheImpl(new ArrayCache());
$config->setDefaultDB('payum_tests');
$documentManager = DocumentManager::create(null, $config);
$orderStorage = new DoctrineStorage($documentManager, 'Acme\Document\Payment');
$tokenStorage = new DoctrineStorage($documentManager, 'Acme\Document\SecurityToken');
<?php
use Payum\Core\Storage\FilesystemStorage;
$storage = new FilesystemStorage(
 '/path/to/storage', 
 'Payum\Core\Model\Payment', 
 'number'
);
<?php
use Payum\Core\Storage\StorageInterface;
class CustomStorage implements StorageInterface
{
 // implement all declared methods
}