簡體   English   中英

使用(omnipay payum和symfony)集成支付網關2checkout

[英]Integrating payment gateway 2checkout using (omnipay payum and symfony)

我正在嘗試使用2checkout設置payumbundle ,但我似乎無法理解如何設置config.yml ,然后將信息發送至2checkout。

在此之前,我已經成功通過Payum設置了PayPal Express Checkout,並且我對Payum有所了解(仍在學習Payum)

這是我到目前為止所做的

我已經安裝了omnipay 2checkout捆綁包

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

由於我似乎無法在線找到2checkout的任何示例,而我找到的最接近的是條帶化,因此查看其示例這是我的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('xyz@abc.com');
$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這是可以理解的,因為Details不應為空,所以這是我的第二個問題

問題2:我們不能將同一實體用於不同的付款方式? 還是每種付款方式都應該有自己的實體? 如果我們可以使用同一實體,那么為什么payum不會為details列生成任何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'] = 'dummy@xyz.com';

$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":"dummy@xyz.com","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}}}

Q1:我如何知道要在config.yml中為不同的網關添加哪些信息

Payum的付款工廠提供有關可能選項的信息。 它的默認值和必需值。 您必須調用$ payum.required_options > createConfig()並查找payum.required_optionspayum.default_options示例 )。 在PayumBundle中,事情變得更加簡單。 該捆綁包為工廠提供了擴展容器配置的可能選項。 因此,它們將由Symfony的標准配置驗證器進行驗證。

要找出必須在Omnipay網關中傳遞的選項,必須查看該網關的setters \\ getters方法( 示例 )。 例如,網關具有方法setTestMode ,要在PayumBundle中對其進行配置,您必須定義一個選項testMode 這是將選項轉換為setter調用的方式。

2 Checkout我想必須以這種方式配置。

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

問題2:我們不能將同一實體用於不同的付款方式? 還是每種付款方式都應該有自己的實體? 如果我們可以使用同一實體,那么為什么payum不會為明細列生成任何內容。 我在這里做錯了什么

從Payum角度來看,您可以使用相同的實體\\模型來存儲不同的付款。 由於我從未使用過Omnipay和2Checkout網關,因此在這里我無能為力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM