接口文档
目录
1. 开发准备
2. 时序图
3. 拉起发票列表(微信内)
3.1 接口说明
3.2 请求方式
3.3 返回结果
3.4 示例代码
4. 拉起发票列表(外部App)
4.1 接口说明
4.2 请求方式
4.3 返回结果
5 查询发票信息并获取PDF文档
5.1 接口说明
5.2 请求方式
5.3 返回结果
6 备注
6.1 错误码
6.2 发票状态
6.3 获取api_ticket
6.3.1 请求方式
6.3.2 返回结果
6.3.3 示例代码
6.4 发票签名方法
# 1. 开发准备
在开始开发前,请确认已提前做好以下准备工作:
(1)拥有微信服务号,并且已完成认证;
(2)拥有可以联网的打印机;
(3)拥有云端后台,可以对打印机发出指令。
# 2. 时序图
# 3. 拉起发票列表(微信内)
# 3.1 接口说明
该接口功能为在微信内拉起发票卡券列表(如下图所示),用户勾选需要提交打印的发票后,开发者获得所选发票的标识信息。
本接口的调用须遵循JS-SDK的调用方法,请在开发前阅读JS-SDK说明文档以熟悉开发术语和基本接口的调用。
# 3.2 请求方式
参考示例代码,传入下表中的参数即可成功拉起发票列表页。
# 3.3 返回结果
用户点击确认或取消后,将按下表所列字段格式及含义返回结果。
choose_invoice_info的对象结构如下
{ card_id = @"", encrypt_code = @"" app_id=@"" }
各字段含义如下:
获得card_id和encrypt_code后,开发者可以按照 查询发票信息并获取PDF文档 一节的方法,获取每张发票的结构化信息及PDF文件。
# 3.4 示例代码
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));
}
});
});
# 4. 拉起发票列表(外部App)
# 4.1 接口说明
微信也支持外部App拉起发票列表的接口。与微信内拉起发票列表接口相似,在用户勾选并点击确认后,可以获得发票的标识数据。
该接口须遵循JS-SDK的调用方法,并且必须满足一定条件才能调用。请在开发前检查自己是否已满足以下条件:
1 )获得一个已认证的微信开放平台账号;
2 )在微信开放平台上创建一个应用并提交应用通过审核。未注册应用的开发者可在开发者应用登记页面进行登记;
3 )已下载微信电子发票报销SDK,iOS及Android下载地址见电子发票文档资源下载部分;
4 )通读 微信开放平台资源中心中关于SDK使用的基本方法,并正确导入到自身的应用中。
# 4.2 请求方式
iOS 应用
参考压缩包内的OpenSDK1.7.7文件,使用时调用WXChooseInvoice类。其中需要签名的部分,参考JS-SDK的调用方式。
Android 应用
参考压缩包内,进入jar文件,使用时调用WXChooseCard类,并传入CardType为“INVOICE”。其中需要签名的部分,参考JS-SDK的调用方式。
# 4.3 返回结果
返回结果请与微信内拉起发票列表的返回结果相同,参见3.3。
# 5 查询发票信息并获取PDF文档
# 5.1 接口说明
报销方在上一步获得用户选择提交的电子发票标识参数后,可以通过该接口查询电子发票的结构化信息,并获取发票PDF文件。
# 5.2 请求方式
请求URL:https://api.weixin.qq.com/card/invoice/reimburse/getinvoiceinfo?access_token={access_token}
请求方法:POST
请求参数:
请求参数使用JSON格式,参数清单如下
# 5.3 返回结果
数据格式:JSON
当错误码为0时,有以下信息:
user_info包含以下信息:
info为发票项目明细信息。数据格式表现为Object列表,每个Object包含以下信息:
# 6 备注
# 6.1 错误码
在微信电子发票报销方案中,涉及的错误码及错误码含义如下:
# 6.2 发票状态
通过接口获取发票信息时,涉及的发票状态码及状态含义如下:
# 6.3 获取api_ticket
<span id = "21>
# 6.3.1 请求方式
请求URL:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card
请求方法:GET
# 6.3.2 返回结果
返回格式:JSON
# 6.3.3 示例代码
返回:
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKdvsdshFKA",
"expires_in":7200
}
# 6.4 发票签名方法
在应用JS-SDK和App SDK时需要进行签名,以便校验数据传输过程未被篡改,签名实现方法如下:
参与签名参数
签名方法
将 api_ticket、appid、timestamp、nonceStr、cardType的value值进行字符串的字典序排序。再将所有参数字符串拼接成一个字符串进行sha1加密,得到cardSign。
例如:api_ticket=aaa、appid=aab、timestamp=abc、nonceStr=bbc、cardType=cde,那么先拼成字符串aaaaababcbbccde,再将此字符串进行sha1加密,得到cardSign。