文档中心 > 发票管家

发票管家快速接入

更新时间:2017/05/31 访问次数:1044

本文档展示了如何从零开始,使用蚂蚁金服开放平台服务端SDK快速接入发票管家,完成与支付宝对接的部分。
注意:文档中的代码示例和Demo是用来阐述API基本使用方法的,仅针对大众场景,供商户及ISV参考。特殊情况还请商户及ISV自行扩展,确保符合自身业务需求。

第一步:创建应用并获取APPID

要在您的应用中使用支付宝开放产品的接口能力,您需要先去蚂蚁金服开放平台(open.alipay.com),在管理中心中创建登记您的应用,并提交审核,审核通过后会为您生成应用唯一标识(APPID),并且可以申请开通开放产品使用权限,通过APPID您的应用才能调用开放产品的接口能力。需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》

第二步:配置密钥

开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台管理中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。详细步骤请参考《配置应用环境》

第三步:搭建和配置开发环境

1. 下载服务端SDK

为了帮助开发者调用开放接口,我们提供了开放平台服务端SDK,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的SDK并引入您的开发工程。

2. 接口调用配置

各语言版本服务端SDK详细使用说明,请参考《服务端SDK使用说明

SDK调用前需要进行初始化,代码示例如下:

AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);

关键参数说明:

配置参数 示例值解释 获取方式/示例值
URL 支付宝网关(固定) https://openapi.alipay.com/gateway.do
APP_ID APPID即创建应用后生成 获取见上面创建应用并获取APPID
APP_PRIVATE_KEY 开发者应用私钥,由开发者自己生成 获取见上面配置密钥
FORMAT 参数返回格式,只支持json json(固定)
CHARSET 请求和签名使用的字符编码格式,支持GBK和UTF-8 开发者根据实际工程编码配置
ALIPAY_PUBLIC_KEY 支付宝公钥,由支付宝生成 获取详见上面配置密钥
SIGN_TYPE 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 RSA2
TIPS:ISV/开发者可以通过“第三方应用授权”得到商户授权令牌(app_auth_token)作为请求参数传入,实现代商户发起请求的能力;具体方法请参考 第三方应用授权

接口调用

接口调用流程

获取抬头列表开票并通知用户

场景介绍:
商户系统在帮助用户开具发票时,可以通过调用开放平台接口获取用户在支付宝预设的抬头列表,用户选择抬头后提交开票申请。发票开具成功后,商户将发票同步至支付宝,支付宝通知用户发票开具完成,并帮助用户保存管理发票。

调用流程:
image

TIPS:在唤起用户授权页面的过程中,需在拼接跳转的url中指定发票管家固定的scope参数值,此参数可保证较长时间的有效性(为期一年),即用户仅需授权一次后即可维持一年的授权有效期,参数值为scope=auth_invoice_info,详情请参见 用户信息授权。
根据动态抬头码开票并通知用户

场景介绍:
商户系统在帮助用户开具发票时,可以根据用户出示的抬头码调用开放平台接口获取抬头详细信息开票。发票开具成功后,商户将发票同步至支付宝,支付宝通知用户发票开具完成,并帮助用户保存管理发票。
调用流程:

image

TIPS:发票查询接口仅允许商户查询自己同步到支付宝的发票。
支付后申请开票

场景介绍
开票商户签约了支付宝当面付产品,用户付款成功后通过支付结果页进入商家系统申请开票,发票交易号在跳转开票页面时传入,商家系统根据交易号查询支付宝交易信息,发票开具成功后回传发票信息到支付宝。
调用流程

image

TIPS:1.交易查询接口需要用户授权,授权scope=auth_invoice_info,详情请参见用户信息授权。
2.跳转开票链接有30min有效期,不在有效期查询交易返回失败,需要用户重新发起开票申请。

SDK接入

接口alipay.ebpp.invoice.title.list.get:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayEbppInvoiceTitleListGetRequest request = new AlipayEbppInvoiceTitleListGetRequest();
request.setBizContent("{" +
"    \"user_id\":\"2088399922228483\"" +
"  }");
AlipayEbppInvoiceTitleListGetResponse response = alipayClient.execute(request,accessToken);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
关键入参:
参数名称 参数说明
user_id 支付宝用户id
关键出参:
参数名称 参数说明
title_list 抬头列表,包括title_name(用户抬头信息)、is_default(是否是用户设置的默认抬头)等信息
接口alipay.ebpp.invoice.title.dynamic.get:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayEbppInvoiceTitleDynamicGetRequest request = new AlipayEbppInvoiceTitleDynamicGetRequest();
request.setBizContent("{" +
"    \"bar_code\":\"82771888\"" +
"  }");
AlipayEbppInvoiceTitleDynamicGetResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
关键入参:
参数名称 参数说明
bar_code 发票管家抬头详情页展示的条形码数字
关键出参:
参数名称 参数说明
title 对应bar_code所获取到的用户抬头(包括title_name(用户抬头信息)、is_default(是否是用户设置的默认抬头)等信息)
接口alipay.ebpp.invoice.sycn :
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayEbppInvoiceSycnRequest request = new AlipayEbppInvoiceSycnRequest();
request.setBizContent("{" +
"    \"m_short_name\":\"KFC\"," +
"    \"sub_m_short_name\":\"KFC-HZ-19003\"," +
"      \"invoice_info\":[{" +
"                \"user_id\":\"2088399922382233\"," +
"        \"invoice_no\":\"237428768\"," +
"        \"invoice_code\":\"2328742873\"," +
"        \"register_no\":\"J8374LK29387\"," +
"        \"invoice_amount\":\"200.00\"," +
"        \"invoice_date\":\"2016-07-19\"," +
"          \"invoice_content\":[{" +
"                        \"item_name\":\"电脑\"," +
"            \"item_no\":\"00001\"," +
"            \"item_price\":\"100.00\"," +
"            \"item_quantity\":10," +
"            \"row_type\":0," +
"            \"item_sum_price\":\"100.00\"," +
"            \"item_tax_price\":\"10.00\"," +
"            \"item_tax_rate\":\"0.12\"," +
"            \"item_unit\":\"单位\"," +
"            \"item_amount\":\"100.00\"" +
"            }]," +
"        \"out_biz_no\":\"2016010139992003\"," +
"        \"invoice_type\":\"blue\"," +
"        \"invoice_img_url\":\"http://aaa.gg.com\"," +
"        \"invoice_title\":{" +
"          \"user_id\":\"2088339299929291\"," +
"          \"title_name\":\"支付宝(中国)网络技术有限公司\"," +
"          \"title_type\":\"CORPORATION\"," +
"          \"is_default\":true," +
"          \"user_mobile\":\"13939200003\"," +
"          \"user_email\":\"abc@aliyun.com\"," +
"          \"tax_register_no\":\"AAAAABBBBBCCCCCDDDDD\"," +
"          \"user_address\":\"杭州市 西湖区 天目山路 黄龙时代广场\"," +
"          \"open_bank_name\":\"中国建设银行\"," +
"          \"open_bank_account\":\"6332000023949993\"" +
"        }," +
"        \"invoice_file_data\":\"01010010101\"," +
"        \"invoice_fake_code\":\"-\"," +
"        \"out_invoice_id\":\"20160707399929991001\"," +
"        \"file_download_type\":\"pdf\"," +
"        \"original_blue_invoice_code\":\"2328742873\"," +
"        \"original_blue_invoice_no\":\"9288277173\"," +
"        \"register_name\":\"支付宝(杭州)信息技术有限公司\"," +
"        \"register_phone_no\":\"13200029932\"," +
"        \"register_address\":\"天目山路黄龙时代广场B座\"," +
"        \"extend_fields\":\"shortPlatform=POS\\rabx=xxx\\reee=ccc\"," +
"        \"file_download_url\":\"http://aaa.com/pdf/download.pdf?id=****\"," +
"        \"tax_amount\":\"1000.00\"," +
"        \"sum_amount\":\"2000.00\"," +
"        \"tax_type\":\"PLAIN\"," +
"        \"register_bank_name\":\"西湖区建行\"," +
"        \"register_bank_account\":\"6332000023949993\"" +
"        }]" +
"  }");
AlipayEbppInvoiceSycnResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
关键入参:
参数名称 参数说明
m_short_name 商户的品牌名称简称,该字段对应isv提供的商户配置表中的商户品牌简称, m_short_name+sub_m_short_name具有唯一约束,如:肯德基:KFC
sub_m_short_name 支付宝为商户分配的商户门店简称,该字段对应isv提供的商户配置中的商户门店简称,如:肯德基-杭州西湖区文一西路店:KFC-HZ-19003
invoice_info 同步发票相关的信息
关键出参:
参数名称 参数说明
url 支付宝发票管家发票详情页链接地址,如果同步的发票是多张时,此链接为当前用户的已开立发票列表地址
接口alipay.ebpp.invoice.info.get:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayEbppInvoiceInfoGetRequest request = new AlipayEbppInvoiceInfoGetRequest();
request.setBizContent("{" +
"    \"user_id\":\"2088102144688116\"," +
"    \"invoice_code\":\"2328742873\"," +
"    \"invoice_no\":\"237428768\"" +
"  }");
AlipayEbppInvoiceInfoGetResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
关键入参:
参数名称 参数说明
user_id 支付宝用户ID
invoice_code 发票代码
invoice_no 发票号码
关键出参:
参数名称 参数说明
invoice_info 同步发票相关的信息
接口alipay.ebpp.invoice.user.trade.query:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayEbppInvoiceUserTradeQueryRequest request = new AlipayEbppInvoiceUserTradeQueryRequest();
request.setBizContent("{" +
"    \"einv_trade_id\":\"201611110015210200000000000001\"," +
"    \"timestamp\":\"1483425824123\"," +
"    \"token\":\" prJhAWZKndLcTmT1%2FGZwbBmjbFU3D%\"," +
"    \"random\":\"930069\"" +
"  }");
AlipayEbppInvoiceUserTradeQueryResponse response = alipayClient.execute(request,accessToken);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
关键入参:
参数名称 参数说明
einv_trade_id 发票管家交易id
token
  • token:令牌
  • random:随机数
  • timestamp:时间戳
从支付宝App跳转到开票方外部链接中带入的参数,调用该接口需将这些参数透传回支付宝
random
timestamp
关键出参:
参数名称 参数说明
trade_info 发票管家发票交易信息

FAQ

关于此文档暂时还没有FAQ
返回
顶部