其实小白对于支付宝的提现 一开始做的时候估计也是一脸懵 在支付宝的业务中是没有提现这一说的 提现在支付宝的业务中叫做企业向个体用户打款 做起来其实很简单就是这个业务需要开通
好的这一块我也不是太清楚 但是支付宝的打款流程我是比较清楚的 需要先获取到支付宝或微信的openid 来进行打款 支付宝还多了一个认证的真实姓名 ,还有支付宝的打款不是百分百成功的 需要在返回值中去判断 也可以根据商户流水号去判断这一步必不可少 当第一次失败的时候其实可以多调用几次来进行失败的确认
下面直接上源码
/**
*
* @Description: (支付宝提现)
* @throws
*/
@RequestMapping(value = "userWithdraw", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ResponseBody
public String userWithdraw(HttpServletRequest request,WithdrawalVo withdrawalVo) throws AlipayApiException {
withdrawalVo.setMoney(request.getHeader("money"));
withdrawalVo.setCashOurId(request.getHeader("cashOurId"));
withdrawalVo.setAliId(request.getHeader("aliId"));
/**
* 查询提现的申请 提现一般走审核路线
*/
// CashOur cashOur = cashOurMapper.selectByPrimaryKey(withdrawalVo.getCashOurId());
// withdrawalVo.setName(cashOur.getCashourAliName());
ResultModel resultModel = new ResultModel();
String money = withdrawalVo.getMoney(); // 提现金额,保留两位小数
String account = withdrawalVo.getAliId(); // 提现账户
String name = withdrawalVo.getName(); // 真实姓名
String out_trade_no = StrUtils.uuid();
// 订单状态校验
try {
AlipayClient alipayClient = AliPayConfig.getAlipayClient();
AlipayFundTransToaccountTransferRequest req = new AlipayFundTransToaccountTransferRequest();
JSONObject bizContent = new JSONObject();
bizContent.put("out_biz_no", out_trade_no);
bizContent.put("payee_type", "ALIPAY_LOGONID"); // 收款方(用户)的支付宝登录类型,支持邮箱和手机号格式。
bizContent.put("payee_account", account);// 收款方账户,支持邮箱和手机号格式。
bizContent.put("amount", money);//金额,必须大于0.1元
bizContent.put("payer_show_name", "公司-提现");
bizContent.put("payee_real_name", name);
bizContent.put("remark", "公司-提现");
String biz = bizContent.toString().replaceAll("\"", "'");
req.setBizContent(biz);
AlipayFundTransToaccountTransferResponse response = alipayClient.execute(req);
//提现成功
if (response.isSuccess()) {
resultModel = new ResultModel(200,"31018","提现成功");
/**
* TODO 提现成功之后处理业务
*/
} else {
resultModel = new ResultModel(500,"31019","提现失败");
// 数据回滚
log.info(out_trade_no+"提现失败");
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
} catch (Exception e) {
resultModel = new ResultModel(500,"31019","提现失败");
log.error("支付宝提现失败:"+e);
e.printStackTrace();
}
return JsonUtil.toJson(resultModel);
}
这个方法是提供给我们后台的一个API 他传值的时候把数据都塞到头文件里面了 所以我取值在头里面取的 为什么是后台调用我前台的API呢 这就涉及到安全问题了 前台只能提供提现的申请 是无法直接到帐的 后台需要我们的工作人员去审核才能进行打款的操作 这一步也是为了安全性问题。
好了支付宝的提现就这么点东西
下一章:支付宝原路返回