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 不会被刷新