【2020.06】国税总局发票查验平台验证码最新获取方法

国税总局的发票查验平台近期JS更新频繁,之前写了一篇验证码识别的文章:https://blog.csdn.net/kerlomz/article/details/105974823
有不少人私信我,问我怎么获取验证码,没想到各位竟然栽在前一步,下面我给大家介绍一个比较简单的办法吧。

pypi仓库里有一个 https://pypi.org/project/invoice-captcha/ 项目
封装了请求的加密参数和返回的解密参数,具体使用方法请看下面的讲解:

首先搬运一下官网的示例代码:

  1. 调用示例:

    import requests
    from invoice_captcha.utils import get_captcha_params, parse_captcha_resp, kill_captcha_fast, ua
    
    CAPTCHA_URL = "https://fpcy.guangdong.chinatax.gov.cn/NWebQuery/yzmQuery"
    
    
    # 发票代码
    key1 = "011111111111"
    # 发票号码
    key2 = "11111111"
    
    # # 开票日期
    # key3 = "20200603"
    # # 校验码或发票金额
    # key4 = "000000"
    
    
    def fetch_captcha(invoice_code, invoice_no):
    
        sess = requests.Session()
    
        # 使用代理,需要自备代理
        # sess.proxies = proxy
        sess.headers = {"User-Agent": ua.random}
    
        # 获取验证码请求参数
        payload = get_captcha_params(
            invoice_code=invoice_code, invoice_no=invoice_no
        )
    
        # 通过官网获取验证码
        r = sess.get(CAPTCHA_URL, params=payload)
    
        # 验证码请求参数解密
        plain_dict = parse_captcha_resp(r)
    
        # 验证码请求返回明文
        # key1 图片base64
        # key4 验证码需要识别的颜色代码
        print("解密参数 --- ", plain_dict)
    
        # 调用识别测试接口
        captcha_text = kill_captcha_fast(
            plain_dict, 
          	# 默认API有使用次数限制,可联系作者QQ:27009583,测试独立接口
            # api="http://kerlomz-ac86u.asuscomm.com:19811/captcha/v1"
        )
    
        # 输出识别结果
        print("识别结果 --- ", captcha_text)
        
        
    if __name__ == '__main__':
        for i in range(10):
            fetch_captcha(key1, key2)
    

经过剖析,这个sdk分为两个部分,一个是用于获取验证码的参数生成函数get_captcha_params(),另一个是用于解析官网返回的加密报文的函数parse_captcha_resp(),笔者发现,请求参数和解析报文的函数共享了一个now_time变量,这意味这该项目不支持多线程并发,但用于一般的研究学习使用应该是足够了。kill_captcha_fast()对接了一个测试接口,这个接口可以变更,方便使用者自己修改。笔者后面将开辟一篇专门讲解JS的文章,敬请留意。

### 国税局发票查验API文档集成与使用方法 #### 一、概述 国税局提供的发票查验API旨在帮助企业或个人通过编程手段高效地验证发票的真实性。此API不仅支持多种类型的发票,如增值税专用发票、增值税普通发票等,还具备实时联网特性,能实现快速、批量及自动化的发票核验过程[^3]。 #### 二、准备工作 在正式调用国税局发票查验API之前,需完成如下准备事项: - **注册账号并获取密钥**:前往官方平台申请开发者账户,并按照指引获得相应的API Key。 - **环境配置**:确保开发环境中已安装必要的库文件,对于Python而言,可能需要用到`requests`库来发起HTTP请求;而对于Java,则可考虑采用Apache HttpClient或其他类似的网络通信组件。 #### 三、参数设置 当准备好以上条件后,在实际编码过程中需要注意传递给API的具体参数。一般情况下,这些参数至少应包括但不限于以下几个方面: - `fpdm`: 发票代码; - `fphm`: 发票号码; - `kprq`: 开票日期(格式为YYYYMMDD); - `jym`: 校验码/验证码最后六位数字; - `api_key`: 用户专属的API访问令牌。 具体示例如下所示: ```python import requests url = "https://invoice.chinatax.gov.cn/api/v1/invoice/check" headers = { 'Content-Type': 'application/json', } data = { "fpdm": "0123456789", "fphm": "12345678", "kprq": "20230101", "jym": "123456", "api_key": "<your_api_key>" } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() else: print(f"Error occurred: {response.text}") ``` 上述代码片段展示了如何利用Python向国税局发票查验API发送POST请求,并处理返回的结果数据。值得注意的是,URL地址应当依据实际情况调整至最新的官方接口路径上[^1]。 #### 四、错误处理机制 考虑到网络波动等因素可能导致API调用失败的情况发生,建议加入合理的异常捕获逻辑,以便及时发现潜在问题并对用户做出适当反馈。比如在网络连接超时时重试一定次数,或是针对不同状态码给出针对性提示信息等措施均有助于提升系统的稳定性和用户体验感。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值