此项目已开源欢迎Start、PR、发起Issues一块儿讨论交流共同进步
https://github.com/Javen205/IJPay
http://git.oschina.net/javen205/IJPayjavascript
提现到我的支付宝官方的名称是单笔转帐到支付宝帐户java
若是没有在开发平台建立应用就得建立一个《开放平台应用建立指南》
若是以前有建立过应用那么就能够直接添加功能git
若是只是测试不上线能够跳过上面的步骤,直接使用沙盒环境测试github
能够参考《配置应用环境》json
生成RSA密钥api
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
参数说明能够参考关键参数说明app
调用流程测试
说明:spa
一、若是商户重复请求转帐,支付宝会幂等返回成功结果,商户必须对重复转帐的业务作好幂等处理;若是不判断,存在潜在的风险,商户自行承担所以而产生的全部损失。
二、若是调用alipay.fund.trans.toaccount.transfer掉单时,或返回结果code=20000时,或返回结果code=40004,sub_code= SYSTEM_ERROR时,请调用alipay.fund.trans.order.query发起查询,若是未查询到结果,请保持原请求不变再次请求alipay.fund.trans.toaccount.transfer接口。
三、商户处理转帐结果时,对于错误码的处理,只能使用sub_code做为后续处理的判断依据,不可以使用sub_msg做为后续处理的判断依据。
主要涉及到两个接口
直接调用转帐接口若是返回不是
Success
就调用转帐查询接口
/** * 单笔转帐到支付宝帐户 * 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 { //调用查询接口查询数据 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); }
/** * 转帐查询接口 * @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); }
/** * 单笔转帐到支付宝帐户 * 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");//转帐收款帐户 model.setAmount(total_amount); model.setPayerShowName("测试退款"); model.setPayerRealName("沙箱环境");//帐户真实名称 model.setRemark("javen测试单笔转帐到支付宝"); try { isSuccess = AliPayApi.transfer(model); } catch (Exception e) { e.printStackTrace(); } renderJson(isSuccess); }
故意把帐户真实名称写错
{
"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==" }
正确返回结果
{
"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发布
支付宝支付-刷卡支付(条码支付)
支付宝支付-扫码支付
一张二维码集成微信、支付宝支付
支付宝Wap支付你了解多少?
Android版-支付宝APP支付