1涧尿、App支付簡介
買家在手機百新、掌上電腦等無線設(shè)備的應(yīng)用程序內(nèi)帖蔓,可通過支付寶進行付款購買特定服務(wù)或商品矮瘟,資金即時到賬。
2塑娇、App支付申請條件
1.申請前必須擁有經(jīng)過實名認(rèn)證的支付寶賬戶澈侠;
2.企業(yè)或個體工商戶可申請;
3.需提供真實有效的營業(yè)執(zhí)照埋酬,且支付寶賬戶名稱需與營業(yè)執(zhí)照主體一致哨啃;
4.如應(yīng)用開發(fā)者與支付寶賬戶名稱不一致需提供開發(fā)合作協(xié)議;
5.如應(yīng)用已上架写妥,需提供應(yīng)用名稱和下載鏈接棘催;若應(yīng)用未上架,需提供demo或產(chǎn)品說明文檔耳标;
6.古玩、珠寶等奢侈品邑跪、投資類行業(yè)無法申請本產(chǎn)品次坡;
3、簽約費率說明
費率按單筆計算画畅;
一般行業(yè)費率:一般行業(yè)新簽手續(xù)費率將優(yōu)惠至0.55%(優(yōu)惠日至2017年6月30日)
特殊行業(yè)費率:1.2%砸琅,行業(yè)范圍包括:手機、通訊設(shè)備銷售轴踱;家用電器症脂;數(shù)碼產(chǎn)品及配件;休閑游戲淫僻;網(wǎng)絡(luò)游戲點卡诱篷、渠道代理;游戲系統(tǒng)商雳灵;網(wǎng)游周邊服務(wù)棕所、交易平臺;網(wǎng)游運營商(含網(wǎng)頁游戲)悯辙。
非營利性機構(gòu):需要提交資料進行審核琳省,以支付寶官方審核通過為準(zhǔn)迎吵。
4、提現(xiàn)收費標(biāo)準(zhǔn)和限額
當(dāng)日到賬 單筆金額
0-10萬元(含10萬元):0.2% (最低2元针贬,最高25元)
10萬元-500萬元(不含10萬元):0.025% (無上击费、下限)
次日到賬 0元(無上、下限)
限額 單筆:500萬元
當(dāng)日:500萬元
5桦他、場景介紹
適用于商家在App應(yīng)用中集成支付寶支付功能蔫巩。
商家APP調(diào)用支付寶提供的SDK調(diào)用支付寶客戶端內(nèi)的支付模塊,商家APP會跳轉(zhuǎn)到支付寶中完成支付瞬铸,支付完后跳回到商家APP內(nèi)批幌,最后展示支付結(jié)果。
目前支持手機系統(tǒng)有:iOS(蘋果)嗓节、Android(安卓)荧缘。
5.1用戶已安裝支付寶支付流程
步驟1:用戶在商家App中選擇商品下單、確認(rèn)購買拦宣,進入支付環(huán)節(jié)截粗,選擇支付寶,用戶點擊確認(rèn)支付鸵隧,如圖5.1.1绸罗;
步驟2:進入到支付寶頁面,調(diào)起支付寶支付豆瘫,出現(xiàn)確認(rèn)支付界面珊蟀,如圖5.1.2;
步驟3:用戶確認(rèn)收款方和金額外驱,點擊立即支付后出現(xiàn)輸入密碼界面育灸,如圖5.1.3;
步驟4:輸入正確密碼后昵宇,支付寶端顯示支付結(jié)果磅崭,如圖5.1.4;
步驟5:自動回跳到商家App中瓦哎,商家根據(jù)付款結(jié)果個性化展示訂單處理結(jié)果砸喻,如圖5.1.5。
5.2用戶未安裝支付寶支付流程蒋譬,跳轉(zhuǎn)到H5支付
步驟1:用戶在商家App中選擇商品下單割岛、確認(rèn)購買,進入支付環(huán)節(jié)犯助,選擇支付寶蜂桶,用戶點擊確認(rèn)支付,如圖5.2.1也切;
步驟2:用戶未安裝支付寶客戶端扑媚,則調(diào)起支付寶網(wǎng)頁支付收銀臺腰湾,用戶登錄支付寶賬戶,如圖5.2.2和圖5.2.3疆股;
步驟3:登錄成功后费坊,進入付款確認(rèn)頁面,如圖5.2.4旬痹;
步驟4:用戶點擊確認(rèn)付款附井,進入支付密碼頁面,如下圖5.2.5两残;用戶輸入密碼永毅,完成支付,展示支付結(jié)果人弓,如圖5.2.6沼死。
6、案例及規(guī)范
- 目前已上線支付案例崔赌,商家可進行實際體驗意蛀。
餓了么app、優(yōu)酷app健芭、攜程app县钥。 - 支付寶收銀臺界面規(guī)范
列表首位+默認(rèn)勾選+Logo+推薦標(biāo)簽+標(biāo)語,最低標(biāo)準(zhǔn)為“Logo+支付寶”慈迈,并將作為審核依據(jù)若贮。 - 支付寶Logo、收銀臺素材下載
7痒留、App支付接入
7.1創(chuàng)建應(yīng)用
接入App支付能力兜看,需要在開放平臺創(chuàng)建一個應(yīng)用,通過該應(yīng)用來接入各種能力狭瞎。
7.1.1成為開放平臺的入駐服務(wù)商或者商戶
入駐前準(zhǔn)備
1、公司聯(lián)系方式:包含聯(lián)系人姓名搏予、聯(lián)系手機熊锭、聯(lián)系郵箱。
2雪侥、未注冊企業(yè)支付寶賬號的企業(yè)碗殷,請?zhí)崆皽?zhǔn)備:法定代表人信息、身份證照片速缨、實際控制人信息锌妻、常用聯(lián)系手機號碼;企業(yè)證照(營業(yè)執(zhí)照旬牲、組織機構(gòu)代碼證)照片仿粹;企業(yè)銀行賬號信息搁吓。
支付寶賬戶注冊及認(rèn)證
個人用戶可注冊個人賬號,企業(yè)用戶請注冊企業(yè)類型賬號吭历。推薦服務(wù)商注冊企業(yè)類型支付寶賬戶堕仔,部分功能僅針對企業(yè)開放。
企業(yè)賬號注冊及認(rèn)證流程請見:
1):打開www.alipay.com晌区,點擊【免費注冊】摩骨,選擇【企業(yè)賬戶】,輸入對應(yīng)郵箱及驗證碼朗若,點擊【下一步】
2)驗證手機號碼恼五,點擊【下一步】,點擊【立即查收郵件】
3)打開郵箱接收支付寶激活郵件哭懈,點擊【繼續(xù)注冊】
4)填寫賬戶相關(guān)信息灾馒,點擊【確定】
5)點擊【企業(yè)實名信息填寫】,填寫企業(yè)相關(guān)信息,上傳對應(yīng)證件及對公銀行信息
6)證件審核通過以后银伟,按照認(rèn)證頁面的提示向支付寶收款賬戶打款你虹,打款金額為頁面提示的金額。認(rèn)證結(jié)果會短信及郵箱的方式通知彤避。(認(rèn)證成功后款項會退回匯款)
使用支付寶賬號登錄
企業(yè)請使用企業(yè)支付寶賬號登錄傅物,個人可使用個人支付寶賬號登錄。
填寫公司聯(lián)系人信息
請?zhí)峁┕境S寐?lián)系人的姓名琉预、電子郵箱及手機號碼董饰,及時掌握開放平臺最新動態(tài)。
查閱并一鍵簽署開放平臺主要協(xié)議圆米,完成后即成為螞蟻金服服務(wù)商
7.1.2創(chuàng)建應(yīng)用
應(yīng)用基礎(chǔ)信息在開發(fā)應(yīng)用過程中可以無需審核隨時完善卒暂。
需要完善的內(nèi)容 作用
應(yīng)用名稱 應(yīng)用名稱和應(yīng)用圖標(biāo)會在授權(quán)、分享的場景中露
出娄帖,請準(zhǔn)確填寫相關(guān)信息
注意:應(yīng)用名稱和應(yīng)用圖標(biāo)會在應(yīng)用申請上線時進行審核也祠,所以在配置時,建議先了解相關(guān)審核規(guī)則近速,點此了解诈嘿。
7.2配置應(yīng)用
7.2.1添加應(yīng)用功能
開發(fā)者在開發(fā)過程中,可以添加自己需要的功能到“功能列表”削葱。
不同的功能會有不同的使用條件奖亚,如果某個功能的使用條件為簽約,則使用者在使用此功能前析砸,需要簽約對應(yīng)的產(chǎn)品昔字,具體簽約方式,可參考“如何使用應(yīng)用”首繁。
7.2.2配置應(yīng)用環(huán)境
開發(fā)者所需配置內(nèi)容請參考:
字段名稱 字段描述
應(yīng)用網(wǎng)關(guān) 用于接收支付寶異步通知作郭,例如口碑開店中陨囊,需要配置此網(wǎng)關(guān)來接收開發(fā)者門店被動通知。
授權(quán)回調(diào)地址 第三方授權(quán)或用戶信息授權(quán)后回調(diào)地址所坯。授權(quán)鏈接中配置的redirect_uri的值必須與此值保持一致谆扎。(如:https://www.alipay.com) 注:當(dāng)填入該地址時,系統(tǒng)會自動進行安全檢測芹助,詳情請參考安全檢測堂湖。
RSA(SHA256)密鑰 開發(fā)者要保證接口中使用的私鑰與此處的公鑰匹配,否則無法調(diào)用接口状土∥薹洌可參考密鑰的生成與配置,且接口參數(shù)sign_type=RSA2蒙谓。
RSA(SHA1)密鑰 同上斥季,且接口參數(shù)sign_type=RSA。
7.2.3應(yīng)用申請上線
應(yīng)用開發(fā)完成后累驮,請開發(fā)者自行進行驗收并完成安全性檢查(安全性檢查可參考《開放平臺第三方應(yīng)用安全開發(fā)指南》)酣倾,驗收檢查完成后,可“提交審核”谤专。應(yīng)用上線成功后躁锡,狀態(tài)變?yōu)橐焉暇€,該狀態(tài)下的應(yīng)用能夠調(diào)用生產(chǎn)環(huán)境的接口置侍。
開發(fā)者點擊“提交審核”后映之,預(yù)計會有1個工作日的審核時間,請耐心等待蜡坊。如需更快收到通知杠输,請使用支付寶客戶端掃碼接收審核結(jié)果。
應(yīng)用上線后可新增功能秕衙、刪除功能蠢甲,操作后實時生效。刪除功能時請謹(jǐn)慎操作据忘,如果線上已經(jīng)有用戶使用此功能鹦牛,刪除功能后會導(dǎo)致無法使用。
7.2.4簽約
應(yīng)用上線后若河,開發(fā)者可以點擊“概覽”頁簽中“功能選項”右側(cè)的“立即簽約”按鈕,如下圖寞宫。
7.2.5生成RSA秘鑰
支付寶提供一鍵生成工具便于開發(fā)者生成一對RSA密鑰萧福,可通過下方鏈接下載密鑰生成工具:
下載該工具后,解壓打開文件夾辈赋,運行“RSA簽名驗簽工具.bat”(WINDOWS)或“RSA簽名驗簽工具.command”(MAC_OSX)鲫忍。
詳細步驟:
1.根據(jù)開發(fā)語言選擇密鑰格式膏燕。
2.選擇密鑰長度,建議使用2048位悟民。
3.點擊 “生成密鑰”坝辫,會自動生成商戶應(yīng)用公鑰和應(yīng)用私鑰。
4.點擊“打開密鑰文件路徑”射亏,即可找到生成的公私鑰近忙。如圖:
生成的私鑰需妥善保管,避免遺失智润,不要泄露及舍。應(yīng)用私鑰需填寫到代碼中供簽名時使用。應(yīng)用公鑰需提供給支付寶賬號管理者上傳到支付寶開放平臺窟绷。
7.2.6配置秘鑰
為了保證交易雙方的身份和數(shù)據(jù)安全锯玛,需要配置雙方密鑰。
在“我的應(yīng)用”中兼蜈,選擇要配置密鑰的應(yīng)用攘残,點擊“查看”。記錄對應(yīng)的APPID(下圖紅框處)为狸,在代碼中使用歼郭。
在“應(yīng)用環(huán)境”-“接口加簽方式”下方點擊“設(shè)置應(yīng)用公鑰”。
注:接口中的sign_type參數(shù)應(yīng)與上傳密鑰的加簽方式一致钥平。例如接口參數(shù)中sign_type=RSA2,請求時就會使用此處設(shè)置的RSA2(SHA256)公鑰驗簽实撒。
建議使用RSA2加簽方式。
根據(jù)開發(fā)者的條件設(shè)置應(yīng)用公鑰或上傳公鑰證書涉瘾,常規(guī)請點擊設(shè)置應(yīng)用公鑰知态。
把簽名驗簽工具里“公鑰”的內(nèi)容復(fù)制到此處,點擊“保存”完成密鑰設(shè)置立叛。
保存成功后负敏,在同一頁面查看或修改應(yīng)用公鑰或上傳應(yīng)用公鑰證書。
保存支付寶公鑰內(nèi)容秘蛇,在代碼中驗簽使用其做。
7.3開發(fā)
App支付為開發(fā)者提供了Android和iOS的客戶端SDK, 為了驗證交易數(shù)據(jù)的來源,開發(fā)者需要在商家后臺對交易數(shù)據(jù)進行加簽, 驗簽赁还,那么就需要集成開放平臺服務(wù)端SDK
下載客戶端SDK | 下載服務(wù)端SDK
7.3.1集成客戶端SDK
在集成App支付能力時妖泄,為主流移動平臺的App提供集成方式
了解更多Android平臺集成 | 了解更多iOS平臺集成
此處以iOS為例:
步驟1:啟動IDE(如Xcode),把iOS包中的壓縮文件中以下文件拷貝到項目文件夾下艘策,并導(dǎo)入到項目工程中蹈胡。
AlipaySDK.bundle
AlipaySDK.framework
在Build Phases選項卡的Link Binary With Libraries中,增加以下依賴:
步驟2:封裝方法,用于商戶客戶端與商戶服務(wù)端通信:發(fā)生支付時客戶端上送訂單詳細信息給服務(wù)器罚渐,服務(wù)器簽名后返回給客戶端却汉。
/*
*生成訂單信息
*/
//將商品信息賦予AlixPayOrder的成員變量
Order* order = [Order new];
// NOTE: app_id設(shè)置
order.app_id = appID;
// NOTE: 支付接口名稱
order.method = @"alipay.trade.app.pay";
// NOTE: 參數(shù)編碼格式
order.charset = @"utf-8";
// NOTE: 當(dāng)前時間點
NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatter stringFromDate:[NSDate date]];
// NOTE: 支付版本
order.version = @"1.0";
// NOTE: sign_type 根據(jù)商戶設(shè)置的私鑰來決定
order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
// NOTE: 商品數(shù)據(jù)
order.biz_content = [BizContent new];
order.biz_content.body = @"我是測試數(shù)據(jù)";
order.biz_content.subject = @"1";
order.biz_content.out_trade_no = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.biz_content.timeout_express = @"30m"; //超時時間設(shè)置
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品價格
步驟3:訂單支付調(diào)用方法
方法原型:-(void)payOrder:(NSString )orderStr fromScheme:(NSString )schemeStr callback:(CompletionBlock)completionBlock;
參數(shù)名稱 參數(shù)描述
NSString scheme 商戶程序注冊的URL protocol,供支付完成后回調(diào)商戶程序使用荷并。
(CompletionBlock)completionBlock 快捷支付開發(fā)包回調(diào)函數(shù)合砂,返回免登、支付結(jié)果源织。本地未安裝支付寶客戶端翩伪,或未成功調(diào)用支付寶客戶端進行支付的情況下(走H5收銀臺),會通過該completionBlock返回支付結(jié)果雀鹃。相應(yīng)的結(jié)果參考"客戶端同步返回"幻工。
NSString orderString app支付請求參數(shù)字符串,主要包含商戶的訂單信息黎茎,key=value形式囊颅,以&連接。
步驟4:處理客戶端返回URL
方法原型:-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock;
參數(shù)名稱 參數(shù)描述
NSURL *resultUrl 支付寶客戶端回傳的url
(CompletionBlock)completionBlock 本地安裝了支付寶客戶端傅瞻,且成功調(diào)用支付寶客戶端進行支付的情況下踢代,會通過該completionBlock返回支付結(jié)果
備注:請在APPDelegate的- (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options 中調(diào)用該方法。
在支付過程結(jié)束后嗅骄,會通過callbackBlock同步返回支付結(jié)果(callbackBlock是調(diào)用支付同步的回調(diào))胳挎。支付結(jié)果中參數(shù)的提取,必須通過CompletionBlock獲取溺森,禁止開發(fā)者私自解析支付結(jié)果返回的URL慕爬,參數(shù)說明見"客戶端同步返回"。
7.3.2集成服務(wù)端SDK
JAVA服務(wù)端SDK生成APP支付訂單信息示例
//實例化客戶端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//實例化具體API對應(yīng)的request類,類名稱和接口名稱對應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經(jīng)封裝掉了公共參數(shù)屏积,這里只需要傳入業(yè)務(wù)參數(shù)医窿。以下方法為sdk的model入?yún)⒎绞?model和biz_content同時存在的情況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是測試數(shù)據(jù)");
model.setSubject("App支付測試Java");
model.setOutTradeNo(outtradeno);
model.setTimeoutExpress("30m");
model.setTotalAmount("0.01");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("商戶外網(wǎng)可以訪問的異步地址");
try {
//這里和普通的接口調(diào)用不同炊林,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
System.out.println(response.getBody());//就是orderString 可以直接給客戶端請求姥卢,無需再做處理。
} catch (AlipayApiException e) {
e.printStackTrace();
}
JAVA服務(wù)端驗證異步通知信息參數(shù)示例
//獲取支付寶POST過來反饋信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//亂碼解決渣聚,這段代碼在出現(xiàn)亂碼時使用独榴。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
//切記alipaypublickey是支付寶的公鑰,請去open.alipay.com對應(yīng)應(yīng)用下查看奕枝。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean flag = AlipaySignature.rsaCheckV1(params, alipaypublicKey, charset, "RSA2")
8棺榔、系統(tǒng)交互流程
如圖,以Android平臺為例:
第2步:請求商戶服務(wù)端隘道,獲取簽名后的訂單信息症歇。使用簽名是為了在商戶與支付寶之間的數(shù)據(jù)傳輸時捞烟,防止數(shù)據(jù)內(nèi)容被篡改。開放平臺下載的sdk已將RSA(SHA1)簽名驗簽方法封裝当船,開發(fā)者只需要調(diào)用sdk配置業(yè)務(wù)入?yún)⒓纯桑胹dk封裝的方法發(fā)送請求到開放平臺時默辨,sdk會自動簽名德频。如開發(fā)者不用sdk,可根據(jù)SHA1規(guī)則自己拼寫簽名方法缩幸。
第4步:調(diào)用支付接口:此消息就是本接口所描述的支付寶客戶端SDK提供的支付對象PayTask壹置,將商戶簽名后的訂單信息傳進payv2方法喚起支付寶收銀臺,交易數(shù)據(jù)格式具體參見請求參數(shù)說明表谊。
第5步:支付請求:支付寶客戶端SDK將會按照商戶客戶端提供的請求參數(shù)發(fā)送支付請求钞护。
第8步:接口返回支付結(jié)果:商戶客戶端在第4步中調(diào)用的支付接口,會返回最終的支付結(jié)果(即同步通知)爆办,參見客戶端同步返回难咕。
第13步:用戶在支付寶APP或H5收銀臺完成支付后,會根據(jù)商戶在手機網(wǎng)站支付API中傳入的前臺回跳地址return_url自動跳轉(zhuǎn)回商戶頁面距辆,同時在URL請求中附帶上支付結(jié)果參數(shù)余佃。同時,支付寶還會根據(jù)原始支付API中傳入的異步通知地址notify_url跨算,通過POST請求的形式將支付結(jié)果作為參數(shù)通知到商戶系統(tǒng)爆土,詳情見支付結(jié)果異步通知。
9.交易輔助接口:
API英文名 API中文名 完整文檔
alipay.trade.query 交易查詢接口 查看文檔
alipay.trade.close 交易關(guān)閉接口 查看文檔
alipay.trade.refund 交易退款接口 查看文檔
alipay.trade.fastpay.refund.query 交易退款查詢接口 查看文檔
alipay.data.dataservice.bill.downloadurl.query 查詢賬單下載地址接口 查看文檔
10诸蚕、接口對賬功能
賬單生成時間:每日賬單一般會在次日10點或之前生成步势。每月賬單一般會在次月4日或之前生成。
10.1對賬場景介紹
商戶/系統(tǒng)商可通過接口下載指定日期(當(dāng)天除外)的業(yè)務(wù)明細賬單文件背犯,并結(jié)合自身業(yè)務(wù)系統(tǒng)實現(xiàn)自動對賬坏瘩。
10.2調(diào)用流程
商戶系統(tǒng)調(diào)用查詢對賬單下載地址接口alipay.data.dataservice.bill.downloadurl.query,傳入指定日期媳板,獲得該日期賬單文件的下載地址桑腮。查看接口詳情
商戶系統(tǒng)通過HTTP方式后臺訪問賬單下載鏈接,將賬單csv文件下載到本地后自行處理蛉幸。注意該下載鏈接僅30秒破讨,在得到鏈接后系統(tǒng)需要立刻請求下載賬單文件。
10.3使用SDK快速接入
查詢對賬單下載地址接口alipay.data.dataservice.bill.downloadurl.query:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //獲得初始化的AlipayClient
AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();//創(chuàng)建API對應(yīng)的request類
request.setBizContent("{" +
" \"bill_type\":\"trade\"," +
" \"bill_date\":\"2016-04-05\"" +
" }");//設(shè)置業(yè)務(wù)參數(shù)
AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);
System.out.print(response.getBody());
//根據(jù)response中的結(jié)果繼續(xù)業(yè)務(wù)邏輯處理
關(guān)鍵入?yún)ⅲ?br>
參數(shù)名稱 參數(shù)說明
bill_type 固定傳入trade
bill_date 需要下載的賬單日期奕纫,最晚是當(dāng)期日期的前一天
關(guān)鍵出參:
參數(shù)名稱 參數(shù)說明
bill_download_url 賬單文件下載地址提陶,30秒有效
下載賬單文件:
//將接口返回的對賬單下載地址傳入urlStr
String urlStr = "http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=X&userId=X&fileType=X&bizDates=X&downloadFileName=X&fileId=X";
//指定希望保存的文件路徑
String filePath = "/Users/fund_bill_20160405.csv";
URL url = null;
HttpURLConnection httpUrlConnection = null;
InputStream fis = null;
FileOutputStream fos = null;
try {
url = new URL(urlStr);
httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setConnectTimeout(5 * 1000);
httpUrlConnection.setDoInput(true);
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setRequestProperty("Charsert", "UTF-8");
httpUrlConnection.connect();
fis = httpUrlConnection.getInputStream();
byte[] temp = new byte[1024];
int b;
fos = new FileOutputStream(new File(filePath));
while ((b = fis.read(temp)) != -1) {
fos.write(temp, 0, b);
fos.flush();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
fos.close();
httpUrlConnection.disconnect();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}