2

2checkoutpayumbundleをセットアップしようとしていますが、セットアップ方法と 2checkoutconfig.ymlへの情報の送信方法がわかりません。

この前に、私は Payum で PayPal エクスプレス チェックアウトを正常にセットアップしました。私は Payum に精通しています (まだ Payum について学んでいます)。

これは私がこれまでに行ったことです

オムニペイ 2checkout バンドルをインストールしました

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

2checkoutの例をオンラインで見つけることができないようで、最も近いのはstripeの例だったので、そのを見 てくださいこれは私の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に使用したものと同じエンティティを使用していdetailsますが、データベースの列に追加されたデータをpaypalのpayumに使用していますが、2checkoutの場合、詳細には何も追加されておらず、Integrity constraint violation詳細が空であってはならないため、理解できるエラーが表示されます。

Q2: 異なる支払い方法に同じエンティティを使用することはできますか? または、各支払い方法には独自のエンティティが必要ですか? 同じエンティティを使用できる場合、payum がdetails列に対して何も生成しないのはなぜですか。ここで何が間違っているのですか

誰かがこれで私を助けてくれれば本当に感謝しています.2checkoutを統合する方法の説明だけでなく、例を見る必要があります. ただし、説明もいただければ幸いです。

アップデート

これは、データベースに追加される支払いを準備している私のアクションの更新されたコードですが、トランザクションは失敗します

$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}}}
4

1 に答える 1

0

Q1: さまざまなゲートウェイの config.yml に追加する情報を知るにはどうすればよいですか?

Payum の支払いファクトリーは、可能なオプションに関する情報を提供します。そのデフォルト値と必須値。payum.required_options$factory->createConfig() を呼び出してand payum.default_options( example )を探す必要があります。PayumBundle では、さらに単純になります。バンドルは、可能なオプションでコンテナー構成を拡張するファクトリーを提供します。したがって、それらは Symfony の標準構成バリデーターによって検証されます。

Omnipay ゲートウェイで渡す必要があるオプションを見つけるには、そのゲートウェイの setters\getters メソッド () を確認する必要があります。たとえば、ゲートウェイにはメソッドsetTestModeがあり、それを PayumBundle で構成するには、オプションを定義する必要がありますtestModeこれは、オプションが setter 呼び出しに変換される方法です。

2Checkout このように構成する必要があると思います。

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

Q2: 異なる支払い方法に同じエンティティを使用することはできますか? または、各支払い方法には独自のエンティティが必要ですか? 同じエンティティを使用できる場合、payum が詳細列に何も生成しないのはなぜですか。ここで何が間違っているのですか

Payum の観点からは、同じエンティティ\モデルを使用して異なる支払いを保存できます。私は Omnipay と 2Checkout ゲートウェイを使用したことがないので、ここでこれ以上お手伝いすることはできません。

于 2015-02-11T09:28:08.167 に答える