2015-02-10 4 views
1

Я пытаюсь установить payumbundle с 2checkout, и я не могу понять, как настроить config.yml, а затем как отправить информацию на 2checkout.Интеграция платежного шлюза 2checkout с использованием (omnipay payum и symfony)

До этого у меня есть установка PayPal курьерская успешно с Payum и я некоторые, что знакомы с Payum (до сих пор учится около Payum)

Это то, что я сделал до сих пор

Я установил OmniPay 2checkout расслоение

composer require "payum/omnipay-bridge" "omnipay/2checkout" 

так как я не могу показаться, чтобы найти какой-либо пример онлайн для 2checkout и ближе всего я нашел для полоски так, глядя на его exampleЭто мой config.yml

payum: 
    security: 
     ..... 
    contexts: 
     paypal: 
      paypal_express_checkout_nvp: 
       username: .... 
       password: .... 
       signature: .... 
       sandbox: true 

     2checkout: 
      omnipay: 
       type: TwoCheckout 
       options: 
        apiKey: .... 
        pri: .... 
        act: .... 
        testMode: true 

Вот мой первый вопрос возникает

Q1: Как я знаю, какую информацию добавить в config.yml для различных шлюзов

Переходим к код внутри моего действия, который должен отправить информацию в файл 2checkout и добавить данные в базу данных.

$paymentName = 'TwoCheckout'; 

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

// insert order into database 
$paymentDetails->setClientFname('First'); 
$paymentDetails->setClientLname('Last'); 
$paymentDetails->setClientPhone('111-111-111'); 
$paymentDetails->setClientEmail('[email protected]'); 
$paymentDetails->setInvoiceId('123'); 
$paymentDetails->setNumber('456'); 
$paymentDetails->setDescription('This is description'); 
$paymentDetails->setCurrencyCode('USD'); 
$paymentDetails->setTotalAmount('20'); 
$paymentDetails->setClientId($clientID); 
$paymentDetails->setPaymentOption($paymentName); 

$storage->update($paymentDetails); 


$paymentDetails['amount'] = 20; 
$paymentDetails["currency"] = 'USD'; 
$paymentDetails["description"] = "This is description"; 

$storage->update($paymentDetails); 

$captureToken = $this->get('payum.security.token_factory')->createCaptureToken(
    $paymentName, 
    $paymentDetails, 
    'payment_done' // the route to redirect after capture; 
); 


return $this->redirect($captureToken->getTargetUrl()); 

Я использую один и тот же объект я использовал для PayPal и PAYPAL payum добавлены данные в details столбце базы данных, но и для 2checkout он не добавляя ничего для деталей и выдает ошибку Integrity constraint violation то будет понято, потому что детали не должны быть пусто, так вот мой второй вопрос

Q2: Нельзя использовать одно и то же лицо для разных способов оплаты? Или каждый способ оплаты должен иметь свою собственную организацию? Если мы можем использовать одну и ту же сущность, то почему payum ничего не генерирует для столбца details. Что я делаю неправильно здесь

Я буду очень признателен, если кто-то может мне помочь в этом, мне нужно увидеть пример, а не просто объяснение того, как интегрировать 2checkout. Однако объяснение будет также оценено.

UPDATE

Это мой обновленный код в моем действии, который готовит платеж, который будет добавлен в базу данных просто отлично, однако сделка не удается

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

$details = $storage->create(); 

// insert order into database 
$details->setClientFname($form->get('client_fname')->getData()); 
$details->setClientLname($form->get('client_lname')->getData()); 
$details->setClientPhone($form->get('client_phone')->getData()); 
$details->setClientEmail($form->get('client_email')->getData()); 
$details->setInvoiceId('123'); 
$details->setNumber('456'); 
$details->setDescription('This is description'); 

//change currency to dynamic before live 
$details->setCurrencyCode('USD'); 
$details->setTotalAmount($cartTotal.".00"); 
$details->setClientId($clientID); 
$details->setPaymentOption($paymentName); 



$details["sid"] = '201308888'; 
$details["cart_order_id"] = '123456'; 
$details["merchant_order_id"] = '789'; 
$details["total"] = $cartTotal.".00"; 

$details["amount"] = $cartTotal.".00"; 
$details["tco_currency"] = 'USD'; 
$details['fixed'] = 'Y'; 
$details['skip_landing'] = 1; 
$details['card_holder_name'] = 'Hold Name'; 
$details['street_address'] = 'Address 1'; 
$details['street_address2'] = 'Address 2'; 
$details['city'] = 'City'; 
$details['state'] = 'State'; 
$details['zip'] = '08610'; 
$details['country'] = 'USA'; 
$details['phone'] = '111-111-111'; 
$details['email'] = '[email protected]'; 

$details["name"] = 'a name'; 
$details["description"] = 'a description'; 
$details['card'] = new SensitiveValue(array(
    'number' => $form->get('cardNumber')->getData(), 
    'cvv' => $form->get('cvv')->getData(), 
    'expiryMonth' => $form->get('expiryMonth')->getData(), 
    'expiryYear' => $form->get('expiryYear')->getData(), 
    'firstName' => $form->get('client_fname')->getData(), 
)); 

$storage->update($details); 
$captureToken = $this->get('payum.security.token_factory')->createCaptureToken(
    $paymentName, 
    $details, 
    'payment_done' // the route to redirect after capture; 
); 
$details["returnUrl"] = $captureToken->getTargetUrl(); 
//return $this->redirect($captureToken->getTargetUrl()); 
return $this->forward('PayumBundle:Capture:do', array(
    'payum_token' => $captureToken, 
)); 

Это ответ я вижу, я не могу показаться, чтобы понять, почему он не

{"status":"failed","order":{"total_amount":500,"currency_code":"USD","details":{"sid":"201308888","cart_order_id":"123456","merchant_order_id":"789","total":"500.00","amount":"500.00","tco_currency":"USD","fixed":"Y","skip_landing":1,"card_holder_name":"Hold Name","street_address":"Address 1","street_address2":"Address 2","city":"city","state":"State","zip":"08610","country":"USA","phone":"111-111-111","email":"[email protected]","name":"a name","description":"a description","card":[],"returnUrl":"http:\/\/127.0.0.1:8000\/payment\/capture\/mjIo0HsxKQ1-DRISYUZ6fMZLUmOXD0-cPiOheqRqpH8","clientIp":"127.0.0.1","_reference":null,"_status":"failed","_status_code":null,"_status_message":null}}} 

ответ

0

Q1: Как узнать, какую информацию нужно добавить в config.yml для разных шлюзов

Платежная фабрика Payum предоставляет информацию о возможных вариантах. Его значения по умолчанию и требуемые значения. Вы должны позвонить $ factory-> createConfig() и искать payum.required_options и payum.default_options (example). В PayumBundle все проще.В комплект поставки входят заводы, которые расширяют конфигурацию контейнера с возможными вариантами. Таким образом, они будут подтверждены стандартным конфигализатором конфигурации Symfony.

Чтобы узнать, какие параметры вам нужно пройти в Omnipay gateway, вы должны посмотреть, какие шлюзовые сеттеры \ методы getters (example). Например, шлюз имеет метод setTestMode, чтобы настроить его в PayumBundle, вам необходимо определить параметры testMode. This is how опции, преобразованные в вызов сеттера.

2Checkout Я предполагаю, что должен быть настроен таким образом.

payum: 
    contexts: 
     2checkout: 
      omnipay: 
       type: TwoCheckout 
       options: 
        accountNumber: .... 
        secretWord: .... 
        testMode: true 

Q2: Брус мы используем один и тот же объект для различных способов оплаты? Или каждый способ оплаты должен иметь свою собственную организацию? Если мы можем использовать одну и ту же сущность, то почему payum не генерирует ничего для столбца сведений. Что я делаю неправильно здесь

С точки зрения Payums вы можете использовать ту же самую сущность \ модель для хранения различных платежей. Поскольку я никогда не работал с Omnipay и шлюзом 2Checkout, я больше не могу помочь.

+0

Огромное спасибо за то, что вернулись ко мне, вчера я в конечном итоге заглянул в файл getters и seters, чтобы узнать, что добавить в config.yml. для будущего, что является легким способом узнать, какой файл имеет геттеры и сеттеры? После правильной настройки config.yml с деталями платежа столбец сведений теперь сохраняет данные, однако данные карты не сохраняются, и теперь я работаю над этим. Поскольку payum поддерживает Omnipay, вы знаете, как передавать данные кредитной карты? – Baig

+0

у вас возникнет какая-либо идея, когда мы будем готовить массив для отправки на шлюз, что такое быстрый способ узнать, какие параметры должны быть отправлены, например, в этом случае 2checkout? – Baig

+0

Сведения о карте не сохраняются, и теперь я работаю над этим. - НЕ ДОЛЖНО БЫТЬ СОХРАНЕНА БАЗЫ ДАННЫХ. Это правильное поведение. вы должны использовать форвард symfony вместо перенаправления или попросить кредитную карту после перенаправления пользователя на захват действия. –

 Смежные вопросы

  • Нет связанных вопросов^_^