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.
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:
<?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
}