快速接入指南
本文档适用于第三方平台 、ERP服务商 、POS厂商等对接易票服务。
第三方平台:如猫酷、美团等为商家提供平台服务的企业;
ERP服务商:如金天鹅、哗啦啦等为商家提供ERP系统的企业;
POS厂商:如联迪、新大陆等为商家提供POS系统的企业。
快速开票开发流程:
申请认证 -> 完成商户注册 -> 调用快速开票服务
电子发票开发流程:
第1步:申请认证;
第2步:完成商户开通;
第3步:关注“易票商户”公众号,增值服务-电子发票完善商户信息,申请开通电子发票服务;
第4步:调用电子发票服务。
如何申请认证
想成为易票服务商线下联系我们,提交企业资质,申请开通服务商后台,获取认证。已成为易票服务商的向我们提供服务商编号即可;
联系电话Tel:010-85753380
测试环境服务商认证标识(accessKey):c57eb03a3fe8d8ec0d8aa285251ef29d
为方便您进行接口对接,特提供示例代码下载:
Java版
商户开通
接口描述:
通过此接口可开通易票商户。
测试地址:
http://top.yeepiao.com/customer/regist
生产地址:
http://op.yeepiao.com/customer/regist
请求类型:POST
接口参数:
名称 |
类型 |
必填 |
说明 |
accessKey |
string |
是 |
服务商认证标识 |
billingCode |
string |
是 |
开票码,快速开票服务对商户的唯一识别码,由接入方提供,要求字段长度为10-32位 |
enterpriseName |
string |
是 |
企业名称 |
taxNo |
string |
是 |
企业税号(需要和开票软件上一致) |
linkMan |
string |
是 |
联系人姓名 |
phoneNo |
string |
是 |
手机号码 |
sign |
string |
是 |
签名 |
返回结果:
名称 |
类型 |
说明 |
resultCode |
string |
返回响应结果,0表示查询成功,返回其它结果表示查询失败; |
resultMsg |
string |
返回信息,当resultCode不为0时,说明异常原因。 |
serialNumber(data的子元素) |
string |
序列号(请妥善保存该字段),当开通成功时,返回序列号用于登录插件 |
billUrl(data的子元素) |
string |
该商户开票链接,可将此链接转成二维码形式展示给消费者开票 |
customerNo(data的子元素) |
string |
商户编号 |
返回示例(JSON):
// 返回结果,开通成功
{"data":{"serialNumber":"3001027832","billUrl":"http://localhost:8400/s/0eec84b9e","customerNo":"20020104"},"resultCode":"0"}
// 调用接口报错返回结果
{"data":null,"resultCode":"88080299999","resultMsg":"系统未知异常"}
{"resultCode":"98","resultMsg":"开票码已注册"}
商户开通状态查询
接口描述:
通过此接口可查询商户当前的开通状态。
测试地址:
http://top.yeepiao.com/customer/query
生产地址:
https://op.yeepiao.com/customer/query
请求类型:POST
接口参数:
名称 |
类型 |
必填 |
说明 |
accessKey |
string |
是 |
服务商认证标识 |
billingCode |
string |
是 |
开票码,易票开票服务对商户的唯一识别码。 |
sign |
string |
是 |
签名 |
返回结果:
名称 |
类型 |
说明 |
resultCode |
string |
返回响应结果,0表示查询成功,返回其它结果表示查询失败; |
resultMsg |
string |
商户当前状态,true表示已开通商户,并返回绑定商户信息,false表示未开通商户。 |
返回示例(JSON):
// 返回结果,状态为开票码已开通商户,并返回绑定商户信息
{"data":{"enterpriseName":"注册测试1","taxNo":"123456789012345","phoneNo":"18301310621","linkMan":"注册测试1","qrcode":"3001027832","billUrl":"http://localhost:8400/s/0eec84b9e","bindStatus":"BINDED","electronicStatus":"FALSE"},"resultCode":"0"}
bindStatus: BINDED表示已绑定开票码 FALSE 未绑定开票码
electronicStatus=TRUE 已开通电子发票服务 FALSE 未开通电子发票服务 PROCESSING 电子发票服务开通中
// 调用接口报错返回结果
{"resultCode":"98","resultMsg":"accessKey或开票码错误"}
1. 查询商品列表接口
接口描述:
调用请求开票接口前,请先查询商品列表接口,获取当前商户的可用商品列表。
测试地址:
http://top.yeepiao.com/customer/query/goods
生产地址:
http://op.yeepiao.com/customer/query/goods
请求类型:POST
参数类型:json传参
接口参数:
名称 |
类型 |
必填 |
说明 |
accessKey |
string |
是 |
服务商认证标识 |
billingCode |
string |
是 |
开票码,电子发票服务对商户的唯一识别码,在商户开通时可获得。 |
sign |
string |
是 |
签名 |
返回结果:
名称 |
类型 |
说明 |
resultCode |
string |
返回响应结果,0表示查询成功,返回其它结果表示查询失败; |
resultMsg |
string |
返回信息,当resultCode不为0时,说明异常原因。 |
data |
List<InvoiceGood> |
商品列表,json数组 |
InvoiceGood
名称 |
类型 |
必填 |
说明 |
goodsNo |
string |
是 |
商品编号 |
model |
string |
是 |
商品规格 |
unit |
string |
是 |
商品单位 |
unitPrice |
decimal |
是 |
商品单价 |
taxRate |
string |
是 |
税率 |
goodsName |
string |
是 |
商品名称 |
unionNo |
string |
是 |
统一编码 |
defaultType |
string |
是 |
是否默认商品 |
返回示例(JSON):
{
"data":
[
{
"goodsNo": "700903",
"model": null,
"unit": null,
"unitPrice": null,
"taxRate": 0.05,
"status": "TRUE",
"goodsName": "餐费",
"unionNo": "餐饮",
"defaultType": "FALSE"
},
"goodsNo": "700904",
"model": "个",
"unit": "元",
"unitPrice": 25,
"taxRate": 0.03,
"status": "TRUE",
"goodsName": "咖啡风景",
"unionNo": "服务费",
"defaultType": "TRUE"
}
],
"resultCode": "0"
}
2. 请求开票接口
接口描述:
通过此接口提交电子发票订单,返回开票地址(调用此接口前,请先调用查询商品列表接口)。
测试地址:
http://top.yeepiao.com/invoice/electronic/order
生产地址:
http://op.yeepiao.com/invoice/electronic/order
请求类型:POST
接口参数:
名称 |
类型 |
必填 |
说明 |
accessKey |
string |
是 |
服务商认证标识 |
order |
string |
是 |
订单数据json格式 |
sign |
string |
是 |
签名 |
orderNo |
string |
是 |
order子属性:订单号,由接入方生成并传入,要求订单号长度范围:10-50个字符 |
billingCode |
string |
是 |
order子属性:开票码,电子发票服务对商户的唯一识别码,在商户开通时可获得。 |
billAmount |
string |
是 |
order子属性:订单金额,单位为元,支持小数点后两位 |
type |
string |
是 |
order子属性:商品类型,"1":使用选定的商品,"2":使用商户配置的默认商品 |
invoiceGoods |
List<InvoiceGood> |
否 |
order子属性:商品列表,商品类型为“1”时,开票商品必填 |
InvoiceGood
名称 |
类型 |
必填 |
说明 |
goodsNo |
string |
是 |
商户编码 |
goodsNum |
string |
选填 |
商品数量,商品数量和商品金额只能传其中一个,有单价的商品只传数量,无单价商品请传商品金额 |
taxAmount |
string |
选填 |
商品金额 |
调用示例(JSON):
accessKey=41d8d24bd97366a413af0e41231e8a38,
sign=faNQNLvTo7BQhp2zeZZZBfpBBwys67EWyCmVnqBqti0j6cj46IujPggcFi56bDSr78Ui68pzaLCbf3Uvr5lPB3wgwL0IkV84K3VJcMaUh/9pteJkxY1IzJzFjPg0NuK8H4fDEI2iF65rHVLbE7A+qgIl95EZUbGF3XLS8yqivnA=,
order={"orderNo":"1509357038769","billingCode":"29","billAmount":"700","type":"1","invoiceGoods":[{"goodsNo":"700101","goodsNum":"3","taxAmount":null},{"goodsNo":"700201","goodsNum":null,"taxAmount":"100"}]}}
返回结果:
名称 |
类型 |
说明 |
resultCode |
string |
返回响应结果,0表示查询成功,返回其它结果表示查询失败; |
resultMsg |
string |
返回信息,当resultCode不为0时,说明异常原因; |
orderNo(data的子元素) |
string |
电子发票的订单编号 |
url(data的子元素) |
string |
返回的开票链接地址 |
expireTime(data的子元素) |
string |
url有效时间 |
返回示例(JSON):
// 返回结果,请求成功
{"data":{"orderNo":"5210c7613871a68f47dbd8800e28636c67ab293b77addeac","url":"http://localhost:8400/invoice/electronic/index?orderNo=5210c7613871a68f47dbd8800e28636c67ab293b77addeac","expireTime":"2017-10-31 17:50:41"},"resultCode":"0"}
// 调用接口报错返回结果
{"resultCode":"88080299999","resultMsg":"系统未知异常"}