雪巴/etransactions-bundle

E-transactions支付网关(农业信贷银行)。

安装: 227

依赖项: 0

建议者: 0

安全: 0

星星: 0

观察者: 1

分支: 2

类型:symfony-bundle

1.1.1 2021-03-24 19:36 UTC

This package is auto-updated.

Last update: 2024-09-26 18:35:57 UTC


README

SensioLabsInsight Latest Stable Version Total Downloads

此捆绑包允许在symfony项目中实现一个与E-transactions协同工作的支付解决方案。E-transactions是由以下银行“农业信贷银行”提供的支付方式。不要犹豫,联系我以改进它;)

安装

步骤1:使用Composer导入

使用composer

{
    "require": {
        "snowbaha/etransactions-bundle": "~1.0"
    }
}

步骤2:启用插件

在kernel中启用捆绑包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Snowbaha\EtransactionsBundle\SnowbahaEtransactionsBundle(),
    );
}

步骤3:配置捆绑包

必填字段 PARAMETER

# E-Transactions (don't forget the validation of the HMAC key 'certif_test/prod' by email)
    etransactions_id: ~
    etransactions_site: ~
    etransactions_certif_test: ~
    etransactions_certif_prod: ~

必填字段 CONFIG

snowbaha_etransactions:
    # Credentials
    identifiant: "%etransactions_id%"
    site: "%etransactions_site%"
    rang: "01" #change it with your RANK
    # Keys
    key_dev: "%etransactions_certif_test%"
    key_prod: "%etransactions_certif_prod%"
    # SETTING OPTIONAL
    env_mode: TEST # TEST by default - Possible values : TEST / PRODUCTION
    # check_signature: false # /!\ KEEP IT to false because it doesn't work and i DONT KNOW WHY (let me know if you have a solution) false by Default (if you want to check the signature of the IPN Bank

如何使用

控制器

创建交易

要启动一个新的交易,您需要在控制器中创建一个动作并调用snowbaha.etransactions服务。所有必填字段都使用它们的默认值。您可以在app/config/config.yml文件中配置交易的所有常用字段。

要查看哪些字段可用,请参阅PDF官方文档。

服务方法
  • init($order_id, $amount, $email_buyer, $currency = 978) 允许您指定交易id、金额、买家邮箱和交易货币。
  • setOptionnalFields(array) 允许您指定任何字段。
示例
    /**
     * @Route("/initiate-payment/id-{id}", name="pay_online")
     * @Template()
     */
    public function payOnlineAction($id)
    {
        // ...
        $etransactions = $this->get('snowbaha.etransactions')
            ->init(99, 100, 'buyer@buy.com')
            ->setOptionnalFields(array(
                'PBX_ERREUR' => 'http://www.example.com/error'
            ))
        ;

        return $this->render('YOURBUNDLEBundle:Etransactions:pay_online.html.twig', array(
                    'paymentUrl' => $etransactions->getPaymentUrl(),
                    'fields' => $etransactions->getFields(),
                ));
    }

处理来自服务器的响应

此路由将由E-Transactions服务调用,以更新您关于支付状态的信息。这是正确处理支付验证的唯一方式。

服务方法

  • responseBankServer(Request) 用于更新交易状态(在数据库中)
  • 您将获得一个包含以下内容的数组
    • sucessPayment: (应为true以验证支付)
    • amount: (您的pbx_total变量)
    • ref: (您的pbx_cmb变量)
    • error:E; (如果有错误,则为00000)
    • auto:A; (授权)
    • sign:K (用于检查的签名)
示例
    // YOUR CONTROLLER
    /**
     * THIS ROUTE have to be public to allow the bank access, it is the URL you will provide to your account 
     * @Route("/payment/verification")
     * @param Request $request
     */
    public function paymentVerificationAction(Request $request)
    {
        // ...
         $responseBank = $this->get('snowbaha.etransactions')->responseBankServer($request);
        
        $id_order = (int)$responseBank['ref'];
        $Order = $this->get('app.provider.order')->getOneByID( $id_order );

        // Success
        if($responseBank['sucessPayment'] === true && !is_null($Order)) :

            $Order->setState("order.state.success_payment");
            $Order->setPaymentError(0);

            // Email notification
            $this->get('app.mailing.order')->sendNewOrderNotif($Order);

        elseif( !is_null($Order) ) :
            // Error
            $Order->setState('order.state.success_payment_error');
            $Order->setPaymentError($responseBank['error']);
        endif;

        //...
    }

模板

这是payOnlineAction()模板可能的样子。您可以使用paiementFormtwig函数根据服务中创建并返回的getFields()函数自动生成表单。

    <html>

        <i class="fa fa-refresh fa-spin margin-top margin-bottom" style="font-size: 50px"></i> {# With http://fontawesome.io/icons/ #}
        <h3>Redirect to the paiement page...</h3>
        <form action="{{ paymentUrl }}" method="POST" id="etransactions-form">
            {{ paiementForm(fields) }}

            {# If no JS, show the button to submit#}
            <noscript>
                <input type="submit" value="Pay">
            </noscript>
        </form>
        
    </html>
    <script type="text/javascript">
        document.getElementById('etransactions-form').submit();
    </script>

LOG

当您遇到支付错误时,您可以使用日志: ENV.etransaction.log