aliirfaan/laravel-mu-qr-code

基于EMV(注册商标)支付系统二维码规范,生成MU提供的国家二维码的文本表示。

1.0.1 2023-07-06 07:27 UTC

This package is auto-updated.

Last update: 2024-09-06 10:03:28 UTC


README

根据EMV®1支付系统二维码规范(EMV QRCPS)- EMVCo发布的MU展示模式,生成MU提供的国家二维码的文本表示。

注意,您需要将文本表示传递给外部二维码生成器,该生成器不包括在包中。

EMV®是美国和其他国家的注册商标,在其他地方是未注册商标。EMV商标归EMVCo, LLC所有。QR码是DENSO WAVE的注册商标。

功能

  • 验证根数据对象的第一和最后一个元素
  • 根据Ti或便利费指示符的值验证便利费数据对象
  • 根据长度和格式验证数据对象(数字(N),字母数字特殊(ans),字符串(S))
  • 计算循环冗余检查
  • 生成有效的二维码文本表示

要求

安装

您可以使用Composer在现有的Laravel项目上安装此包

 $ composer require aliirfaan/laravel-mu-qr-code

通过编辑config/app.php文件并添加到提供者数组中,来注册ServiceProvider

  aliirfaan\LaravelMuQrCode\LaravelMuQrCodeProvider::class,

用法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// import data objects you want to use
use aliirfaan\LaravelMuQrCode\DataObjects\RootDataObject;
use aliirfaan\LaravelMuQrCode\DataObjects\PayloadFormatIndicator;
use aliirfaan\LaravelMuQrCode\DataObjects\PointOfInitiationMethod;
use aliirfaan\LaravelMuQrCode\DataObjects\GloballyUniqueIdentifier;
use aliirfaan\LaravelMuQrCode\DataObjects\PayeeParticipantCode;
use aliirfaan\LaravelMuQrCode\DataObjects\MerchantAccountNumber;
use aliirfaan\LaravelMuQrCode\DataObjects\MerchantId;
use aliirfaan\LaravelMuQrCode\DataObjects\MuMerchantAccountInformation;
use aliirfaan\LaravelMuQrCode\DataObjects\MerchantCategoryCode;
use aliirfaan\LaravelMuQrCode\DataObjects\TransactionCurrency;
use aliirfaan\LaravelMuQrCode\DataObjects\CountryCode;
use aliirfaan\LaravelMuQrCode\DataObjects\MerchantName;
use aliirfaan\LaravelMuQrCode\DataObjects\MerchantCity;
use aliirfaan\LaravelMuQrCode\DataObjects\AdditionalDataFieldTemplate;
use aliirfaan\LaravelMuQrCode\DataObjects\BillNumber;
use aliirfaan\LaravelMuQrCode\DataObjects\ReferenceLabel;
use aliirfaan\LaravelMuQrCode\DataObjects\MobileNumber;
use aliirfaan\LaravelMuQrCode\DataObjects\PurposeOfTransaction;

class TestController extends Controller
{
    public function test(Request $request)
    {
        try {

            // create root data object
            $rootDataObject = new RootDataObject();

            // create more data objects and add to root data object
            $payloadFormatIndicator = new PayloadFormatIndicator();
            $rootDataObject->pushChildDataObject($payloadFormatIndicator);

            $pointOfInitiationMethod = new PointOfInitiationMethod();
            $pointOfInitiationMethod->setValue(11);
            $rootDataObject->pushChildDataObject($pointOfInitiationMethod);

            // MU Merchant Account Information template
            $muMerchantAccountInformation = new MuMerchantAccountInformation();

            // push to template
            $globallyUniqueIdentifier = new GloballyUniqueIdentifier();
            $globallyUniqueIdentifier->setValue('mu.taucas');
            $muMerchantAccountInformation->pushChildDataObject($globallyUniqueIdentifier);

            $payeeParticipantCode = new PayeeParticipantCode();
            $payeeParticipantCode->setValue('MSTDMXMVXXXX');
            $muMerchantAccountInformation->pushChildDataObject($payeeParticipantCode);

            $merchantAccountNumber = new MerchantAccountNumber();
            $merchantAccountNumber->setValue('01234123412');
            $muMerchantAccountInformation->pushChildDataObject($merchantAccountNumber);

            $merchantId = new MerchantId();
            $merchantId->setValue('000000000000050');
            $muMerchantAccountInformation->pushChildDataObject($merchantId);

            // push template to root data object
            $rootDataObject->pushChildDataObject($muMerchantAccountInformation);

            $merchantCategoryCode = new MerchantCategoryCode();
            $merchantCategoryCode->setValue('9222');
            $rootDataObject->pushChildDataObject($merchantCategoryCode);

            $transactionCurrency = new TransactionCurrency();
            $rootDataObject->pushChildDataObject($transactionCurrency);

            $countryCode = new CountryCode();
            $rootDataObject->pushChildDataObject($countryCode);

            $merchantName = new MerchantName();
            $merchantName->setValue('Bank of Lalaland');
            $rootDataObject->pushChildDataObject($merchantName);

            $merchantCity = new MerchantCity();
            $merchantCity->setValue('Portlouis');
            $rootDataObject->pushChildDataObject($merchantCity);

            // additional data field template
            $additionalDataFieldTemplate = new AdditionalDataFieldTemplate();
            $billNumber = new BillNumber();
            $billNumber->setValue('MCQ459789');
            $additionalDataFieldTemplate->pushChildDataObject($billNumber);

            $mobileNumber = new MobileNumber();
            $mobileNumber->setValue('52516315');
            $additionalDataFieldTemplate->pushChildDataObject($mobileNumber);

            $referenceLabel = new ReferenceLabel();
            $referenceLabel->setValue('MOM123');
            $additionalDataFieldTemplate->pushChildDataObject($referenceLabel);

            $purposeOfTransaction = new PurposeOfTransaction();
            $purposeOfTransaction->setValue('Payment of network fees');
            $additionalDataFieldTemplate->pushChildDataObject($purposeOfTransaction);

            $rootDataObject->pushChildDataObject($additionalDataFieldTemplate);

            $generateRootRepresentationResponse = $rootDataObject->generateRootRepresentation();
            dump($generateRootRepresentationResponse);

            // success response
            /*
            array(5) { 
                ["success"]=> bool(true) 
                ["result"]=> string(207) "00020101021126630009mu.taucas0112MSTDMXMVXXXX02110123412341203150000000000000505204922253034805802MU5916Bank of Lalaland6009Portlouis62620109MCQ4597890208525163150506MOM1230823Payment of network fees630492BC" 
                ["errors"]=> NULL 
                ["message"]=> NULL 
                ["issues"]=> array(0) { } 
            } 
            */

            // error response
            /*
            array(5) { 
                ["success"]=> bool(false) 
                ["result"]=> NULL 
                ["errors"]=> bool(true) 
                ["message"]=> NULL 
                ["issues"]=> array(1) { 
                    ["merchant_category_code"]=> array(1) { 
                        ["value"]=> array(1) { 
                            [0]=> string(33) "The value field must be 4 digits." 
                        } 
                    } 
                } 
            } 
            */
            
        } catch (\Exception $e) {
            report($e);
        }
    }
}

许可证

MIT许可证(MIT)

版权所有 © 2020

在此,特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的人免费使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向获得软件的人提供软件,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论源于合同、侵权或其他原因,是否与软件或软件的使用或其他交易有关。