3

payum1.3、1.0 、payum-bundleおよび1.0を使用する Sylius で使用したい Omnipay ゲートウェイを実装しましたomnipay-bridge

ゲートウェイを構成しました (これは、別の支払いページを表示するリダイレクト ゲートウェイであり、支払いが完了すると、 を呼び出します。returnUrlクレジット カードは関係ありません) app/config/config.yml

payum:
    gateways:
        my_gateway:
            omnipay_offsite:
                type: MyOmnipayGateway
                options:
                    gatewayOption: 1
                    anotherOption: 2
              actions:
                  - sylius.payum.my_gateway.action.convert_payment

ゲートウェイもsylius_paymentセクションに追加しました

sylius_payment:
    gateways:
        my_gateway: My Payment Service

支払いをvendor/sylius/sylius/src/Sylius/Bundle/PayumBundle/Resources/config/services.xml次のように変換するアクションを追加しました。

<service id="sylius.payum.my_gateway.action.convert_payment" class="Sylius\Bundle\PayumBundle\Action\ConvertPaymentToMyGatewayAction">
    <tag name="payum.action" context="my_gateway" />
</service>

ConvertPaymentToMyGatewayAction要求ペイロードを期待される形式に変換するクラスを実装しました(ConvertPaymentToPaypalExpressAction参照として使用)。

ゲートウェイがサポートされていないという過去のエラーを取得するためにMyOmnipayGateway、ゲートウェイのリストにも追加しました。vendor/omnipay/common/composer.json

注文を完了すると、実際の支払いサイトに正常にリダイレクトされ、支払いが完了するとreturnUrl、クエリ文字列に予想されるパラメーターが指定されたサイトに返されます。ただし、ここでは実行が元に戻り、OffsiteCaptureAction呼び出しpurchaseが最初に行われたときと同じパラメーターで呼び出され、支払いサイトに何度もリダイレクトされます。

現在の質問:

  1. vendorフォルダーservices.xmlの下に構成オプションを追加しないようにするにはどうすればよいcomposer.jsonですか?

  2. 支払い応答を処理する場所は? クエリ文字列パラメーターを確認する必要がありreturnUrlます (ゲートウェイの に実装されていますcompletePurchase)。

ありがとう!

編集:$details変換アクションで初期化を逃し$details = $payment->getDetails();たため、_completeCaptureRequired毎回 false になりpurchase、ループで実行されました。支払いを適切に処理できるようになりました。質問 2 は、上記の構成とこのハンドラーでほとんど解決されます

<?php
namespace Sylius\Bundle\PayumBundle\Action;

use Payum\Core\Action\ActionInterface;
use Payum\Core\Exception\RequestNotSupportedException;
use Payum\Core\Request\Convert;
use Sylius\Component\Core\Model\PaymentInterface;

class ConvertPaymentToMyGatewayAction implements ActionInterface
{
    public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);

        /** @var PaymentInterface $payment */
        $payment = $request->getSource();
        $order = $payment->getOrder();

        $details = $payment->getDetails();

        // Fill the correct parameters here

        $request->setResult($details);
    }

    public function supports($request)
    {
        return
            $request instanceof Convert &&
            $request->getSource() instanceof PaymentInterface &&
            $request->getTo() === 'array'
        ;
    }
}
4

1 に答える 1

0

質問 1 に答えるには、独自のサービスをアプリ構成または独自のバンドルに追加できます。私はそれを自分のバンドルに入れるのが好きです。

<service id="sylius.payum.my_gateway.action.convert_payment" class="Sylius\Bundle\PayumBundle\Action\ConvertPaymentToMyGatewayAction">
    <tag name="payum.action" context="my_gateway" />
</service>

それをymlに変換するだけです

sylius.payum.my_gateway.action.convert_payment:
    class: Sylius\Bundle\PayumBundle\Action\ConvertPaymentToMyGatewayAction
    tags:
        -  { name: payum.action, context: my_gateway }
于 2016-09-01T01:03:23.897 に答える