本文档展示了如何从零开始,使用蚂蚁金服开放平台服务端SDK快速接入发票管家,完成与支付宝对接的部分。
注意:文档中的代码示例和Demo是用来阐述API基本使用方法的,仅针对大众场景,供商户及ISV参考。特殊情况还请商户及ISV自行扩展,确保符合自身业务需求。
要在您的应用中使用支付宝开放产品的接口能力,您需要先去蚂蚁金服开放平台(open.alipay.com),在管理中心中创建登记您的应用,并提交审核,审核通过后会为您生成应用唯一标识(APPID),并且可以申请开通开放产品使用权限,通过APPID您的应用才能调用开放产品的接口能力。需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》。
开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台管理中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。详细步骤请参考《配置应用环境》。
为了帮助开发者调用开放接口,我们提供了开放平台服务端SDK,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的SDK并引入您的开发工程。
各语言版本服务端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 |
场景介绍:
商户系统在帮助用户开具发票时,可以通过调用开放平台接口获取用户在支付宝预设的抬头列表,用户选择抬头后提交开票申请。发票开具成功后,商户将发票同步至支付宝,支付宝通知用户发票开具完成,并帮助用户保存管理发票。
调用流程:
场景介绍:
商户系统在帮助用户开具发票时,可以根据用户出示的抬头码调用开放平台接口获取抬头详细信息开票。发票开具成功后,商户将发票同步至支付宝,支付宝通知用户发票开具完成,并帮助用户保存管理发票。
调用流程:
场景介绍
开票商户签约了支付宝当面付产品,用户付款成功后通过支付结果页进入商家系统申请开票,发票交易号在跳转开票页面时传入,商家系统根据交易号查询支付宝交易信息,发票开具成功后回传发票信息到支付宝。
调用流程
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(是否是用户设置的默认抬头)等信息 |
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(是否是用户设置的默认抬头)等信息) |
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 | 支付宝发票管家发票详情页链接地址,如果同步的发票是多张时,此链接为当前用户的已开立发票列表地址 |
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 | 同步发票相关的信息 |
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 |
|
| random | |
| timestamp |
| 参数名称 | 参数说明 |
|---|---|
| trade_info | 发票管家发票交易信息 |