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

2026-07-17
获取电子发票抬头| 微信小程序/微信公众号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表单
第三方查询接口 第三方平台账号、网络请求 无微信限制、支持模糊查询 依赖第三方服务、存在调用额度限制 后台管理系统、非微信环境业务
技术文档 · 微信发票抬头解决方案