Я использую стабильную версию Payum 0.13 и Zend Framework v2 для осуществления платежей через AuthorizeNet.
Мой код для теста:
$storage = $this->getServiceLocator()
->get('payum')
->getStorage('LowbiddoPayment\Entity\AgreementDetails');
$details = $storage->create();
$details['currency'] = 'USD';
$details['amount'] = 100;
$details['card_num'] = new SensitiveValue('4111111111111111');
$details['exp_date'] = new SensitiveValue('10/16');
$details['description'] = 'Test';
$storage->update($details);
$this->getServiceLocator()
->get('payum.security.token_factory')
->setUrlPlugin($this->url());
$doneUrl = $this->url()->fromRoute('payment_done', array('id' => $orderId), array('force_canonical' => true));
$captureToken = $this->getServiceLocator()
->get('payum.security.token_factory')
->createCaptureToken('authorize-net-aim', $details, $doneUrl);
У меня есть эта ошибка
/vendor/payum/payum/src/Payum/AuthorizeNet/Aim/Action/CaptureAction.php:58
Credit card details has to be set explicitly or there has to be an action that supports ObtainCreditCard request.
Как я могу это исправить?
Спасибо!
PayumModule не предоставляет (пока) встроенную функцию ObtainCreditCardAction. Так что есть два пути.
Вы можете запросить информацию о кредитной карте самостоятельно. Как создать форму, чем визуализировать ее. Пользователь заполняет его и отправляет. Вы получаете эту информацию и передаете ее Payum вместе с остальной информацией. Authorize.Net AIM запрашивает поля ‘card_num’, ‘exp_date’.
Другой способ — создать специфичный для Zend ObtainCreditCardAction и добавить его в объект Payment с помощью метода addAction. Вот пример ObtainCreditCardAction для Symfony: https://github.com/Payum/Payum/blob/master/src/Payum/Core/Bridge/Symfony/Action/ObtainCreditCardAction.php
Других решений пока нет …