payum
1.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
が最初に行われたときと同じパラメーターで呼び出され、支払いサイトに何度もリダイレクトされます。
現在の質問:
vendor
フォルダーservices.xml
の下に構成オプションを追加しないようにするにはどうすればよいcomposer.json
ですか?支払い応答を処理する場所は? クエリ文字列パラメーターを確認する必要があり
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'
;
}
}