jihel/spreedly-bridge

Viking 支付接收器用于 JihelOmnipaySpreedlyBridge

安装: 36

依赖: 1

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放性问题: 0

类型:symfony-bundle

1.0.2 2019-02-13 10:48 UTC

This package is not auto-updated.

Last update: 2024-09-20 21:17:12 UTC


README

Omnipay 的 SpreedlyBridge

1- 安装

选择一个接收器桥接器,然后将其添加到 composer.json 的 require 部分

{
    "require": {
        "jihel/spreedly-bridge": "1.0",
        "jihel/spreedly-[brand]-receiver": "1.0",
    }
}

php composer.phar require jihel/spreedly-[brand]-receiver

将包添加到 AppKernel.php 中

public function registerBundles()
{
    $bundles = array(
        ...
        new Jihel\OmnipaySpreedlyBridgeBundle\JihelOmnipaySpreedlyBridgeBundle(),
    );
}

2- 配置

config.yml

[bridge]:
    accounts:
        default:
            password: %viking_pass%
            userId: %viking_user%
            entityId: %viking_entity_id%

omnipay:
    default_gateway: SpreedlyBridge
    methods:
        SpreedlyBridge:
            user: %spreedly_user%
            secret: %spreedly_secret%
            testMode: "%kernel.debug%"

routing.yml

JihelOmnipaySpreedlyBridgeBundle:
    resource: '@JihelOmnipaySpreedlyBridgeBundle/Resources/config/routing.yaml'
    prefix: /_jihel/omnipay

生成实体

php bin/console doctrine:schema:update --force

3- 使用(Viking 支付示例)

在 /_jihel/omnipay/ 上创建一个新的接收器

支付方式是 Omnipay 标准,但您必须设置接收器

/form-submit

use Omnipay\SpreedlyBridge\Gateway;

// ...

/** @var ReceiverManager $receiverManager */
$receiverManager = $this->get('jihel.omnipay.manager.receiver');
/** @var TransactionManager $transactionManager */
$transactionManager = $this->get('jihel.omnipay.manager.transaction');

// Works with float, not cents
$initialAmount /= 100;
$gatewayName = Gateway::NAME;

$paymentRequest = new \Jihel\OmnipaySpreedlyBridgeBundle\Model\PaymentRequest();
$paymentRequest
    ->setAmount($initialAmount)
    ->setCurrency($order->getConfig()->getCurrency())
;

$receiver = $receiverManager->findByDomain($domain->getName());

$transaction = $transactionManager->create($paymentRequest, $receiver);
$order->setTransaction($transaction);
$m->persist($order->getTransaction());
$m->persist($order);
$m->flush();

// Redirect to /create

/create

// Finish to setup the gateway
$gateway->setReceiver($payment->getTransaction()->getReceiver());
$response = $gateway->purchase([
    'landingUrl' => $this->generateUrl('FrontTransactionBundle_payment_finish', [
        'uuid' => $order->getUuid(),
        'id' => $payment->getId(),
    ], UrlGeneratorInterface::ABSOLUTE_URL),
    'bin' => $payment->getTransaction()->getCreditCard()->getFirstSixDigits(),
    'currency' => $payment->getTransaction()->getCurrency(),
    'amount' => $payment->getTransaction()->getAmount(),
    'cardReference' => $payment->getTransaction()->getCreditCard()->getToken(),
])->send();

if ($response->isRedirect()) {
    $transactionManager->pendingPayment($payment);

    $response->redirect();
    die;
} elseif (!$response->isSuccessful()) {
    $transactionManager->failPayment($payment);
    $this->addFlash('danger', $response->getMessage());

    // Redirect to form
}

// Else it's success
$transactionManager->depositPayment($payment, $response);

// Redirect to after payment page

/3ds

$gateway->setReceiver($payment->getTransaction()->getReceiver());
$response = $gateway->completePurchase([
    '3ds' => $request->query->get('id'),
])->send();

Then handle as standard omnipay response

4- 感谢

感谢我的猫不停地喵喵叫。感谢我抽空为懒惰的开发者编写教程。您可以通过 这里 访问我的简历。