18
电子发票报销方接口文档(beta1.0) 微信发票团队 2016/11/27

电子发票报销方接口文档(beta1 - QQ...1、 接入指引 目前报销发票面向认证的企业号、认证的公众号开放内测,具有微信电子发票报销意愿的企

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 电子发票报销方接口文档(beta1.0)

    微信发票团队

    2016/11/27

  • 更新日志

    更新日期 说明

    2016/11/15 1. 支持报销方拉起用户发票列表

    2. 支持报销方进行发票状态锁定、发票状态变更

    2016/11/27 1. 优化了一些描述

    2. 修复了一些描述错误

    [注意事项]

    开发者在接入前须先阅读【微信公众平台开发文档:mp.weixin.qq.com/wiki】,

    以熟悉基本的技术术语和开发规范。

  • 目录

    电子发票报销方接口文档(beta1.0) .................................................................................. 1

    1、 接入指引 ....................................................................................................................... 4

    2、电子发票流程图 .............................................................................................................. 5

    3、报销方拉取发票 .............................................................................................................. 6

    3.1 JS-SDK ChooseInvoice 接口拉取 .......................................................................... 6

    3.2 APP-SDK 发票拉取接口 ......................................................................................... 8

    4、报销方查询发票 .............................................................................................................. 9

    5、 报销方更新发票状态 ................................................................................................... 14

    6、备注 .............................................................................................................................. 15

    6.1、错误码 ................................................................................................................ 15

    6.2、发票报销状态 ..................................................................................................... 16

    6.3、发票签名方法 ..................................................................................................... 16

    6.4、Api_ticket 获取 ................................................................................................... 17

  • 1、 接入指引

    目前报销发票面向认证的企业号、认证的公众号开放内测,具有微信电子发票报销意愿的企

    业和第三方可以发送以下申请到 [email protected],请求开放相关权限

    商户信息

    公司名称 业务描述 公司地址 报销接入形式 联系电话 是否报销平台 接口人

    企业号/公众号

    /app

    填写是或否 若 没 有

    则填无

    接入信息

    报销方 appid 测试 appid

    mailto:具有微信电子发票报销意愿的企业和第三方可以发送以下申请到[email protected]:具有微信电子发票报销意愿的企业和第三方可以发送以下申请到[email protected]

  • 2、电子发票流程图

    电子发票流程涉及用户、商户、报销方、发票平台和公众平台五个角色。

    其中报销方需要从用户侧获得发票后进行报销的关键作用。在这个过程中报销方需要严格执

    行发票的锁定与报销动作,以保证发票不被重复报销。

    发票平台报销方商户 公众平台用户

    用户到商户开发票

    获取授权链接

    返回授权链接

    返回授权页面

    用户打开授权页,点击授权

    推送用户授权消息

    商户到开票平台开票

    开票平台将用户发票插入到卡包

    将发票插入到用户的卡包,并且推送服务通知

    用户到报销方报销

    报销方调用发票jsapi

    返回发票列表

    用户选择发票

    返回发票cardid和encrypted_code

    报销方获取发票信息

    返回发票信息

    报销方去开票平台获取发票pdf

    开票平台去公众平台验token

    返回验token结果

    返回发票pdf

    报销方去公众平台锁定或核销发票

    核销用户发票

    推送发票状态更新消息

    如果开票平台发票状态有更新,

    需要在公众平台同步发票状态

    用户授权开发票

    商户开发票

    用户报销

  • 3、报销方拉取发票

    3.1 JS-SDK ChooseInvoice 接口拉取

    使用说明

    该接口功能为网页拉起卡券列表,须遵循 JS-SDK 的调用方法,请在开发前务必研究

    JS-SDK 接口文档:

    http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_

    CN

    http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CNhttp://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN

  • 请求参数

    参数 必填 说明

    timestamp 是 时间戳

    nonceStr 是 随机字符串

    signType 是 签名类型

    cardSign 是 发票签名,签名生成方式请见备注 3

    代码示例

    wx.config({

    beta: true,

    debug: false,

    appId: "wx00000000000000",

    timestamp: 1489030247,

    nonceStr: "(9J4YRV[#@",

    signature: "f027317f8910000000000000000000",

    jsApiList: ['chooseInvoice']

    });

    wx.ready(function () {

    wx.invoke('chooseInvoice', {

    'timestamp': 1489030247, //卡券签名时间戳

    'nonceStr': "p(6N&7WOAF", //卡券签名随机串

    'signType': 'SHA1', //签名方式,默认'SHA1'

    'cardSign': "a72043eed36c74300000000000000000" //卡券签名

    }, function(res) {

    alert(JSON.stringify(res));

    }

    });

    });

  • 返回结果

    返回值 说明

    err_msg choose_invoice:ok 选取发票成功

    err_msg choose_invoice:fail 选取发票失败

    err_msg

    choose_invoice:cancel

    选取发票取消

    choose_invoice_info 用户选中的发票列表

    choose_invoice_info 的元素的结构如下

    { card_id = @"", encrypt_code = @"" app_id=@"" }

    3.2 APP-SDK 发票拉取接口

    使用说明

    该接口功能为网页拉起卡券列表,须遵循 JS-SDK 的调用方法,请在开发前务必检查自己

    是否满足以下条件:

    1) 获得一个已认证的微信开放平台账号;

    2) 创建一个应用并通过审核;

  • 3) 阅读微信 SDK 使用的基本方式,详情见:微信开放平台资源中心

    Android SDK

    参考压缩包内的 libmmsdk.rar 文件,使用时调用 WXChooseCard 类,并传入 CardType 为

    “INVOICE”

    签名方法参考 JS-SDK

    iOS SDK

    参考压缩包内的 OpenSDK1.7.4 文件,使用时调用 WXChooseInvoice 类.

    签名方法参考 JS-SDK

    4、报销方查询发票

    接口说明

    报销方在上一步获取到发票相关参数后,可以通过该接口查询发票的详细信息。

    https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN

  • 请求说明

    URL:

    https://api.weixin.qq.com/card/invoice/reimburse/getinvoiceinfo?access_token={access_t

    oken}

    请求方法:POST

    请求参数

    数据格式:JSON

    参数 类型 是否必填 描述

    card_id String 是 发票 id

    encrypt_code String 是 加密 code

    返回参数

    数据格式:JSON

    参数 类型 是否必填 描述

    errcode Int 是 错误码

    errmsg String 是 错误信息

    当错误码为 0 是,有以下信息:

    参数 类型 是否必填 描述

    card_id String 是 发票 id

    begin_time Int 是 发票的有效期起始时间

    end_time Int 是 发票的有效期截止时间

    openid String 是 用户标识

    type String 是 发票的类型,如广东增值税普通发票

  • payee String 是 发票的收款方

    detail String 是 发票详情

    user_info Object 是 发票的用户信息

    user_info 包含以下信息:

    参数 类型 是否必填 描述

    fee Int 是 发票加税合计金额,以分为单位

    title String 是 发票的抬头

    billing_time Int 是 开票时间,为十位时间戳(utc+8)

    billing_no String 是 发票代码

    billing_code String 是 发票号码

    info List 否 商品信息结构,见下方说明

    fee_without_tax Int 是 不含税金额,以分为单位

    tax Int 是 税额,以分为单位

    detail String 是 发票详情,一般描述的是发票的使用说明

    pdf_url String 是 这张发票对应的 PDF_URL

    reimburse_status String 是 发票报销状态,见备注 1

    info 为 Object 列表,每个 Object 包含以下信息:

    参数 类型 是否必填 描述

    name String 是 项目(商品)名称

    num Int 是 项目数量

    unit String 是 项目单位

    price Int 是 单价,以分为单位

  • 请求示例

    请求:

    {

    "card_id": "pjZ8Yt5crPbAouhFqFf6JFgZv4Lc",

    "encrypt_code": "fbdt/fWy1VitQwhbKtSjNeR3BJyfpeJXfZjjGsdCXiM="

    }

    返回:

    {

    "errcode": 0,

    "errmsg": "ok",

    "card_id": "pjZ8Yt5crPbAouhFqFf6JFgZv4Lc",

    "begin_time": 1476068114,

    "end_time": 1476168114,

    "user_card_status": "EXPIRE",

    "openid": "obLatjnG4vRXJvSO8p914rSK8-Vo",

    "type": "广东省增值税普通发票",

    "payee": "测试-收款方",

    "detail": "测试-detail",

    "user_info": {

    "fee": 1100,

    "title": "灌哥发票",

    "billing_time": 1468322401,

  • "billing_no": "hello",

    "billing_code": "world",

    "info": [

    {

    "name": "绿巨人",

    "num": 10,

    "unit": "吨",

    "fee": 5,

    "price": 4

    }

    ],

    "accept": true,

    "fee_without_tax": 2345,

    "tax": 123,

    "detail": "项目",

    "pdf_url": "pdf_url",

    " reimburse_status": "INVOICE_REIMBURSE_INIT",

    }

    }

  • 5、 报销方更新发票状态

    接口说明

    发票平台可以通过该接口对某一张发票进行锁定、解锁和报销操作,注意,报销状态为不可

    逆状态,请开发者慎重调用。

    请求说明

    URL:

    https://api.weixin.qq.com/card/invoice/reimburse/updateinvoicestatus?access_token={acc

    ess_token}

    请求方法:POST

    请求参数

    数据格式:JSON

    参数 类型 是否必填 描述

    card_id String 是 发票 id

    encrypt_code String 是 加密 code

    reimburse_status String 是 发票报销状态,见备注 1

    返回参数

    数据格式:JSON

    参数 类型 是否必填 描述

    errcode Int 是 错误码

    errmsg String 是 错误信息

    参数示例

  • 请求:

    {

    "card_id": "pjZ8Yt5crPbAouhFqFf6JFgZv4Lc",

    "encrypt_code": "fbdt/fWy1VitQwhbKtSjNeR3BJyfpeJXfZjjGsdCXiM=",

    "reimburse_status": "INVOICE_REIMBURSE_INIT"

    }

    返回:

    {

    "errcode": 0,

    "errmsg": "ok"

    }

    注意事项:

    1.报销方须保证在报销、锁定、解锁后及时将状态同步至微信侧,保证用户发票可以正常使

    6、备注

    6.1、错误码

    错误码 备注

    0 成功

  • 72015 没有操作发票的权限

    72017 发票抬头不一致

    72023 发票已被其他公众号锁定

    72024 发票状态错误

    6.2、发票报销状态

    状态 描述

    INVOICE_REIMBURSE_INIT 发票初始状态,未锁定

    INVOICE_REIMBURSE_LOCK 发票已锁定

    INVOICE_REIMBURSE_CLOSURE 发票已核销

    6.3、发票签名方法

    参与签名参数

    参数 描述

    cardType 填入 INVOICE

    timestamp 拉起发票列表时使用的时间戳(utc+8)

    appid 调用该接口的 appid

    nonceStr 随机字符串

    api_ticket 通过 acess_token 换取的临时票据,详情请

    下方

  • 签名方法

    将 api_ticket、appid、timestamp、nonceStr、cardType 的 value 值进行字符串的字典

    序排序。再将所有参数字符串拼接成一个字符串进行 sha1 加密,得到 cardSign。

    例如:api_ticket=aaa、appid=bbb、timestamp=ddd、nonceStr=ccc、cardType=eee,

    那么先拼成字符串 aaabbbcccdddeee,再将此字符串进行 sha1 加密,得到 cardSign。

    6.4、Api_ticket 获取

    http 请求方式: GET

    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card

    返回数据示例:

    {

    "errcode":0,

    "errmsg":"ok",

    "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKdvsdshFKA",

    "expires_in":7200

    }

  • 状态 描述

    errcode 填入 INVOICE

    errmsg 拉起列表时使用的时间戳(utc+8)

    ticket 发票签名临时票据

    expires_in 有效期,以秒为单位。在有效期内重复请求

    ticket 不会被刷新