1. 接口信息
1.1. 调用地址
https://fapiao.glority.cn/v1/item/get_item_info
1.2. 请求方式
GET/POST
1.3. 返回类型
JSON
2. 请求参数
名称 |
变量名 |
必填 |
类型 |
示例值 |
描述 |
Key |
app_key |
true |
String(32) |
c5ed72329fece2fe0010a437505b01cb |
分配的key |
令牌 |
token |
true |
String(32) |
7007bd1257dce8d47489166a7c77a926 |
授权令牌 |
时间戳 |
timestamp |
true |
String(32) |
1522374165 |
timestamp 为January 1 1970 00:00:00 GMT 到现在的秒数 |
图片链接 |
image_url |
false |
String |
http://t.cn/EbhjOOq |
图片链接地址 |
图片文件 |
image_file |
false |
Binary |
|
图片文件或Ofd文件 |
图片Base64数据 |
image_data |
false |
String |
|
图片Base64数据 |
2.1. 请求说明
- 支持的文件类型: jpg, jpeg, png, pdf, OFD, XML. 文件最大支持8M.
- token 的值计算方式为:
md5($appkey+$timestamp+$appSecret)
token=md5("c5ed72329fece2fe0010a437505b01cb+1522374165+5c9597f3c8245907ea71a89d9d39d08e")=7007bd1257dce8d47489166a7c77a926
- API请求示例:
https://fapiao.glority.cn/v1/item/get_item_info?app_key=c5ed72329fece2fe0010a437505b01cb×tamp=1522374165&token=7007bd1257dce8d47489166a7c77a926&image_url=http://t.cn/EbhjOOq
- 生成token时,字符串连接中的“+”是必需的,缺少这个符号会无法验证通过验证
3. 返回值
3.1. 正确返回参数
名称 |
变量名 |
必填 |
类型 |
示例值 |
描述 |
返回状态码 |
result |
true |
int |
0或1 |
请求状态. 1:成功, 0:失败 |
回复 |
response |
true |
json |
|
|
3.2. 正确返回样例
{
'result': 1, // 请求状态. 1:成功, 0:异常
'response': {
'data': {
'version': '4.8_20180226',
'result': 1, //识别结果状态 固定1
'timestamp': 1092098766,
'message': 'success',
'id': 'a744aa6929b97355430ab6b5ee831854',//识别结果标识id,用于结果反馈
'sha1': '00a09af73198ab3ea81a6b58ba6a1f5879f47c63',//识别图片唯一标识
'time_cost': '1000',//识别花费的时长,单位毫秒
'identify_results': [
{
'type': '10101', -- 发票类型
'orientation': 90, -- 发票顺时针旋转方向
'image_size': [1024,768], -- 图片分辨率
'page': 0, -- 页码
'region': [100,100,200,200], // 单张发票区域: 左上点 和 右下点[x1, y1, x2, y2]
'details': { // 发票识别的具体信息, 不同发票类型会不一样
//增值税(专用/普通/电子专用)发票
'code': '6300161320', -- 印刷发票代码
'number': '15064112', -- 印刷发票号码
'code_confirm': '6300161320', -- 机打发票代码
'number_confirm': '15064112', -- 机打发票号码
'date': '2017年03月28日', -- 开票日期
'pretax_amount':'2648.54', --税前金额合计
'total': '3098.79', -- 价税合计(小写)
"total_cn":"壹佰圆整", --价税合计(大写)
'tax':'450.25', --税额合计
'check_code': '52657910788452871589' -- 校验码
'machine_code': '499924850051', -- 机器编号
'seller': 'XXXXXX有限公司', -- 销售方名称
'seller_tax_id': '15260000000000000G', -- 销售方纳税人识别号
'seller_addr_tel':'XX市XX区XX街道XX号 1234567890', --销售方地址、电话
'seller_bank_account':'1234567890', --销售方开户行及账号
'buyer':'XXXXXX有限公司', --购买方名称
'buyer_tax_id': '11684616000000000D', -- 购买方纳税人识别号
'buyer_bank_account':'12345678910', --购买方开户行及账号
'buyer_addr_tel':'XX市XX区XX街道XX号 1234567890', --购买方地址、电话
'company_seal': '1', -- 是否有公司印章(0: 没有; 1: 有)
'company_seal_mark':'1', --是否有销售方(章)标记(0: 没有; 1: 有)
'form_type': '第二联', -- 发票是第几联
'form_name': '发票联', -- 发票联次
'kind': '餐饮', -- 发票消费类型
'ciphertext':'<42/93+*/+2*+81*851<9,940-<9*>5+2-91,<1+>7*<81>7/8*140,50<\/<62-<1491+6+9', --密码区(四行密码,每行以逗号隔开)
'travel_tax': '65.50', -- 车船税
'receiptor': 'xxx', -- 收款人
'reviewer': 'xxx', -- 复核
'issuer': 'xxx', -- 开票人
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'service_name': '餐饮服务', -- 服务类型
'remark': '账期:201702, 号码:185750654', --备注
'item_names':'*餐饮服务*餐饮服务,*酒*白酒', --品名(每个以逗号隔开)
'agent_mark': '1', -- 是否代开
'acquisition_mark': '1', -- 是否收购
'block_chain': '1', -- 区块链标记
'electronic_mark': '1', --是否为电子增票
'transit_mark':'1', --通行费标志(1 通行费 2 无“通行费”字样,通行费明细)
'oil_mark': '1', -- 成品油标志
'vehicle_mark': '1', -- 机动车标志
'title':'XX省增值税XX发票' --标题
'electronic_number':'22312000000000338666', --全电发票号码(当存在该字段时移除 ciphertext)
'stamp_info':'' --销售方(章)
'producer_stamp':'' --监制章
'area':'ZHE_JIANG' --地区 支持省市: GUANG_DONG,ZHE_JIANG,SHEN_ZHEN,YUN_NAN,BEI_JING
'stamp_color': '1' --章颜色 1:红章 0:非红章
'deduction':'' --差额征税
'items':[
{
"name": "*保险服务*保费", --货物或应税劳务、服务名称
"specification": "1", --规格型号
"unit": "单", --单位
"quantity": "1", --数量
"price": "1066.04", --单价
"total": "1066.04", --金额
"tax_rate": "6%", --税率
"tax": "63.96" --税额
}
]
//增值税电子普通发票
'code': '6300161320', -- 发票代码
'number':'15064112', --发票号码
'date': '2017年03月28日', -- 开票日期
'pretax_amount':'2648.54', --税前金额合计
'total': '3098.79', -- 价税合计(小写)
"total_cn":"壹佰圆整", --价税合计(大写)
'tax':'450.25', --税额合计
'check_code': '52657910788452871589' -- 校验码
'machine_code': '499924850051', -- 机器编号
'seller': 'XXXXXX有限公司', -- 销售方名称
'seller_tax_id': '15260000000000000G', -- 销售方纳税人识别号
'seller_addr_tel':'XX市XX区XX街道XX号 1234567890', --销售方地址、电话
'seller_bank_account':'1234567890', --销售方开户行及账号
'buyer':'XXXXXX有限公司', --购买方名称
'buyer_tax_id': '11684616000000000D', -- 购买方纳税人识别号
'buyer_bank_account':'12345678910', --购买方开户行及账号
'buyer_addr_tel':'XX市XX区XX街道XX号 1234567890', --购买方地址、电话
'company_seal': '1', -- 是否有公司印章(0: 没有; 1: 有)
'company_seal_mark':'1', --是否有销售方(章)标记(0: 没有; 1: 有)
'kind': '餐饮', -- 发票消费类型
'ciphertext':'<42/93+*/+2*+81*851<9940-<9*>5+2-91<1+>7*<81>7/8*14050<\/<62-<1491+6+9', --密码区(四行密码,每行以逗号隔开)
'travel_tax': '65.50', -- 车船税
'receiptor': 'xxx', -- 收款人
'reviewer': 'xxx', -- 复核
'issuer': 'xxx', -- 开票人
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'service_name': '餐饮服务', -- 服务类型
'remark': '账期:201702, 号码:185750654', --备注
'item_names':'*餐饮服务*餐饮服务*酒*白酒', --品名(每个以逗号隔开)
'agent_mark': '1', -- 是否代开
'acquisition_mark': '1', -- 是否收购
'block_chain': '1', -- 区块链标记
'electronic_mark': '1', --是否为电子增票
'transit_mark':'1', --通行费标志(1 通行费 2 无“通行费”字样,通行费明细)
'oil_mark': '1', -- 成品油标志
'vehicle_mark': '1', -- 机动车标志
'title':'XX省增值税xx发票' --标题
'producer_stamp':'' --监制章
"stamp_info":"", --销售方(章)
'area':'ZHE_JIANG' --地区 支持省市: GUANG_DONG,ZHE_JIANG,SHEN_ZHEN,YUN_NAN,BEI_JING
'stamp_color': '1' --章颜色 1:红章 0:非红章
'deduction':'' --差额征税
'items':[
{
"name": "*保险服务*保费", --货物或应税劳务、服务名称
"specification": "1", --规格型号
"unit": "单", --单位
"quantity": "1", --数量
"price": "1066.04", --单价
"total": "1066.04", --金额
"tax_rate": "6%", --税率
"tax": "63.96" --税额
}
]
// 数电票(增值税专用发票/普通发票)
"number": "00001649", -- 发票号码
"date": "2022年01月25日", -- 开票日期
"sub_total": "306", -- 小计金额
"sub_tax": "27.54", -- 小计税额
"pretax_amount":"30677.41", --税前金额合计
"tax":"2760.97", --税额合计
"total": "33438.38", -- 价税合计(小写)
"total_cn": "叁万叁仟肆佰叁拾捌圆叁角捌分", --价税合计(大写)
"seller": "XXXX有限责任公司", -- 销售方名称
"seller_tax_id": "91150XXXXXXX", -- 销售方统一社会信用代码/纳税人识别号
"buyer":"XXXX有限责任公司", --购买方名称
"buyer_tax_id": "91150XXXXXXXX", -- 购买方统一社会信用代码/纳税人识别号
"company_seal": "0", -- 是否有公司印章(0: 没有; 1: 有)
"kind": "水电", -- 发票消费类型
"issuer": "XXX", -- 开票人
"service_name": "天然气", -- 服务类型
"remark": "2022.1.1-2022.1.20", --备注
"item_names":"*天然气*天然气*天然气*天然气*天然气*天然气", --项目名称(每个以逗号隔开)
"title": "电子发票(普通发票)", --标题
'agent_mark': '1', -- 是否代开
"electronic_mark": "1", --是否为电子票
"vehicle_mark": "0", -- 机动车标志
"company_seal_mark":"0", --是否有销售方(章)标记(0: 没有; 1: 有)
"building_mark":"1", --建筑标志(仅专用建筑发票返回此字段)
"service_type":"建筑服务", --"全电票标签 (建筑服务,货物运输服务,不动产经营租赁服务,旅客运输服务,差额征税-差额开票)"
"buyer_bank_account":"12345678910", --购买方开户行及账号
"buyer_addr_tel":"XX市XX区XX街道XX号 1234567890", --购买方地址、电话
"seller_addr_tel":"XX市XX区XX街道XX号 1234567890", --销售方地址、电话
"seller_bank_account":"1234567890", --销售方开户行及账号
'receiptor': 'xxx', -- 收款人
'reviewer': 'xxx', -- 复核
'travel_tax': '27.54', -- 车船税
'stamp_color': '1' --章颜色 1:红章 0:非红章
'deduction':'' --差额征税
"items": [
{
"name": "*天然气*天然气", --项目名称
"price": "2.14128502", --单价
"quantity": "5949", --数量
"specification": "", --规格型号
"tax": "1146.47", --税额
"tax_rate": "9%", --税率/征收率
"total":"12738.5", --金额
"unit": "个" --单位
"place_of_building_service":"华光路以南", --建筑服务发生地( service_type为建筑服务,返回此字段)
"building_name":"公共租赁住房项目", --建筑项目名称( service_type为建筑服务,返回此字段)
"title_certificate_number":"XXX", --产权证书/不动产权证号(service_type为不动产经营租赁服务,返回字段)
"area_unit":"平方米", --面积单位(service_type为不动产经营租赁服务,返回字段)
}
],
"transports": [ -- 仅 service_type为货物运输服务,旅客运输服务 返回字段
{
"transport_type":"公路运输", --运输工具类型(service_type为货物运输服务,返回此字段)
"transport_number":"XXX5815", --运输工具牌号(service_type为货物运输服务,返回此字段)
"from":"上海市浦东新区", --起始地(service_type为货物运输服务,返回此字段)
"to":"河南省焦作市修武县", --到达地(service_type为货物运输服务,返回此字段)
"goods_name":"配件、钢板", --运输货物名称(service_type为货物运输服务,返回此字段)
"passenger":"XX", --出行人(service_type为旅客运输服务,返回此字段)
"user_id":"XX", --有效身份证号(service_type为旅客运输服务,返回此字段)
"date":"XX", --"出行日期(service_type为旅客运输服务,返回此字段)"
"seat":"XX", --等级(service_type为旅客运输服务,返回此字段)
}
],
"page_count": "2", -- 总页数(仅当多页时显示)
"page_number": "1", -- 当前页数(仅当多页时显示)
//区块链电子发票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'date': '2017年03月28日', -- 开票日期
"pretax_amount":"2648.54", --税前金额合计
'total': '3098.79', -- 价税合计(小写)
"total_cn":"壹佰圆整", --价税合计(大写)
"tax":"450.25", --税额合计
'check_code': '52657' -- 校验码
'seller': 'XXXXXX有限公司', -- 销售方名称
'seller_tax_id': '15260000000000000G', -- 销售方纳税人识别号
"seller_addr_tel":"XX市XX区XX街道XX号 1234567890", --销售方地址、电话
"seller_bank_account":"1234567890", --销售方开户行及账号
"buyer":"XXXXXX有限公司", --购买方名称
'buyer_tax_id': '11684616000000000D', -- 购买方纳税人识别号
"buyer_bank_account":"12345678910", --购买方开户行及账号
"buyer_addr_tel":"XX市XX区XX街道XX号 1234567890", --购买方地址、电话
'company_seal': '1', -- 是否有公司印章(0: 没有; 1: 有)
"company_seal_mark":"1", --是否有 '销售方(章)' 标记(0: 没有; 1: 有)
'kind': '餐饮', -- 发票消费类型
"ciphertext":"<42/93+*/+2*+81*851<9940-<9*>5+2-91<1+>7*<81>7/8*14050<\/<62-<1491+6+9", --密码区(三行密码,每行以逗号隔开)
'receiptor': 'xxx', -- 收款人
'reviewer': 'xxx', -- 复核
'issuer': 'xxx', -- 开票人
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'service_name': '餐饮服务', -- 服务类型
'remark': '账期:201702, 号码:185750654', --备注
"item_names":"*餐饮服务*餐饮服务*酒*白酒", --品名(每个以逗号隔开)
'block_chain': '1', -- 区块链标记
'title':'XX省增值税xx发票' --标题
'items':[
{
"name": "*保险服务*保费", --货物或应税劳务、服务名称
"specification": "1", --规格型号
"unit": "单", --单位
"quantity": "1", --数量
"price": "1066.04", --单价
"total": "1066.04", --金额
"tax_rate": "6%", --税率
"tax": "63.96" --税额
}
]
//收费公路通行费增值税电子普通发票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'date': '2017年03月28日', -- 开票日期
"pretax_amount":"2648.54", --税前金额合计
'total': '3098.79', -- 价税合计(小写)
"total_cn":"壹佰圆整", --价税合计(大写)
"tax":"450.25", --税额合计
'check_code': '15512212271381098068' -- 校验码
'seller': 'XXXXXX有限公司', -- 销售方名称
'seller_tax_id': '15260000000000000G', -- 销售方纳税人识别号
"seller_addr_tel":"XX市XX区XX街道XX号 1234567890", --销售方地址、电话
"seller_bank_account":"1234567890", --销售方开户行及账号
"buyer":"XXXXXX有限公司", --购买方名称
'buyer_tax_id': '11684616000000000D', -- 购买方纳税人识别号
"buyer_bank_account":"12345678910", --购买方开户行及账号
"buyer_addr_tel":"XX市XX区XX街道XX号 1234567890", --购买方地址、电话
'company_seal': '1', -- 是否有公司印章(0: 没有; 1: 有)
"company_seal_mark":"1", --是否有 '销售方(章)' 标记(0: 没有; 1: 有)
'kind': '餐饮', -- 发票消费类型
"ciphertext":"<42/93+*/+2*+81*851<9940-<9*>5+2-91<1+>7*<81>7/8*14050<\/<62-<1491+6+9", --密码区(三行密码,每行以逗号隔开)
"transit_mark":"1", --通行费标志(1 通行费 2 无“通行费”字样,通行费明细)
'receiptor': 'xxx', -- 收款人
'reviewer': 'xxx', -- 复核
'issuer': 'xxx', -- 开票人
'province': '浙江省', -- 省
'city': '杭州市', -- 市
"service_name": "经营租赁", -- 服务类型
'remark': '账期:201702, 号码:185750654', --备注
"item_names":"*经营租赁*通行费", --品名(每个以逗号隔开)
'title':'XX省增值税xx发票' --标题
"items": [
{
"name": "*经营租赁*通行费", --项目名称
"total": "21.21", --金额
"tax_rate": "3%", --税率
"tax": "0.64", --税额
"license_plate": "XXXXX", --车牌号
"vehicle_type":"客车", --车辆类型
"start_date": "20200702", --通行日期起
"end_date": "20200702" --通行日期止
}
]
//出租车发票
'code': '133011680478', -- 发票代码
'number': '01670989', -- 发票号码
'date': '2017年08月29日', -- 乘车日期
'time_geton': '12:47', -- 上车时间
'time_getoff': '12:52', -- 下车时间
'mileage': '1.9', -- 里程
'total': '11.00', -- 总金额
'place': '浙江省杭州市', -- 发票所在地
'kind': '交通', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'license_plate': '浙A88888', -- 车牌号
'surcharge': '0.00', -- 附加费
'fare':'0.00' --金额
'producer_stamp':'' --监制章
//火车票
'number': 'Z125C004574', -- 号码
'date': '2017年11月21日', -- 乘车日期
'time': '21:53', -- 乘车时间
'name': '张三', -- 乘车人姓名
'station_geton': '杭州东', -- 上车车站
'station_getoff': '金华', -- 下车车站
'train_number': 'G7383', -- 车次
'seat': '二等座', -- 座位类型
'total': '74.00', -- 总金额
'kind': '交通', -- 发票消费类型
'serial_number': '34682301830312L063003', -- 序列号
'user_id': '12345678910111213', -- 身份证号
'gate_number': '6A', -- 检票口
'seat_number': '06车无座', -- 座位号
'pick_up_address': '无锡售' -- 取票地址
"electronic_mark": "1", --电子票标记
"refund_content":"" --退差内容
"voucher_mark":"1", --电子凭证标记(仅在电子凭证时返回)
"type_of_business":"售", --商务类型 退 售 改签 退差
"ticket_content":"", --售票内容
"buyer": "铁路客票电子发票测试单位", --购买方名称 (仅在电子凭证时返回)
"buyer_tax_id": "91110001110AE35XXX", --社会统一信用代码 (仅在电子凭证时返回)
"number_of_original_invoice":"2211913067100000XXX", --原发票号码(仅在电子凭证时返回)
"air_conditioning":"新空调", --空调类型(仅在电子凭证时返回)
"type_of_voucher":"电子发票(铁路电子客票)", --凭证种类(仅在电子凭证时返回)
"type_of_railway_ticket":"", --火车票类型(仅在电子凭证时返回)
"discount_mark":"", --折扣标志(仅在电子凭证时返回)
"amount_refunded":"", --退票金额(仅在电子凭证时返回)
"fare_of_original_railway_ticket":"", --原火车票价款(仅在电子凭证时返回)
"departure_station_of_original_railway_ticket":"", --原火车票起点站(仅在电子凭证时返回)
"destination_station_of_original_railway_ticket":"", --原火车票终点站(仅在电子凭证时返回)
"buyer_addr_tel": "", --购买方地址电话 (仅在电子凭证时返回)
"buyer_bank_account": "", --购买方银行及账号 (仅在电子凭证时返回)
"remark":"", --备注(仅在电子凭证时返回)
"date_of_issue":"2022-03-17", --开票日期(仅在电子凭证时返回)
"phonics_of_departure_station":"Nanjing", --起始站拼音
"phonics_of_destination_station":"Shanghaihongqiao", --终点站拼音
//机打发票
'code': '6300161320', -- 发票代码
"number":"15064112", --发票号码
"date":"2017年11月21日", --开票日期
'time': '12:22:22', -- 时间
'check_code': '52657910788452000000', -- 校验码
"category":"oil", --种类(oil 表示是加油票)
'pretax_amount' : '74.00', -- 税前金额合计
"tax":"58", --税额合计
"total":"74", --价税合计(小写)
"total_cn":"柒拾肆元整", --价税合计(大写)
'seller': 'XXXXXX有限公司', -- 销售方名称
'seller_tax_id': '15260000000000000G', -- 销售方纳税人识别号
"buyer":"XXXXXX有限公司", --购买方名称
'buyer_tax_id': '11684616000000000D', -- 购买方纳税人识别号
'kind': '服务', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
"seller_addr_tel":"XX市XX区XX街道XX号 1234567890", --销售方地址、电话
"seller_bank_account":"1234567890", --销售方开户行及账号
"buyer_bank_account":"12345678910", --购买方开户行及账号
"buyer_addr_tel":"XX市XX区XX街道XX号 1234567890", --购买方地址、电话
'company_seal': '1', -- 是否有公司印章(0:没有; 1: 有)
'electronic_mark': '1', -- 是否为浙江/广东通用机打电子发票
'title':'XX机打发票' --标题
"transit_mark":"1", --通行费标志
"remark":"备注", --备注
'producer_stamp':'' --监制章
'area':'ZHE_JIANG' --地区 支持省市: GUANG_DONG,ZHE_JIANG,SHEN_ZHEN,YUN_NAN,BEI_JING
'items':[
{
"name": "*其他金属制品*干冰桶", --货物或应税劳务、服务名称
"unit": "台", --单位
"quantity": "1", --数量
"specification":"无", --规格型号
"total":"174.26", --金额
"tax_rate": "0.01", --税率
"price": "238.00", --单价
"tax": "1.74" --税额
}
]
//增值税普通发票(卷票)
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'code_confirm': '6300161320', -- 机打代码
'number_confirm': '15064112' -- 机打号码
'date': '2017年11月21日', -- 开票日期
'check_code': '52657910788452871589' -- 校验码
'seller': 'XXXXXX有限公司', -- 销售方名称
'seller_tax_id': '15260000000000000G', -- 销售方纳税人识别号
"buyer":"XXXXXX有限公司", --购买方名称
'buyer_tax_id': '11684616000000000D', -- 购买方纳税人识别号
"category":"oil", --种类(oil 表示是加油票)
"total":"74", --总金额(小写)
"total_cn":"柒拾肆圆整", --总金额(大写)
'kind': '服务', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'company_seal': '1', -- 是否有公司印章(0:没有; 1: 有)
'service_name': '汽油', -- 服务类型
"item_names":"*95汽油", --品名(每个以逗号隔开)
'title':'XX增值税普通发票(卷票)' --标题
"producer_stamp":"", --监制章
'items': [
{
'name': '*汽油*95号汽油(VIA)', --项目
'quantity': '40.99', --数量
'price': '7.32', --单价
"total":"300", --金额
}
]
//定额发票
'code': '6300161320', -- 发票代码
"number":"15064112", --发票号码
'total': '74.00', -- 总金额
'kind': '交通', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'company_seal': '1', -- 是否有公司印章(0:没有; 1: 有)
"non_commercial_mark":"0", --定额非经营性标志
'title': 'XX定额发票', --标题
"total_cn":"柒拾肆圆整", --总金额(大写)
"stamp_info":"", --章信息
"producer_stamp":"", --监制章
//过路费发票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'date': '2018年01月10日', -- 日期
'time': '12:14', -- 时间
'entrance': '4001', -- 入口
'exit': '6754', -- 出口
'total': '74.00', -- 总金额
'kind': '交通', -- 发票消费类型
'highway_flag': '1', -- 高速标志(0:没有; 1: 有)
'title': '通行费发票' --标题
"producer_stamp":"", --监制章
//客运汽车票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'date': '2018年01月10日', -- 日期
'time': '12:14', -- 时间
'station_geton': '杭州', -- 出发车站
'station_getoff': '金华', -- 达到车站
'total': '74.00', -- 总金额
'name': '张三', -- 姓名
'kind': '交通', -- 发票消费类型
'user_id': '256548545211254523', -- 身份证号
'title': '客运汽车票' --标题
"producer_stamp":"", --监制章
"company_seal":"" --是否盖章(0: 没有; 1: 有)
"bus_number":"" --车次
// 航空运输电子客票行程单
"user_name":"张三", --旅客姓名
'user_id':'256548545211254523', -- 身份证号
'number': '1506498784112', -- 电子客票号码
'check_code': '2345', -- 验证码
'date': '2018年04月04日', -- 填开日期
'agentcode': 'XMN098,0987677', -- 销售单位代号
'issue_by': '上海华城西南国际旅行社有限公司', -- 填开单位
'fare': '730.00', -- 票价
'tax': '10.00', -- 税费
'fuel_surcharge': '10.00', -- 燃油附加费
'caac_development_fund': '50.00', -- 民航发展基金
'insurance': '10.00', -- 保险费
'total': '800.00', -- 总额
'flights': [ -- 航班信息
{
'from':'上海', -- 出发站
'to':'北京', -- 到达站
'class_name': '经济舱' -- 舱位等级
'flight_number':'GS7563', -- 航班号
"date":"2018年02月20日", --乘机日期
'time':'12:34', -- 乘机时间
'seat':'N', -- 座位等级
'carrier':'南航', -- 承运人
'allow':'20K', --免费行李
'fare_basis': 'R', --客票级别
'not_valid_before': '2020年03月07日', --客票生效日期
'not_valid_after': '2020年03月07日' --有效截至日期
"flight_segment":"1", --flight_segment航段序号
}
],
'kind': '交通', --发票消费类型
'international_flag': '国内(D)', -- 国内国际标签
'print_number': '30925566965', -- 印刷序号
'endorsement': 'TOUR', --签注
'title': '航空运输电子客票行程单' --标题
"electronic_mark":"1", --电子票标记(仅在电子票时返回)
"voucher_mark":"1", --电子凭证标记(仅在电子票时返回)
"issuing_status":"正常", --出票状态(仅在电子票时返回)
"qrcode":"", --二维码(仅在电子票时返回)
"receipt_number":"123456789012345XXX", --收据号码(仅在电子票时返回)
"number_of_gp_order":"GP112045678XX", --GP订单号
"prompt_information":"XXX", --提示信息(仅在电子票时返回)
"other_taxes":"0", --其他税费(仅在电子票时返回)
"buyer":"北京XXX公司(测试)", --购买方名称(仅在电子票时返回)
"seller":"中国南方航空股份有限公司", --销售方名称(仅在电子票时返回)
"buyer_tax_id":"9111000007311XXXX", --购买方纳税人识别号(仅在电子票时返回)
"tax_rate":"9%", --增值税税率(仅在电子票时返回)
"type_of_business":"售", --商务类型 售 或 退
//二手车销售统一发票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'date': '2017年03月28日', -- 开票日期
'total': '100000.00', -- 总金额
'seller': 'XXXXXX有限公司', -- 卖方单位/个人
'seller_id': '330517489552522146', -- 卖方单位代码/个人身份证号
'seller_address': 'XX市XX区XX街道', --卖方单位/个人住址
'buyer': 'XXXXXX有限公司', -- 买方单位/个人
'buyer_id': '350822221211525564', -- 买方单位代码/个人身份证号
'buyer_address':'XX市XX区XX街道', --买方单位/个人住址
'auction_company':'' --经营、拍卖单位
'auction_address':'' --经营拍卖单位地址
'auction_bank_account':'' --经营、拍卖单位开户银行、账号
'auction_tax_id':'' --经营、拍卖单位纳税人识别号
'auction_phone':'' --经营、拍卖单位电话
'company_name': 'xxx二手车交易管理有限公司', -- 二手车市场
'company_tax_id': '15260000000000000G', -- 二手车市场纳税人识别号
'company_bank_account': 'XX银行XX支行1234567890' --二手车市场开户银行、账号
'company_phone': '1234567890' --二手车市场电话
'company_address': 'XX市XX区XX街道' --二手车市场地址
'license_plate': '浙A88888', -- 车牌号
'registration_number': '320027731473', -- 登记证号
'car_code': 'LVSHKAML8FG461612', -- 车架号/车辆识别代码
'car_model': '丰田牌CAF7150N4', -- 厂牌型号
'kind': '用车', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'title': '二手车销售统一发票' --标题
'company_seal': '1', -- 是否有公司印章(0: 没有; 1: 有)
'machine_id': '123456789', --机器编号
'machine_code': '123001221606', –-机打代码
'machine_number': '00213744', –-机打号码
'form_type': '第二联', -- 发票是第几联
'form_name': '发票联', -- 发票联次
'seller_tel': '', -- 卖方电话
'car_type': '', -- 车辆类型
'buyer_tel': '', -- 买方电话
'producer_stamp': '', -- 监制章
'electronic_number':'', --数电票号码
'electronic_mark':'1', --电子票标记(仅在电子票时返回)
'issuer':'' , --开票人
'destination_department_of_motor_vehicles': '' --转入地车辆管理所名称
//机动车销售统一发票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'machine_code': '123001221606', -- 机打代码
'machine_number': '00213744', -- 机打号码
'date': '2017年03月28日', -- 开票日期
"pretax_amount":"930000", --税前金额
"total":"1000000", --价税合计(小写)
"seller":"XXXXXX有限公司", --销货单位名称
'seller_tax_id': '330517489552522146', -- 销货单位纳税人识别号
'address': 'XX市XX区XX街道', -- 销货单位地址
'phone': '1234567890' --销货单位电话
"account":"1234567890", --销货单位账号
"seller_bank_account":"" --销货单位开户银行
"buyer":"XXXXXX有限公司", --购买方单位/个人名称
"buyer_id":"350822221211525564", --购买方单位代码/个人身份证号
'tax_authorities': 'xxx市国家税务局xx分局', -- 主管税务机关
'tax_authorities_code': '144030613', -- 主管税务机关代码
"car_code":"LVSHKAML8FG461612", --车辆识别代号/车架号码
'car_engine_code': 'Q035277', -- 发动机号码
'car_model': '丰田牌CAF7150N4', -- 厂牌型号
'certificate_number': 'YE80X1001351257', -- 合格证号
'kind': '用车', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
"tax":"70000", --增值税税额
"tax_rate":"7%", --增值税税率或征收率
'company_seal': '1', -- 是否有公司印章(0:没有; 1: 有)
'title': '机动车销售统一发票', --标题
'car_type': '多用途货车', --车辆类型
'tonnage': '0.71', --吨位
'form_type': '第二联', -- 发票是第几联
'form_name': '发票联', -- 发票联次
'issuer': '王XX' --开票人
'tax_num': '1234567890', --完税凭证号码
'max_people_num': '5', --限乘人数
'origin': '浙江杭州' --产地
"commodity_number":"1", --商检单号
"producer_stamp":"1", --监制章
'electronic_number':'', --数电票号码
'electronic_mark':'1', --电子票标记(仅在电子票时返回)
// 小票
'store_name': 'storename', -- 店名
'date': '2018年05月03日', -- 日期
'time': '12:22:10', -- 时间
'subtotal': '80.00', -- 小计金额
'tax': '10.00', -- 税额
'discount': '1.00', -- 折扣
'tips': '1.00', -- 小费
'total': '90.00' -- 总金额
'currency_code':'CNY', -- 币种, 使用 ISO 4217 Currency Codes 标准
'type': 'Shopping', -- 消费类型
'international_mark': '0', -- 1:国际票 0:国内票
// 出行行程单
'title': '滴滴出行/T3/高德地图打车/花小猪打车—行程单', --标题
'date': '2019年03月20日', -- 申请日期
'date_start': '2019年01月12日', -- 行程开始时间
'date_end': '2019年03月13日', -- 行程结束时间
'phone': '178xxxxxxxx', -- 行程人手机号
'total': '55.80', -- 合计金额
'items': [ -- 行程信息
{
'car_type': '快车', -- 车型
'time_geton': '01-02 12:42 周三', -- 上车时间
'time_getoff': '01-02 12:52 周三', -- 下车时间(T3行程单)
'city': '杭州市', -- 城市
'station_geton': '杭州市滨江医院', -- 起点
'station_getoff': '金盛曼城(东门)' -- 终点
'mileage': '8.6', -- 里程(公里)
'total': '26.12', -- 金额
'producer': '添猫出行', -- 服务商(高德行程单)
'time_order': '01-02 12:32 周三', -- 下单时间(T3行程单)
},
{
'car_type': '快车', -- 车型
'time_geton': '01-03 22:00 周四', -- 上车时间
'time_getoff': '01-03 22:50 周四', -- 下车时间(T3行程单)
'city': '杭州市', -- 城市
'station_geton': '海创基地北楼', -- 起点
'station_getoff': '金盛曼城(东门)' -- 终点
'mileage': '3.8', -- 里程(公里)
'total': '13.26', -- 金额
'producer': '添猫出行', -- 服务商(高德行程单)
'time_order': '01-03 21:50 周四', -- 下单时间(T3行程单)
},
{
'car_type': '快车', -- 车型
'time_geton': '03-13 21:10 周三', -- 上车时间
'time_getoff': '03-13 21:30 周三', -- 下车时间(T3行程单)
'city': '杭州市', -- 城市
'station_geton': '海创基地北楼', -- 起点
'station_getoff': '金盛曼城(东门)' -- 终点
'mileage': '4.1', -- 里程(公里)
'total': '16.42', -- 金额
'producer': '添猫出行', -- 服务商(高德行程单)
'time_order': '03-13 21:00', -- 下单时间(T3行程单)
}
],
'kind': '交通', -- 发票消费类型
// 完税证明
'number': '15064112', -- 发票号码
'serial_number':'', -- 票证字轨
"total":"3098.79", --总金额(小写)
"buyer":"XXXXXX有限公司", --购买方纳税人名称
"buyer_tax_id":"11684616000000000D", --缴款人识别号
"date":"2018年05月03日", --填发日期
"tax_authorities":"国家税务总局", --税务机关
"title": "中华人民共和国税收完税证明", // 标题
"total_cn":"壹拾壹万肆仟伍佰陆拾柒元玖角整", --总金额(大写)
"remark": "...", // 备注
"tax_agency_code": "", //征收机关代码
"buyer_deposit_bank":"", //纳税人开户行
"buyer_account":"", //纳税人账号
"tax_payment_limited_time":"", --税款限缴期限
"payer_stamp":"", //缴款单位盖章
"treasury_stamp":"", //国库(银行)盖章
"receiving_treasury":"", //收款国库
"ticket_filler":"", //填票人
"items": [
{
"actual_paid_amount": "433.70", // 实缴金额
"amount_paid": "0.00", // 已缴金额
"entry_date": "2021-08-13", // 入库日期
"tax_agency": "国家税务总局杭州市滨江区税务局", // 征收机关
"tax_period": "2021-07-01至2021-07-31", // 税款所属期
"tax_type": "印花税", // 税种
"budget_account_code": "", // 预算科目编码
"budget_account_name": "", // 预算科目名称
"budget_account_level": "", // 预算科目级次
"name": "市区", // 品目名称
"original_number": "31308619010000216", // 原凭证号
"quantity": "", // 课税数量
"tax_rate":"0.001", --税率或单位税额
"total":"43920", --计税金额或销售收入
}
]
//船票
'code': '6300161320', -- 发票代码
'number': '15064112', -- 发票号码
'date': '2018年01月10日', -- 日期
'time': '12:14', -- 时间
'station_geton': '杭州', -- 出发车站
'station_getoff': '上海', -- 达到车站
'total': '174.00', -- 总金额
'name': '张三', -- 姓名
'kind': '交通', -- 发票消费类型
'province': '浙江省', -- 省
'city': '杭州市', -- 市
'currency_code':'CNY' -- 币种
'user_id': 'XXX' -- 身份证号
//可报销其他发票
"code": "1234567890", //代码
"number": "1234567890", //号码
"date": "2018年01月05日", //日期
"total": "1135.13", //金额
"kind": "其他", //消费类型
"title": "" //标题
},
'extra': {
//增值税
'check_code_candidates':['52657910788452871583','52657910788452871588'], -- 校验码备选
'check_code_last_six':['871583','871588'] -- 校验码后六位备选
'number_order_error': ['15064115','15064116'] -- 发票号码备选(如发现可能错号等情况)
//二维码或者条码
'qrcode': ['01,10,044000003111,20000010,123.40,20210701,01812343072612345678'], – 二维码,返回信息包含发票代码、发票号码、税前金额、开票日期、校验码
'barcode': ['00000102180000'], -- 条码
}
}
]
}
}
}
3.3. 错误返回参数
名称 |
变量名 |
必填 |
类型 |
示例值 |
描述 |
返回状态码 |
result |
true |
int |
0或1 |
请求状态. 1:成功, 0:失败 |
错误码 |
error |
true |
int |
10002 |
|
信息说明 |
message |
true |
String |
"Autdenticate failed" |
|
3.4. 错误返回样例
{
'result': 0,
'error': 10002,
'message': 'Authenticate failed'
}
4. 请求示例
4.1. C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class Program
{
const string appSecret = "APPSECRET"; //这里输入提供的app_secret
const string appKey = "APPKEY"; //这里输入提供的app_key
const string image_url = "http://fapiao.glority.cn/dist/img/sample.jpg"
public static string CalculateMD5Hash(string input)
{
// step 1, calculate MD5 hash from input
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString().ToLower();
}
public static double ConvertToUnixTimestamp(DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan diff = date.ToUniversalTime() - origin;
return Math.Floor(diff.TotalSeconds);
}
static void Main(string[] args)
{
double timeStamp = ConvertToUnixTimestamp(DateTime.Now);
string token = CalculateMD5Hash(appKey + '+' + timeStamp + '+' + appSecret);
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("app_key", appKey);
dic.Add("timestamp", timeStamp.ToString());
dic.Add("token", token);
dic.Add("image_url", image_url);
string result = "";
string url = "http://fapiao.glority.cn/v1/item/get_item_info";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
#region 添加Post 参数
StringBuilder builder = new StringBuilder();
int i = 0;
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
Console.WriteLine(result);
Console.ReadLine();
}
}
}
4.2. JAVA
//依赖项:okio-1.14.0,shiro-core-1.4.0,okhttp-3.11.0
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.shiro.crypto.hash.Md5Hash;
import java.io.IOException;
public class Test {
public static void main(String...args) throws IOException {
String appKey = "APPKEY"; //这里输入提供的app_key
String appSecret = "APPSECRET"; //这里输入提供的app_secret
String imageUrl = "http://fapiao.glority.cn/dist/img/sample.jpg";
String host = "http://fapiao.glority.cn/v1/item/get_item_info";
long timestamp = System.currentTimeMillis() / 1000;
String token = new Md5Hash(appKey + "+" + timestamp + "+" + appSecret).toString();
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(host)
.post(new FormBody.Builder()
.add("app_key", appKey)
.add("timestamp", String.valueOf(timestamp))
.add("token", token)
.add("image_url", imageUrl)
.build())
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}
4.3. Objective-C
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
NSString *appKey = @"appKey"; ///这里替换成提供的appkey
NSString *appSecret = @"appSecret"; //这里替换成提供的appSecret
NSString *imageUrl = @"http://fapiao.glority.cn/dist/img/sample.jpg";
NSString *host = @"http://fapiao.glority.cn/v1/item/get_item_info";
NSString *timestampString = [NSString stringWithFormat:@"%d", (int)[[NSDate date] timeIntervalSince1970]];
NSString *method = @"POST";
NSString *md5String = [NSString stringWithFormat:@"%@+%@+%@", appKey, timestampString, appSecret];
const char * pointer = [md5String UTF8String];
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(pointer, (CC_LONG)strlen(pointer), md5Buffer);
NSMutableString *string = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[string appendFormat:@"%02x",md5Buffer[i]];
NSString *token = string;
NSString *urlString = [NSString stringWithFormat:@"%@?app_key=%@×tamp=%@&token=%@&image_url=%@", host, appKey, timestampString, token, imageUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:10.0f];
[request setHTTPMethod:method];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData * _Nullable data , NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error);
}
else {
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"result: %@" , dataString);
}
}];
[dataTask resume];
4.4. PHP
<?php
$appKey = "APPKEY"; //这里输入提供的app_key
$appSecret = "APPSECRET"; //这里输入提供的app_secret
$host = "http://fapiao.glority.cn";
$path = "/v1/item/get_item_info";
$method = "POST";
$timestamp = time();
$token = md5($appKey.'+'.$timestamp.'+'.$appSecret);
$imageUrl = 'http://fapiao.glority.cn/dist/img/sample.jpg';
$querys = "?app_key=$appKey×tamp=$timestamp&token=$token&image_url=$imageUrl";
$url = $host . $path . $querys;
$headers = ["Content-Type: multipart/form-data"];
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$response = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$body = substr($response, $header_size);
curl_close($curl);
echo $body;
4.5. Python3
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import math
import os
import io
import requests
import time
import datetime
import hashlib
import codecs
import uuid
import traceback
def testapi():
appkey = "APPKEY" #这里输入提供的app_key
appsecret = "APPSECRET" #这里输入提供的app_secret
api_url = "http://fapiao.glority.cn/v1/item/get_item_info"
image_url = "http://fapiao.glority.cn/dist/img/sample.jpg"
result = {}
try:
# generate timestamp
timestamp = int(time.time())
# generate token
m = hashlib.md5()
token = appkey + "+" + str(timestamp) + "+" + appsecret
m.update(token.encode('utf-8'))
token = m.hexdigest()
# post request
data = {'image_url': image_url, 'app_key': appkey, 'timestamp': str(timestamp), 'token': token}
r = requests.post(api_url, data=data)
if r.status_code != 200:
print("failed to get info from : ", image_url)
else:
result = r.json()
print(result)
except:
traceback.print_exc()
return result
if __name__ == '__main__':
testapi()