项目后台需要实现用户提现功能,支付宝平台对应的就是“单笔转账到支付宝账户”。具体实现见代码,无套路!
肯定需要先申请支付宝商户账号相关信息。以下为个人沙箱环境实现代码,生产上只需要修改appid、收款方账号、网关、商户私钥,支付宝公钥等信息为生产参数。
maven项目引入ali的sdk:
<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.3.4.ALL</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency>
核心代码如下:
String appOrderNO = "kevin201808080885"; //商户订单号 String payee_account = "kevin3965@sandbox.com";//收款方账户 String payer_show_name = "貔貅叔的店"; //付款方姓名(可选) String payee_real_name = "沙箱环境"; //收款方真是姓名(可选) String remark = "貔貅叔的店转账到沙箱环境"; //转账备注,当付款方为企业账户,且转账金额达到50000元,remark不能为空。 Double amount = 2.00; //转账金额 String payee_type = "ALIPAY_LOGONID";//收款方账户类型,当前为支付宝登录号,支持邮箱和手机号格式。 /*初始化客户端参数*/ String appId = "2016091100486186"; String CHARSET = "UTF-8"; String ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do";//支付宝网关,当前为沙箱环境 //商户私钥 String APP_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKY……"; //支付宝公钥 String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAswr9LdJ……"; //初始化客户端 DefaultAlipayClient alipayClien = new DefaultAlipayClient(ALIPAY_URL, appId, APP_PRIVATE_KEY, "JSON", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //实例化提现请求 AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); // //构造参数方式一: // JSONObject jsono = new JSONObject(); // jsono.put("out_biz_no", orderNO); // jsono.put("payee_type", payee_type); // jsono.put("amount", amount); // jsono.put("payer_show_name", payer_show_name); // jsono.put("payee_account", payee_account); // jsono.put("payee_real_name", payee_real_name); // jsono.put("remark", remark); // //绑定参数到请求对象上 // request.setBizContent(jsono.toJSONString()); //构造参数方式二: //实例化请求参数model AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel(); model.setOutBizNo(appOrderNO); model.setAmount(amount.doubleValue() + ""); model.setPayeeType(payee_type); model.setPayeeAccount(payee_account); model.setPayeeRealName(payee_real_name); model.setPayerShowName(payer_show_name); model.setRemark(remark); //绑定参数model request.setBizModel(model); try { //执行请求 AlipayFundTransToaccountTransferResponse response = alipayClien.execute(request); System.out.println(JSON.toJSONString(response)); } catch (AlipayApiException e) { e.printStackTrace(); }
执行结果如下:
{ "body": "{\"alipay_fund_trans_toaccount_transfer_response\":{\"code\":\"10000\",\"msg\":\"Success\",\"order_id\":\"20181115110070001502620000235294\",\"out_biz_no\":\"kevin20180808085\",\"pay_date\":\"2018-11-15 14:35:29\"},\"sign\":\"Mdmn0niiKfH4qcoNw3I+68rI/7Ac6/VnErBpHgQQlFzwJLKCHvf4ywYcZZtbefSNG/+E……\"}", "code": "10000", "errorCode": "10000", "msg": "Success", "orderId": "20181115110070001502620000235294", "outBizNo": "kevin20180808085", "params": { "biz_content": "{\"payee_account\":\"kevin3965@sandbox.com\",\"amount\":2.00,\"remark\":\"貔貅叔的店转账到沙箱环境\",\"out_biz_no\":\"kevin20180808085\",\"payee_type\":\"ALIPAY_LOGONID\",\"payer_show_name\":\"貔貅叔的店\"}" }, "payDate": "2018-11-15 14:35:29", "success": true }
说明:10000为请求成功,其他返回值说明见支付宝开发文档
异常响应示例:
{ "alipay_fund_trans_toaccount_transfer_response": { "code": "20000", "msg": "Service Currently Unavailable", "sub_code": "isp.unknow-error", "sub_msg": "系统繁忙" }, "sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE" }
参考:
https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
https://docs.open.alipay.com/common/105806