Payum - пакет для Laravel 4. Как создать данные модели, используя Eloquent вместо FilesystemStorage?

Я пытаюсь сохранить детали платежа в Laravel 4.1, используя Eloquent. Я пытался создать свои модели, как сказал Payum, но это не работает для меня. Мой код:

payum / payum-Laravel-пакет /config.php:

<?php

use Payum\Core\Storage\FilesystemStorage;
use Payum\Paypal\ExpressCheckout\Nvp\Api;
use Payum\Paypal\ExpressCheckout\Nvp\PaymentFactory as PaypalPaymentFactory;

$detailsClass = 'Payum\Core\Model\ArrayObject';
$tokenClass = 'Payum\Core\Model\Token';

$paypalPayment = PaypalPaymentFactory::create(new Api(array(
    'username' => 'MY_USER_NAME',
    'password' => 'MY_PASS',
    'signature' => 'MY_SIGN',
    'sandbox' => true
)));

return array(
    'token_storage' => new FilesystemStorage(__DIR__.'/../../../../storage/payments', $tokenClass, 'hash'),
    'payments' => array(
        'paypal_es' => $paypalPayment,
    ),
    'storages' => array(
        $detailsClass => new FilesystemStorage(__DIR__.'/../../../../storage/payments', $detailsClass),
    )
);

Контроллеры /PaypalController.php

<?php

use Payum\Paypal\ExpressCheckout\Nvp\Api;

class PaypalController extends BaseController
{
    public function prepareExpressCheckout()
    {

       $paymentName = 'paypal_es';

       $storage = \App::make('payum')->getStorage('Payum\Core\Model\ArrayObject');

         /** @var $paymentDetails PaymentDetails */
           $paymentDetails = $storage->createModel();
           $paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = 'EUR';
           $paymentDetails['PAYMENTREQUEST_0_AMT'] = '1.21';
           $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'] = '1.21';
           $paymentDetails['L_PAYMENTREQUEST_0_QTY0'] = '1';
           $paymentDetails['L_PAYMENTREQUEST_0_NAME0'] = 'Modulo 1';
           $paymentDetails['L_PAYMENTREQUEST_0_DESC0'] = 'Descripción Módulo 1';
           $storage->updateModel($paymentDetails);

            $captureToken = \App::make('payum.security.token_factory')->createCaptureToken($paymentName, $paymentDetails, 'payment_done');

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

       return \Redirect::to($captureToken->getTargetUrl());
    }

    /**
     * @return \Payum\Core\Security\GenericTokenFactoryInterface
     */
    protected function getTokenFactory()
    {
        return \App::make('payum.security.token_factory');
    }
}

Этот код работает хорошо, но я хотел бы использовать Eloquent вместо FilesystemStorage для создания своих собственных моделей. Я пытался следовать документации Payum, но мне это не помогло:

<?php
namespace App\Model;

use Payum\Core\Model\ArrayObject;

class PaymentDetails extends ArrayObject
{
    protected $id;

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

а также

use Payum\Core\Model\Token;

class PaymentSecurityToken extends Token
{
}

Как мне это сделать? Любая помощь будет оценена, потому что у меня нет идей.

1 ответ

[из комментария]

Ваши примеры показывают, что вы используете хранилище файловой системы, но вам нужен Eloquent. Такое хранилище не предусмотрено из коробки, но мы планируем добавить его в ближайшее время.

[Ответ]

Хранение здесь и сейчас. Вот как вы должны изменить конфигурацию для работы с ней:

<?php

use Payum\LaravelPackage\Storage\EloquentStorage;
use Payum\Paypal\ExpressCheckout\Nvp\PaymentFactory;

// it is not same model as you used but you get the idea.
$detailsClass = 'Payum\LaravelPackage\Model\Order';
$tokenClass = 'Payum\LaravelPackage\Model\Token';

$paymentFactory = new PaymentFactory();

return array(
    'token_storage' => new EloquentStorage($tokenClass),
    'payments' => array(
        'paypal' => $paymentFactory->create(array(
            'username' => 'MY_USER_NAME',
            'password' => 'MY_PASS',
            'signature' => 'MY_SIGN',
            'sandbox' => true
        ));,
    ),
    'storages' => array(
        $detailsClass => new EloquentStorage($detailsClass),
    )
);

Вот документация.

Другие вопросы по тегам