获取电子发票抬头| 微信小程序/微信公众号H5/第三方接口

2026-06-28
获取电子发票抬头| 微信小程序/微信公众号H5/第三方接口
获取发票抬头| 微信小程序/微信公众号H5/第三方接口

微信生态获取发票抬头全方案(小程序 / 公众号 H5 / 第三方查询)

本文整理微信生态下三种主流发票抬头获取方案,包含原生API、JS-SDK对接、第三方接口调用,附带完整代码、权限配置、跨平台适配及踩坑指南,适用于开票、报销、订单系统等业务场景。

📖 一、微信小程序获取发票抬头(原生 API)

接口名称:wx.chooseInvoiceTitle(Object object),微信小程序官方原生接口,用于快速调取用户已保存的发票抬头信息。

官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/invoice/wx.chooseInvoiceTitle.html

基础支持说明

  • 基础库要求:1.5.0 及以上,低版本小程序需做版本兼容处理
  • 调用方式:支持 Promise 风格调用
  • 插件支持:小程序插件使用需基础库 2.16.1 及以上
核心权限约束:调用该接口的小程序,必须关联已完成微信认证的公众号,否则接口直接调用失败。

接口返回字段说明

接口调用成功后,success 回调返回完整发票抬头信息:

  • type:抬头类型(0 = 单位,1 = 个人)
  • title:发票抬头名称
  • taxNumber:企业税号/统一社会信用代码
  • companyAddress:企业地址
  • telephone:联系电话
  • bankName:开户银行名称
  • bankAccount:银行账号

完整调用代码示例

wx.chooseInvoiceTitle({
  success: (res) => {
    console.log('获取发票抬头成功', res);
    // 业务逻辑:将返回字段填充至表单
    const invoiceInfo = {
      type: res.type,
      title: res.title,
      taxNumber: res.taxNumber,
      address: res.companyAddress,
      phone: res.telephone,
      bankName: res.bankName,
      bankAccount: res.bankAccount
    }
  },
  fail: (err) => {
    console.error('接口调用失败', err);
  },
  complete: () => {
    console.log('接口调用结束');
  }
});

🚀 二、微信公众号 H5 获取发票抬头(JS-SDK)

微信公众号网页无法直接调用原生接口,必须依托 微信 JS-SDK 完成签名授权、接口调用。同时 iOS / Android 设备 URL 识别规则不同,需做跨平台适配。

官方文档:https://developers.weixin.qq.com/doc/service/guide/product/weixin_invoice/Quick_issuing/Interface_Instructions.html

整体流程

引入JS-SDK库 → 后端生成签名 → 前端初始化配置 → 适配双端URL → 调用接口 → 解析返回数据

1. 引入微信 JS-SDK


<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

2. JS-SDK 初始化与权限配置

签名参数(appId、timestamp、nonceStr、signature)需由后端通过微信签名算法生成,前端不可伪造。

// 后端返回签名配置参数
const wxConfig = {
  appId: "公众号AppID",
  timestamp: "时间戳",
  nonceStr: "随机字符串",
  signature: "签名值"
};

// 初始化 JS-SDK
wx.config({
  beta: true,
  debug: false, // 生产环境关闭调试模式
  appId: wxConfig.appId,
  timestamp: wxConfig.timestamp,
  nonceStr: wxConfig.nonceStr,
  signature: wxConfig.signature,
  // 必须声明当前页面需要使用的接口
  jsApiList: ["chooseInvoiceTitle"]
});

// 配置验证成功回调
wx.ready(() => {
  console.log("JS-SDK 初始化完成,可调用接口");
});

// 配置验证失败回调
wx.error((err) => {
  console.error("JS-SDK 配置失败:", err);
});

3. 跨平台 URL 适配(关键避坑)

平台差异:iOS 仅识别页面首次加载入口URL;Android 识别当前动态URL,URL不一致会导致「签名无效」。
// Vue 路由守卫:全局存储页面首次入口URL
router.beforeEach((to, from, next) => {
  if (!window.entryUrl) {
    window.entryUrl = location.href.split('#')[0];
  }
  next();
});

// 根据设备类型选择签名URL
const userAgent = navigator.userAgent;
const isAndroid = userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1;
let signUrl = "";

if (isAndroid) {
  signUrl = location.href.split('#')[0];
} else {
  signUrl = window.entryUrl;
}
// 将 signUrl 传给后端生成签名

4. 调用接口并解析发票抬头数据

// JS-SDK 通过 invoke 调用发票抬头接口
wx.invoke('chooseInvoiceTitle', { scene: '1' }, function(res) {
  if (res.err_msg !== "chooseInvoiceTitle:ok") {
    console.log("用户取消选择或调用失败");
    return;
  }
  // 解析嵌套格式的发票数据
  const rawInfo = res.choose_invoice_title_info;
  const invoice = JSON.parse(rawInfo);

  // 字段映射
  const invoiceData = {
    title: invoice.title,
    taxNumber: invoice.taxNumber,
    companyAddress: invoice.companyAddress,
    telephone: invoice.telephone,
    bankName: invoice.bankName,
    bankAccount: invoice.bankAccount,
    titleType: invoice.type
  };
  console.log("最终发票抬头信息:", invoiceData);
});

常见问题汇总

  • invalid signature:签名错误,检查URL、签名算法、时间戳
  • 权限失效:公众号未认证、jsApiList 未声明接口
  • iOS 签名必败:入口URL未正确捕获

🔍 三、第三方接口智能查询发票抬头

适用于无微信生态环境、用户未保存发票抬头的场景,通过企业名称/税号模糊查询完整购方发票信息。

第三方平台:开放平台 https://open.fa-piao.com

文档地址 智能查询发票抬头

接口基础信息

  • 请求地址:POST /v5/enterprise/smartBuyer
  • 请求方式:POST
  • 必传参数:
    kpdwdm:销方统一社会信用代码(开票方税号)
    nsrmc:购方企业名称(支持关键字模糊查询)

接口成功返回示例

{
    "code": 200,
    "data": [
        {
            "ghdwdm": "9150010776594xxxx",
            "ghdwdzdh": "重庆市九龙坡区xxxx楼 02368679xxx",
            "ghdwmc": "重庆xxxx有限公司",
            "ghdwyhzh": "建设银行xxx分行 500010344000xxxx"
        }
    ],
    "msg": "成功",
    "total": 1
}

返回字段释义

  • ghdwdm:购方企业税号
  • ghdwmc:购方企业名称
  • ghdwdzdh:企业地址 + 联系电话
  • ghdwyhzh:开户银行 + 银行账号

📊 四、三种方案综合对比

实现方案 依赖环境 核心优点 存在不足 适用场景
小程序原生API 认证公众号 + 微信小程序 原生体验、调用速度快、无需额外服务 仅支持小程序端,权限约束严格 小程序商城、小程序开票/报销
公众号H5 JS-SDK 认证公众号 + JS-SDK签名服务 H5全端适配,复用微信保存数据 配置繁琐、需处理跨平台签名问题 公众号网页、移动端H5表单
第三方查询接口 第三方平台账号、网络请求 无微信限制、支持模糊查询 依赖第三方服务、存在调用额度限制 后台管理系统、非微信环境业务
技术文档 · 微信发票抬头解决方案