支付寶支付-提現(xiàn)到個(gè)人支付寶

支持沙盒環(huán)境的測試

此項(xiàng)目已開源歡迎Start工碾、PR啦逆、發(fā)起Issues一起討論交流共同進(jìn)步
https://github.com/Javen205/IJPay
http://git.oschina.net/javen205/IJPay

提現(xiàn)到個(gè)人支付寶官方的名稱是單筆轉(zhuǎn)賬到支付寶賬戶

1、創(chuàng)建應(yīng)用并獲取APPID

如果沒有在開發(fā)平臺創(chuàng)建應(yīng)用就得創(chuàng)建一個(gè)《開放平臺應(yīng)用創(chuàng)建指南》
如果之前有創(chuàng)建過應(yīng)用那么就可以直接添加功能

添加單筆轉(zhuǎn)賬到支付寶賬戶

如果只是測試不上線可以跳過上面的步驟楣颠,直接使用沙盒環(huán)境測試

2尽纽、配置密鑰

可以參考《配置應(yīng)用環(huán)境》

生成RSA密鑰

配置密鑰

3、下載服務(wù)端SDK

下載開放平臺服務(wù)端SDK

4童漩、使用服務(wù)端SDK

4.1 初始化SDK
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);

參數(shù)說明可以參考關(guān)鍵參數(shù)說明

4.2 接口調(diào)用

調(diào)用流程

說明:

1弄贿、如果商戶重復(fù)請求轉(zhuǎn)賬,支付寶會冪等返回成功結(jié)果睁冬,商戶必須對重復(fù)轉(zhuǎn)賬的業(yè)務(wù)做好冪等處理挎春;如果不判斷看疙,存在潛在的風(fēng)險(xiǎn),商戶自行承擔(dān)因此而產(chǎn)生的所有損失直奋。

2能庆、如果調(diào)用alipay.fund.trans.toaccount.transfer掉單時(shí),或返回結(jié)果code=20000時(shí)脚线,或返回結(jié)果code=40004搁胆,sub_code= SYSTEM_ERROR時(shí),請調(diào)用alipay.fund.trans.order.query發(fā)起查詢邮绿,如果未查詢到結(jié)果渠旁,請保持原請求不變再次請求alipay.fund.trans.toaccount.transfer接口。

3船逮、商戶處理轉(zhuǎn)賬結(jié)果時(shí)顾腊,對于錯(cuò)誤碼的處理,只能使用sub_code作為后續(xù)處理的判斷依據(jù)挖胃,不可使用sub_msg作為后續(xù)處理的判斷依據(jù)杂靶。

4.3 SDK的調(diào)用

主要涉及到兩個(gè)接口

4.4 單筆轉(zhuǎn)賬到支付寶賬戶接口alipay.fund.trans.toaccount.transfer 封裝

直接調(diào)用轉(zhuǎn)賬接口如果返回不是Success 就調(diào)用轉(zhuǎn)賬查詢接口

/**
     * 單筆轉(zhuǎn)賬到支付寶賬戶
     * https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.54Ty29&treeId=193&articleId=106236&docType=1
     * @param content
     * @return
     * @throws AlipayApiException
     */
    public static boolean transfer(AlipayFundTransToaccountTransferModel model) throws AlipayApiException{
        AlipayFundTransToaccountTransferResponse response = transferToResponse(model);
        String result = response.getBody();
        log.info("transfer result>"+result);
        System.out.println("transfer result>"+result);
        if (response.isSuccess()) {
            return true;
        } else {
            //調(diào)用查詢接口查詢數(shù)據(jù)
            JSONObject jsonObject = JSONObject.parseObject(result);
            String out_biz_no = jsonObject.getJSONObject("alipay_fund_trans_toaccount_transfer_response").getString("out_biz_no");
            AlipayFundTransOrderQueryModel queryModel = new AlipayFundTransOrderQueryModel();
            model.setOutBizNo(out_biz_no);
            boolean isSuccess = transferQuery(queryModel);
            if (isSuccess) {
                return true;
            }
        }
        return false;
    }
    
    public static AlipayFundTransToaccountTransferResponse transferToResponse(AlipayFundTransToaccountTransferModel model) throws AlipayApiException{
        AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
        request.setBizModel(model);
        return alipayClient.execute(request);
    }
4.5 查詢轉(zhuǎn)賬訂單接口alipay.fund.trans.order.query 封裝
/**
     * 轉(zhuǎn)賬查詢接口
     * @param content
     * @return
     * @throws AlipayApiException
     */
    public static boolean transferQuery(AlipayFundTransOrderQueryModel model) throws AlipayApiException{
        AlipayFundTransOrderQueryResponse response = transferQueryToResponse(model);
        log.info("transferQuery result>"+response.getBody());
        System.out.println("transferQuery result>"+response.getBody());
        if(response.isSuccess()){
            return true;
        }
        return false;
    }
    public static AlipayFundTransOrderQueryResponse transferQueryToResponse(AlipayFundTransOrderQueryModel model) throws AlipayApiException{
        AlipayFundTransOrderQueryRequest request = new AlipayFundTransOrderQueryRequest();
        request.setBizModel(model);
        return alipayClient.execute(request);
    }

5、 接口測試

/**
     * 單筆轉(zhuǎn)賬到支付寶賬戶
     * https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.54Ty29&treeId=193&articleId=106236&docType=1
     */
    public void transfer() {
        boolean isSuccess = false;
        String total_amount = "100";
        AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
        model.setOutBizNo(StringUtils.getOutTradeNo());//生成訂單號
        model.setPayeeType("ALIPAY_LOGONID");//固定值
        model.setPayeeAccount("abpkvd0206@sandbox.com");//轉(zhuǎn)賬收款賬戶
        model.setAmount(total_amount);
        model.setPayerShowName("測試退款");
        model.setPayerRealName("沙箱環(huán)境");//賬戶真實(shí)名稱
        model.setRemark("javen測試單筆轉(zhuǎn)賬到支付寶");
        
        try {
            isSuccess = AliPayApi.transfer(model);
        } catch (Exception e) {
            e.printStackTrace();
        }
        renderJson(isSuccess);
    }

故意把賬戶真實(shí)名稱寫錯(cuò)

{
  "alipay_fund_trans_toaccount_transfer_response": {
    "code": "40004",
    "msg": "Business Failed",
    "sub_code": "PAYER_USER_INFO_ERROR",
    "sub_msg": "付款用戶姓名或其它信息不一致",
    "out_biz_no": "051023044814944"
  },
  "sign": "Zbm9lI9GbTlLbYsPQoJhd5y7+oevOInPFoKlRWp2064VUPZYUGBJRiM/8Ip8Vfz4MDhu+0Uc3gEzvoXk1O6eVj7bAPjGLc5cZI3gQNmbogTxeK/4eGgIjxJBKK46r6rzKgK2/e7YEBmExi6hACbo3inBqX0OnaIxIbedZnYY2qrkNdhIjiD1G/EWJNH846IEwhwLkihV7vVKXhIgfmfKmGu5jE7aNddwxKhAK8fAzTR7JOs8p/ZOcLD9/RHfUP1ro4HoNlUOrFUZfhxRuUEFwLxvcJon0HkcO6dnjNnXQx3jh/Ne3632SpWca1pZczervU3/z9/C0LVflQWna42t9g=="
}

正確返回結(jié)果


{
  "alipay_fund_trans_toaccount_transfer_response": {
    "code": "10000",
    "msg": "Success",
    "order_id": "20170510110070001500460000004431",
    "out_biz_no": "051023003214944",
    "pay_date": "2017-05-10 23:00:30"
  },
  "sign": "hedaOEcrS8CwzcLNFAQhLWJnmevaA4a+SsNuzuuyBHABUjJ+ZvagMoS1/eUpRIHfwXVOLxGVjCCtJzi4Irclqu2Roz9aHo8ROkNKFKbw66lcT2dOo9AWCYw8UVhQDUjjSZ/d+lu9nnpHPf3ZPPdFHvziBo6ghZF0DRiIX/9ZVx7uH7grFJb8SRbCbcF5C7eouJU8Aw9sMdu/XjREdlW7pLvjeinzouOLbIpICRP33JtGC/KhgdQltDzlXHtVgi9xWRJVXJVp7+jtDRbRP+V+ImY9NqYKtpfxtTBZZ1bW6nOxJaMV7ePgC/6GpDIyWjg+LdHQ09eeBtTy4XCOxtGe1g=="
}

推薦閱讀:

微信酱鸭、支付寶App支付-JPay0.0.2發(fā)布
支付寶支付-刷卡支付(條碼支付)
支付寶支付-掃碼支付
一張二維碼集成微信吗垮、支付寶支付
支付寶Wap支付你了解多少?
Android版-支付寶APP支付

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凹髓,一起剝皮案震驚了整個(gè)濱河市烁登,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔚舀,老刑警劉巖饵沧,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赌躺,居然都是意外死亡捷泞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門寿谴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人失受,你說我怎么就攤上這事讶泰。” “怎么了拂到?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵痪署,是天一觀的道長。 經(jīng)常有香客問我兄旬,道長狼犯,這世上最難降的妖魔是什么余寥? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悯森,結(jié)果婚禮上宋舷,老公的妹妹穿的比我還像新娘。我一直安慰自己瓢姻,他們只是感情好祝蝠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幻碱,像睡著了一般绎狭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褥傍,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天儡嘶,我揣著相機(jī)與錄音,去河邊找鬼恍风。 笑死蹦狂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邻耕。 我是一名探鬼主播鸥咖,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兄世!你這毒婦竟也來了啼辣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤御滩,失蹤者是張志新(化名)和其女友劉穎鸥拧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體削解,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡富弦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氛驮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腕柜。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矫废,靈堂內(nèi)的尸體忽然破棺而出盏缤,到底是詐尸還是另有隱情,我是刑警寧澤蓖扑,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布唉铜,位于F島的核電站,受9級特大地震影響律杠,放射性物質(zhì)發(fā)生泄漏潭流。R本人自食惡果不足惜竞惋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灰嫉。 院中可真熱鬧拆宛,春花似錦、人聲如沸熬甫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椿肩。三九已至瞻颂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郑象,已是汗流浹背贡这。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厂榛,地道東北人盖矫。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像击奶,于是被迫代替她去往敵國和親辈双。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容