php生成印度收款码

<?php

namespace App\Helpers\QrcodeBank;

use App\Helpers\Helpers;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\RoundBlockSizeMode;
use Endroid\QrCode\Writer\PngWriter;

class IndiaBankQrcodeGenerator extends QrcodeGenerator
{
    public function generate(array $params): ?string
    {
        try {

            // 生成基本数据
            $data = $this->generateBaseData($params);

            // 创建二维码对象
            $qrCode = $this->createQrCode($data);

            // 写入二维码并获取数据URI
            $writer = new PngWriter;

            return $writer->write($qrCode)->getDataUri();
        } catch (\Exception $e) {
            error_log('Failed to generate QR code: '.$e->getMessage());

            return null;
        }

    }

    /**
     * 生成基本数据
     *
     * @param  array  $params  包含Momo支付信息的数组
     * @return string 生成的基本数据字符串
     */
    private function generateBaseData(array $params): string
    {
        $params['amount'] = Helpers::unformatNumberFlexible($params['amount']);

        return sprintf('upi://pay?pa=%s&pn=%s&mc=%s&tid=%s&tr=%s&tn=%s&am=%s&cu=%s&url=%s&qrMedium=%s&mode=%s&purpose=%s&sign=%s',
            $params['payee_vpa'],
            $params['payee_name'] ?? '',
            $params['merchant_code'] ?? '',
            $params['transaction_id'] ?? '',
            $params['transaction_ref_id'] ?? '',
            $params['note'] ?? '',
            $params['amount'],
            $params['currency'] ?? 'INR',
            $params['url'] ?? '',
            $params['qr_medium'] ?? '',
            $params['mode'] ?? '',
            $params['purpose_code'] ?? '',
            $params['signature'] ?? '',
        );
    }

    /**
     * 创建二维码对象
     *
     * @param  string  $data  要编码到二维码中的数据
     * @return QrCode 二维码对象
     */
    private function createQrCode(string $data): QrCode
    {
        return new QrCode(
            data: $data,
            encoding: new Encoding('UTF-8'),
            errorCorrectionLevel: ErrorCorrectionLevel::High,
            size: 300,
            margin: 0,
            roundBlockSizeMode: RoundBlockSizeMode::Margin,
            foregroundColor: new Color(0, 0, 0),
            backgroundColor: new Color(255, 255, 255)
        );

    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容