如何在PHP中创建正确的扫描支付二维码

问题描述 投票:0回答:2

我正在开发自己的插件来处理 PDF 生成(发票、形式等)。我想包含 QR 码,如果用户在银行应用程序中扫描,它将为其设置付款数据(姓名、IBAN、变量符号、付款金额等)。

我使用 TCPDF 生成二维码,但二维码的内容需要设置为特定字符串(可能是带有支付信息的哈希数据)。

所以这让我想到了我的问题,有没有办法生成这个代码,该代码将以二维码的形式输出,以便客户可以打开他们的银行应用程序并扫描它以自动设置付款数据? 在WordPress 网站。

我对这个主题很陌生,所以我想知道这个东西是否可能。

// Create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    
// Set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Your Name');
$pdf->SetTitle('Scan and Pay QR Code Example');

// Add a page
$pdf->AddPage();

// Set QR code style
$style = array(
    'border' => 2,
    'vpadding' => 'auto',
    'hpadding' => 'auto',
    'fgcolor' => array(0,0,0),
    'bgcolor' => false, // No background color
    'module_width' => 1, // Width of a single module in points
    'module_height' => 1 // Height of a single module in points
);

// Define the content of the QR code that includes a variable symbol and an amount
$variableSymbol = "1111";
$amount = "1 EUR";
$merchantCode = "123456789012";
$transactionCurrency = "978"; // EUR's numeric code

// This is the string that should be formatted in a way that bank apps can read it. HERE IS THE PROBLEM
$codeContents = "TXN:".$variableSymbol."-AMT:".$amount."-MCC:".$merchantCode."-CUR:".$transactionCurrency;

// Print a QR code
$pdf->write2DBarcode($codeContents, 'QRCODE,H', 20, 20, 50, 50, $style, 'N');

// Close and output PDF document
$pdf->Output('scan_and_pay_qr.pdf', 'D');

我尝试根据一些在线文档(SEPA、EMVCo)包含数据,但未能成功。它在我的银行应用程序中显示无效的二维码数据。

php wordpress qr-code payment tcpdf
2个回答
0
投票

我建议您仔细阅读EPC指南:https://www.european paymentscouncil.eu/sites/default/files/kb/file/2022-09/EPC069-12%20v3.0%20Quick%20Response%20Code% 20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20an%20SCT_0.pdf

然后这是一个使用 TCPDF 的简单工作示例(阅读 EPC 文档以了解结构):

<?php
require_once('tcpdf_include.php');
$pdf = new TCPDF();
$pdf->AddPage();

$amount = "10.00";
$iban = //*** your iban ***;
$bic = //*** your bic ***
$name = //*** your name***;
$ref = "the vegan barbecue 2015";

$qr_content = array();
$qr_content[] = "BCD";
$qr_content[] = "002";
$qr_content[] = "1";
$qr_content[] = "SCT";
$qr_content[] = $bic;
$qr_content[] = $name;
$qr_content[] = $iban;
$qr_content[] = "EUR".$amount;
$qr_content[] = "";
$qr_content[] = "";
$qr_content[] = $ref;
$qr_content[] = "";

$qr_string = implode(PHP_EOL, $qr_content);
$pdf->write2DBarcode($qr_string, 'QRCODE,H', 10, 10, 40, 40, null, 'N');

$pdf->Output('example_qrcode.pdf', 'I');

?>

请注意,应该对值的长度进行一些检查。


-1
投票

前段时间我开发了 QRCodeFormatter 库来解决同样的问题,所以你可能想尝试一下。请注意,虽然我的解决方案非常适合我,但我仅使用波兰市场上运营的银行应用程序对其进行了测试。所以你的里程可能要小心。这些文档是波兰语的,但如果需要,任何自动翻译器都可以完成这项工作,因为无论如何都没有太多可读的内容。

最后,如果我链接的库对您没有太大帮助,请检查您的银行提供的应用程序是否无法为您生成二维码。如果支持,那么您就回家了 -> 只需使用自己的数据生成代码,然后解码 QRCode 并查看其中有什么。

PS:考虑不要使用结束

?>
标签,除非确实需要(通常不是,除非你是意大利面条编码员)。

© www.soinside.com 2019 - 2024. All rights reserved.