电子发票/数电发票 C# | 开票、验真、红冲一站式集成|云开票,开票系统

发票 C# 专为电子发票、数电发票(全电发票)场景设计,支持开票、红冲、版式文件下载等核心功能,快速对接税务平台API。

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


📖 核心功能

基础认证

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

发票开具

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

发票红冲

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

📊 支持的开票类型

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

📚 查看完整中文文档


demo:


using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json;

namespace FaPiaoApiClient
{
    class Program
    {
        // 配置信息 https://open.fa-piao.com 注册获取
        private static readonly string BaseUrl = "https://api.fa-piao.com";
        private static readonly string AppKey = "YOUR_APP_KEY"; // 替换为您的AppKey
        private static readonly string AppSecret = "YOUR_SECRET_KEY"; // 替换为您的密钥

        static async Task Main(string[] args)
        {
            try
            {
                // 准备请求头参数
                string method = "POST";
                string path = "/v5/enterprise/authorization";
                
                // 请求参数
                var formData = new Dictionary<string, string>
                {
                    { "nsrsbh", "915101820724315989" }
                };

                string randomString = GenerateRandomString(20);
                string timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
                
                // 计算签名
                string signature = CalculateSignature(method, path, randomString, timestamp);
                
                // 发送请求
                var result = await SendRequest(BaseUrl + path, formData, method, randomString, timestamp, signature);
                
                // 输出结果
                Console.WriteLine($"{method}: {BaseUrl}{path}");
                Console.WriteLine($"headers: {GetHeadersJson(randomString, timestamp, signature)}");
                Console.WriteLine($"form-data: {JsonSerializer.Serialize(formData)}");
                Console.WriteLine($"HTTP状态码: {result.StatusCode}");
                Console.WriteLine($"响应内容: {result.Content}");
                
                // 尝试解析JSON响应
                try
                {
                    var responseObj = JsonSerializer.Deserialize<object>(result.Content);
                    Console.WriteLine("解析后的响应:");
                    Console.WriteLine(JsonSerializer.Serialize(responseObj, new JsonSerializerOptions { WriteIndented = true }));
                }
                catch (JsonException)
                {
                    // 响应不是有效的JSON格式
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"发生错误: {ex.Message}");
            }
        }

        /// <summary>
        /// 生成随机字符串
        /// </summary>
        private static string GenerateRandomString(int length)
        {
            const string chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            var random = new Random();
            var result = new StringBuilder(length);
            
            for (int i = 0; i < length; i++)
            {
                result.Append(chars[random.Next(chars.Length)]);
            }
            
            return result.ToString();
        }

        /// <summary>
        /// 计算HMAC-SHA256签名
        /// </summary>
        private static string CalculateSignature(string method, string path, string randomString, string timestamp)
        {
            // 构建签名字符串,与服务器端保持一致
            string signContent = $"Method={method}&Path={path}&RandomString={randomString}&TimeStamp={timestamp}&AppKey={AppKey}";
            
            // 使用HMAC-SHA256计算签名,以secret作为密钥
            using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(AppSecret)))
            {
                byte[] hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(signContent));
                return BitConverter.ToString(hashBytes).Replace("-", "").ToUpper();
            }
        }

        /// <summary>
        /// 发送HTTP请求
        /// </summary>
        private static async Task<(int StatusCode, string Content)> SendRequest(
            string url, Dictionary<string, string> formData, string method, 
            string randomString, string timestamp, string signature)
        {
            using (var httpClient = new HttpClient())
            {
                // 设置请求头
                httpClient.DefaultRequestHeaders.Add("AppKey", AppKey);
                httpClient.DefaultRequestHeaders.Add("Sign", signature);
                httpClient.DefaultRequestHeaders.Add("TimeStamp", timestamp);
                httpClient.DefaultRequestHeaders.Add("RandomString", randomString);
                
                // 创建multipart/form-data内容
                using (var content = new MultipartFormDataContent())
                {
                    foreach (var item in formData)
                    {
                        content.Add(new StringContent(item.Value), item.Key);
                    }
                    
                    // 发送请求
                    var response = await httpClient.PostAsync(url, content);
                    
                    // 读取响应
                    string responseContent = await response.Content.ReadAsStringAsync();
                    
                    return ((int)response.StatusCode, responseContent);
                }
            }
        }

        /// <summary>
        /// 获取请求头JSON字符串
        /// </summary>
        private static string GetHeadersJson(string randomString, string timestamp, string signature)
        {
            var headers = new Dictionary<string, string>
            {
                { "AppKey", AppKey },
                { "Sign", signature },
                { "TimeStamp", timestamp },
                { "RandomString", randomString },
                { "Content-Type", "multipart/form-data" }
            };
            
            return JsonSerializer.Serialize(headers);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值