PHPackages                             tax/invoice - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. tax/invoice

ActiveLibrary[API Development](/categories/api)

tax/invoice
===========

发票SDK php 数电发票/电子发票/数电票/全电发票/开票

1.0.18(1mo ago)26311MITPHPPHP &gt;=7.0

Since May 8Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/fapiaoapi/invoice-sdk-php)[ Packagist](https://packagist.org/packages/tax/invoice)[ RSS](/packages/tax-invoice/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (10)Used By (0)

电子发票/数电发票 php SDK | 开票、验真、红冲一站式集成
=================================

[](#电子发票数电发票-php-sdk--开票验真红冲一站式集成)

[![Packagist Version](https://camo.githubusercontent.com/e20008fe70cba6cc30e378962ce1f23144e69a133dfd154e7c04e34f83166810/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7461782f696e766f696365)](https://packagist.org/packages/tax/invoice)[![License](https://camo.githubusercontent.com/a549a7a30bacba7bfceebdc207a8e86c3f2c02995a2527640dca30048fd2b64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d417061636865253230322e302d626c75652e737667)](https://github.com/fapiaoapi/invoice-sdk-php/blob/master/LICENSE)

**发票 php SDK** 专为电子发票、数电发票（全电发票）场景设计，支持**开票、红冲、版式文件下载**等核心功能，快速对接税务平台API。

**关键词**: 电子发票SDK,数电票php,开票接口,发票api,发票开具,发票红冲,全电发票集成

---

📖 核心功能
------

[](#-核心功能)

### 基础认证

[](#基础认证)

- ✅ **获取授权** - 快速接入税务平台身份认证
- ✅ **人脸二维码登录** - 支持数电发票平台扫码登录
- ✅ **认证状态查询** - 实时获取纳税人身份状态

### 发票开具

[](#发票开具)

- 🟦 **数电蓝票开具** - 支持增值税普通/专用电子发票
- 📄 **版式文件下载** - 自动获取销项发票PDF/OFD/XML文件

### 发票红冲

[](#发票红冲)

- 🔍 **红冲前蓝票查询** - 精确检索待红冲的电子发票
- 🛑 **红字信息表申请** - 生成红冲凭证
- 🔄 **负数发票开具** - 自动化红冲流程

---

🚀 快速安装
------

[](#-快速安装)

通过Composer安装:

```
composer require tax/invoice
```

[📦 查看Packagist最新版本](https://packagist.org/packages/tax/invoice)
---------------------------------------------------------------

[](#-查看packagist最新版本)

[📚 查看完整中文文档](https://fa-piao.com/doc.html?source=github) | [💡 更多示例代码](https://github.com/fapiaoapi/invoice-sdk-php/tree/master/examples)

---

🔍 为什么选择此SDK？
------------

[](#-为什么选择此sdk)

- **精准覆盖中国数电发票标准** - 严格遵循国家最新接口规范
- **开箱即用** - 无需处理XML/签名等底层细节，专注业务逻辑
- **企业级验证** - 已在生产环境处理超100万张电子发票

---

📊 支持的开票类型
---------

[](#-支持的开票类型)

发票类型状态数电发票（普通发票）✅ 支持数电发票（增值税专用发票）✅ 支持数电发票（铁路电子客票）✅ 支持数电发票（航空运输电子客票行程单）✅ 支持数电票（二手车销售统一发票）✅ 支持数电纸质发票（增值税专用发票）✅ 支持数电纸质发票（普通发票）✅ 支持数电纸质发票（机动车发票）✅ 支持数电纸质发票（二手车发票）✅ 支持---

🤝 贡献与支持
-------

[](#-贡献与支持)

- 提交Issue: [问题反馈](https://github.com/fapiaoapi/invoice-sdk-php/issues)
- 商务合作:

```
connect('127.0.0.1', 6379);
        self::$redis->auth('test123456');
    }

}

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    $scriptName = basename(__FILE__);
    echo "--------------------------------------------------\n";
    echo "❌ 错误：此脚本不支持在 Windows 命令行下直接运行。\n";
    echo "💡 提示：请使用 WSL 或 Git Bash 运行，或部署到 Linux 服务器。\n";
    echo "--------------------------------------------------\n";
    echo "❌ Error: This script is not supported on Windows CLI.\n";
    echo "💡 Hint: Please run via WSL/Git Bash or deploy to a Linux server.\n";
    echo "--------------------------------------------------\n\n";
    exit(1); // 退出脚本，返回错误码 1
}

Config::init();

try {

    // 一 获取授权token  可从缓存redis中获取Token
    getToken();
    /*
     * 前端模拟数电发票/电子发票开具 (蓝字发票)
     * @link https://fa-piao.com/fapiao.html?source=github
     *
     * json2php在线工具可以将前端json数据转换为php数组格式，方便后端开发调试
     * @link https://uutool.cn/json2php/
     */
    //二 开具蓝票
    $invoiceResponse = blueInvoice();
    if ($invoiceResponse['code'] == 200) {
        // 三 获取pdf/ofd/xml
        doloadPdfOfdXml($invoiceResponse['data']['Fphm'], $invoiceResponse['data']['Kprq']);
    }
} catch (InvoiceException $e) {
    switch ($e->getErrorCode()) {
        case 420:
            echo "登录(短信认证)". PHP_EOL;
            /*
             * 前端模拟短信认证弹窗
             * @link https://fa-piao.com/fapiao.html?action=sms&source=github
             */
             // 1. 发短信验证码
            /*
             * @link https://fa-piao.com/doc.html#api2?source=github
             */
            $loginResponse = Config::$client->loginDppt(Config::$nsrsbh, Config::$username, Config::$password, "");
            if ($loginResponse['code'] == 200) {
                echo "请输入验证码".PHP_EOL;
                echo "请在300秒内(".date('Y-m-d H:i:s', time() + 300)."前)输入验证码: ".PHP_EOL;
                $timeout = 300;
                $read = [STDIN];
                $write = $except = null;
                if (stream_select($read, $write, $except, $timeout)) {
                    $input = trim(fgets(STDIN));
                    echo "你输入了：$input\n";
                    // 2. 输入验证码
                    /*
                     * @link https://fa-piao.com/doc.html#api2?source=github
                     */
                    $loginResponse2 = Config::$client->loginDppt(Config::$nsrsbh, Config::$username, Config::$password, $input);
                    if ($loginResponse2['code'] == 200) {
                        echo $loginResponse2['data'] . PHP_EOL;
                        echo "短信验证成功". PHP_EOL;
                        echo "请再次调用blueInvoice". PHP_EOL;
                        $invoiceResponse = blueInvoice();
                        if ($invoiceResponse['code'] == 200) {
                            doloadPdfOfdXml($invoiceResponse['data']['Fphm'], $invoiceResponse['data']['Kprq']);
                        }
                    }
                } else {
                    echo "\n超时！300秒内未输入。\n";
                }

            }
            break;
        case 430:
            echo "人脸认证". PHP_EOL;
            /*
             * 前端模拟人脸认证弹窗
             * @link https://fa-piao.com/fapiao.html?action=face&source=github
             */
            // 1. 获取人脸二维码
            /*
             * @link https://fa-piao.com/doc.html#api3?source=github
             */
           $qrCodeResponse = Config::$client->getFaceImg(Config::$nsrsbh, Config::$username, "1");
           echo $qrCodeResponse['data']['ewmly'] == 'swj' ? "请使用电子税务局app扫码". PHP_EOL : "个人所得税app扫码". PHP_EOL;
           if (isset($qrCodeResponse['data']['ewm']) && strlen($qrCodeResponse['data']['ewm'])  7,                       // 版本 7，确保能容纳长字符串
//                   'outputType'   => QRCode::OUTPUT_IMAGE_PNG, // 【关键】输出类型为 PNG 图片
//                   'eccLevel'     => QRCode::ECC_L,           // 低纠错级别，节省空间
//                   'moduleLength' => 6,                       // 模块大小，影响图片尺寸
//                   'imageBase64'  => true,                    // 【关键】直接生成 Base64 格式的 Data URI
//               ])))->render($qrCodeResponse['data']['ewm']);
//               $qrCodeResponse['data']['ewm'] = $qrBase64;
//               // 输出生成的 Base64 字符串 返回给前端
//               // 格式为: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
           }
            echo "成功做完人脸认证,请输入数字 1". PHP_EOL;
            // 生成二维码图片 并输出到命令行
            echo (new QRCode(new QROptions([
                'version'      => 7,            // 【关键修改】将版本从默认值提高到 10（容量大幅提升）
                'eccLevel'     => QRCode::ECC_M, // 【关键修改】将纠错等级从 H 降到 M（释放空间）
                'outputType'   => QRCode::OUTPUT_STRING_TEXT
            ])))->render($qrCodeResponse['data']['ewm']);
            echo PHP_EOL;
            echo "300秒内(".date('Y-m-d H:i:s', time() + 300)."前)输入内容: ".PHP_EOL;
            $timeout = 300;
            $read = [STDIN];
            $write = $except = null;
            // 等待输入，最多 $timeout 秒
            if (stream_select($read, $write, $except, $timeout)) {
                $input = trim(fgets(STDIN));
                echo "你输入了：$input\n";
                // 2. 认证完成后获取人脸二维码认证状态
                /*
                 * @link https://fa-piao.com/doc.html#api4?source=github
                 */
                $rzid = $qrCodeResponse['data']['rzid'];
                $faceStatusResponse = Config::$client->getFaceState(Config::$nsrsbh, $rzid, Config::$username, "1");
                if ($faceStatusResponse['data'] != null) {
                    switch ($faceStatusResponse['data']['slzt']) {
                        case '1':
                            echo "人脸认证未认证".PHP_EOL;
                            break;
                        case '2':
                            echo "人脸认证成功".PHP_EOL;
                            echo "请再次调用blueInvoice". PHP_EOL;
                            $invoiceResponse = blueInvoice();
                            if ($invoiceResponse['code'] == 200) {
                                doloadPdfOfdXml($invoiceResponse['data']['Fphm'], $invoiceResponse['data']['Kprq']);
                            }
                            break;
                        case '3':
                            echo "人脸认证二维码过期".PHP_EOL;
                            break;
                    }
                }
            } else {
                echo "\n超时！300秒内未输入。\n";
            }
            break;
        case 401:
            //token过期 重新获取并缓存token
            echo $e->getErrorCode() . "授权失败:" . $e->getMessage() . PHP_EOL;
            echo "重新授权 获取token 缓存到redis";
            getToken(true);
            echo "请再次调用blueInvoice". PHP_EOL;
            $invoiceResponse = blueInvoice();
            if ($invoiceResponse['code'] == 200) {
                doloadPdfOfdXml($invoiceResponse['data']['Fphm'], $invoiceResponse['data']['Kprq']);
            }
            break;
        default:
            echo "参数:".json_encode($invoiceParams ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE).PHP_EOL;
            echo $e->getErrorCode() . " " . $e->getMessage() . PHP_EOL;
            break;
    }
} catch (\Exception $e) {
    echo "系统错误: " . $e->getMessage() . PHP_EOL;
}

function getToken($forceUpdate =false)
{
    $key = Config::$nsrsbh ."@".Config::$username. "@TOKEN";
    if ($forceUpdate) {
        /*
        * 获取授权Token文档
        * @link https://fa-piao.com/doc.html#api1?source=github
        */
        $authResult = Config::$client->getAuthorization(Config::$nsrsbh,Config::$type);
//        $authResult = Config::$client->getAuthorization(Config::$nsrsbh,Config::$type,Config::$username,Config::$password);
        if ($authResult['code'] == 200) {
            $token = $authResult['data']['token'];
            Config::$client->setToken($token);
            Config::$redis->set($key, $token, 3600 * 24 * 30); // 设置过期时间为30天
        }
    }else{
        $token = Config::$redis->get($key);
        if ($token) {
            Config::$client->setToken($token);
            echo "Token From Redis: " . PHP_EOL;
        } else {
            $authResult = Config::$client->getAuthorization(Config::$nsrsbh,Config::$type);
//        $authResult = Config::$client->getAuthorization(Config::$nsrsbh,Config::$type,Config::$username,Config::$password);
            if ($authResult['code'] == 200) {
                $token = $authResult['data']['token'];
                Config::$client->setToken($token);
                Config::$redis->set($key, $token, 3600 * 24 * 30); // 设置过期时间为30天
            }
        }
    }
}

function blueInvoice()
{
    /*
     * 开具数电发票文档
     * @link https://fa-piao.com/doc.html#api6?source=github
     *
     * 税额计算demo
     * @link https://github.com/fapiaoapi/invoice-sdk-php/blob/master/examples/tax_example.php
     */
    $invoiceParams = [
        "fpqqlsh" => Config::$appKey . time(),
        "username" => Config::$username,
        "kplx" =>0,
        "fplxdm" =>"82",
        "gfzrrbs" =>"N",
        "ghdwmc" =>"个人",
//        "ghdwsbh" =>"91370100MA23333333",
        "ghdwdzdh" =>"",
        "sfzsgmfdzdh" =>"",
        "ghdwyhzh" =>"",
        "sfzsgmfyhzh" =>"",
        "xhdwmc" =>Config::$title,
        "xhdwsbh" =>Config::$nsrsbh,
        "xhdwdzdh" =>Config::$xhdwdzdh,
        "sfzsxsfdzdh" =>"",
        "xhdwyhzh" =>Config::$xhdwyhzh,
        "sfzsxsfyhzh" =>"",
        "hjje" =>198.02,
        "hjse" =>1.98,
        "jshj" =>200,
        "fyxm" =>[
            [
                "fphxz" =>0,
                "hsbz" =>1,
                "spmc" =>"*软件维护服务*接口服务费",
                "spbm" =>"3040201030000000000",
                "je" =>200,
                "sl" =>0.01,
                "se" =>1.98
            ]
        ],
        "bz" =>"",
        "kpr" =>"张三"
    ];
    /*
     * 数电蓝票开具接口 文档
     * @link https://fa-piao.com/doc.html#api6?source=github
     */
    $invoiceResponse = Config::$client->blueTicket($invoiceParams);
    // if ($invoiceResponse['code'] == 200) {
    //     $fphm = $invoiceResponse['data']['Fphm'];
    //     $kprq = $invoiceResponse['data']['Kprq'];
    //     echo "发票号码: " . $fphm . PHP_EOL;
    //     echo "开票日期: " . $invoiceResponse['data']['Kprq'] . PHP_EOL;
    // }
    return $invoiceResponse;
}

function doloadPdfOfdXml($fphm, $kprq)
{
            /*
        * 获取销项数电版式文件 文档 PDF/OFD/XML
        * @link https://fa-piao.com/doc.html#api7?source=github
        */
        $pdfResponse = Config::$client->getPdfOfdXml(Config::$nsrsbh, $fphm, $kprq, '4', Config::$username);
        if ($pdfResponse['code'] == 200) {
            echo "发票下载成功".PHP_EOL;
            echo json_encode($pdfResponse['data']) . PHP_EOL;
        }

}

```

[发票税额计算demo](examples/tax_example.php "发票税额计算") | [发票红冲demo](examples/red_invoice_example.php "发票红冲")

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance91

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~41 days

Recently: every ~3 days

Total

9

Last Release

44d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0d29f4d483baf3c6c6ad4b20fe818a9f9ff92f40b175d3cd9c6b0db9efeea2a0?d=identicon)[fapiaoapi](/maintainers/fapiaoapi)

---

Top Contributors

[![fapiaoapi](https://avatars.githubusercontent.com/u/184117649?v=4)](https://github.com/fapiaoapi "fapiaoapi (1 commits)")

---

Tags

apifapiaoinvoicesdksdk-php

### Embed Badge

![Health badge](/badges/tax-invoice/health.svg)

```
[![Health](https://phpackages.com/badges/tax-invoice/health.svg)](https://phpackages.com/packages/tax-invoice)
```

###  Alternatives

[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[convertkit/convertkitapi

Kit PHP SDK for the Kit API

2167.1k1](/packages/convertkit-convertkitapi)[mapado/rest-client-sdk

Rest Client SDK for hydra API

1125.9k2](/packages/mapado-rest-client-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
