pimcore/payment-provider-hobex

Pimcore 支付提供商 - Hobex

安装: 760

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 11

分支: 3

开放问题: 1

类型:pimcore-bundle

v2.0.0 2024-04-29 11:44 UTC

This package is auto-updated.

Last update: 2024-09-21 16:02:56 UTC


README

官方 Hobex 文档

需求

Hobex 不需要额外的 PHP-SDK。您只需要从您的集成合作伙伴那里获取一个测试账户。

安装

使用 composer 安装最新版本

composer require pimcore/payment-provider-hobex

通过控制台或 Pimcore 后端中的扩展管理器启用插件

php bin/console pimcore:bundle:enable PimcorePaymentProviderHobexBundle
php bin/console pimcore:bundle:install PimcorePaymentProviderHobexBundle

配置

支付管理器负责实现不同的支付提供商,以将它们集成到框架中。

有关支付管理器的更多信息,请参阅支付管理器文档

在配置文件 pimcore_ecommerce_config.payment_manager 中配置支付提供商

pimcore_ecommerce_framework:
    
    # ...
    
    # add hobex to the set of active payment providers
    payment_manager:
        providers:
            hobex_testprovider:
                provider_id: Pimcore\Bundle\EcommerceFrameworkBundle\PaymentManager\Payment\Hobex                    
                profile: sandbox
                profiles:
                    sandbox:
                        entityId: '8a829418530df1d201531299e097175c'
                        authorizationBearer: 'OGE4Mjk0MTg1MzBkZjFkMjAxNTMxMjk5ZTJjMTE3YWF8ZzJnU3BnS2hLUw=='
                        testSystem: true
                        payment_methods:
                            - VISA
                            - MASTER
                            - SOFORTUEBERWEISUNG
                            - SEPA
    
    # ...
    # configure the payment provider in the checkout manager
    checkout_manager:
        tenants:
            _defaults:
                payment:
                    provider: hobex_testprovider
            default: ~                              

支付信息:订单支付部分 "支付信息" 存储了客户每次支付尝试的信息。

在 "PaymentInfo" 字段集中添加额外的字段,以便订单管理器在订单对象中存储信息:PaymentInfo Additional Data

Hobex 与 Pimcore 10 兼容,因此对于 Pimcore 6,您可能需要在您的 config.yml 中添加以下行

    - { resource: '@PimcoreEcommerceFrameworkBundle/Resources/config/v7_configurations.yml' }

实现

CheckoutController.php

  /**
     * Payment step of the checkout.
     * This is where the payment widget is initialized and displayed.
     * @Route("/checkout/payment")
     * @param Request $request
     */
    public function payment(Request $request, Factory $factory) {
        $cartManager = $factory->getCartManager();
        $orderManager = $factory->getOrderManager();

        $cart = $cartManager->getCartByName('cart');
        $checkoutManager = Factory::getInstance()->getCheckoutManager($cart);

        $order = $orderManager->getOrCreateOrderFromCart($cart);       

        $requestConfig = new HobexRequest();
        $requestConfig
            ->setShopperResultUrl($this->generateUrl('app_webshop_payment_result'))
            ->setLocale('de')
        ;
        
        /** @var SnippetResponse $paymentInitResponse */
        $paymentInitResponse = $checkoutManager->startOrderPaymentWithPaymentProvider($requestConfig);

        return $this->renderTemplate('Webshop/Checkout/payment.html.twig', [
            'cart' => $cart,
            'order' => $order,
            'renderedForm' => $paymentInitResponse->getSnippet()
        ]);
    }
    
    /**
     * Final step of the example payment checkout.
     * This is called then the payment succeeded and the order got confirmed.
     * @Route("/checkout/success")
     * @param Request $request
     */
    public function success(Request $request) {
        // needs some implementation. Typically a success page is rendered.
    }

app/Resources/views/Webshop/Checkout/payment.html.twig

{% extends ':Layout:default.html.twig' %}
{% block content %}
    <div class="container" style="margin-top:2em">
        <div class="row">
            <div class="col-md-12">
                <h1>💰 Example Checkout / Payment</h1>
               
                <hr/>
                <h5>Order:</h5>
                <ul>
                    <li>ID: {{ order.id }}</li>
                    <li>Number: {{ order.ordernumber }}</li>
                </ul>

                <hr/>
                
                {{ #payment widget: }}
                {{ renderedForm | raw }}

                <hr/>

                <a class="btn btn-info" href="{{ path('app_webshop_cart_list') }}">⏎ Back To Cart</a>

            </div>
        </div>
    </div>
{% endblock %}

PaymentController

    /**
     * In the payment controller the response from Hobex payments is handled.
     * This action is typically called when the payment succeeded. 
     * @Route("/checkout/payment/result")
     * @param Request $request
     */
    public function result(Request $request, Factory $factory) {

        $cartManager = $factory->getCartManager();
        $orderManager = $factory->getOrderManager();

        $paymentProvider = Factory::getInstance()->getPaymentManager()->getProvider("hobex_testprovider");

        $order = Factory::getInstance()->getCommitOrderProcessor()->handlePaymentResponseAndCommitOrderPayment(
            $request->query->all(),
            $paymentProvider
        );

        if ($order->getOrderState() == AbstractOrder::ORDER_STATE_COMMITTED) {
            return $this->redirectToRoute('app_webshop_checkout_success');
        } else {           
            $errorMessage = 'Something wrent wrong with the payment: '.$order->getLastPaymentInfo()->getMessage());
            // error handling ...
            return $this->redirectToRoute('app_webshop_checkout_step1');
        }

    }

实现

请参阅 https://hobex.docs.oppwa.com/tutorials/webhooks/configuration

如果您想使用 webhooks,则必须配置 webhook 密钥

pimcore_ecommerce_framework:
    
    # ...
    
    # add hobex to the set of active payment providers
    payment_manager:
        providers:
            hobex_testprovider:
                provider_id: Pimcore\Bundle\EcommerceFrameworkBundle\PaymentManager\Payment\Hobex                    
                profile: sandbox
                profiles:
                    sandbox:
                        entityId: '8a829418530df1d201531299e097175c'
                        authorizationBearer: 'OGE4Mjk0MTg1MzBkZjFkMjAxNTMxMjk5ZTJjMTE3YWF8ZzJnU3BnS2hLUw=='
                        # optional: if you configured webhook, you need to configure the secret here  
                        webhookSecret: '353FADF1340CA4AFA7052AD8BAAEA788E177C9D9CFC8271294F53CA83F4DB4AD' 
                        testSystem: true
                        payment_methods:
                            - VISA
                            - MASTER
                            - SOFORTUEBERWEISUNG
                            - SEPA
    
                              

处理 webhook 响应的控制器/操作示例

PaymentController

    /**
     * In the payment controller the webhook response from Hobex payments is handled.
     * @Route("/checkout/payment/webhook")
     * @param Request $request
     */
    public function webhookAction(Request $request){
        $paymentProvider = Factory::getInstance()->getPaymentManager()->getProvider("hobex_testprovider");
        $order = Factory::getInstance()->getCommitOrderProcessor()->handlePaymentResponseAndCommitOrderPayment(
                ['base64Content' => $request->getContent(), 'authTag' => $request->headers->get('x-authentication-tag'),
                 'initVector' => $request->headers->get('x-initialization-vector')],
                $paymentProvider
            );
        return new Response('ok',200);

    }