首先,您最关心的资金安全是托管给支付宝,安全才是第一位。
我们可以协助贵公司向支付宝申请该资质,所有的资金进出都是在支付宝上完成的,完全可以自己掌控。
付款的工作可以导入订单也可以API完成。
public void pay(Map<String, Object> tixian, Map<String, Object> bank) {
String txid = StringUtil.isbank(tixian, TableEnum.component_accounttx.id);
try {
Map<String, Object> channel = companypayChannelMapper.findchannel("alipay_balance");
String channelid = StringUtil.isbank(channel, TableEnum.component_companypay_channel.id);
AlipayClient alipayClient = this.alipayClient(channelid);
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
model.setOutBizNo(txid);//商家侧唯一订单号,由商家自定义。对于不同转账请求,商家需保证该订单号在自身系统唯一。
model.setRemark("提现单号:" + txid);//业务备注。
//转账业务请求的扩展参数,支持传入的扩展参数如下:
//payer_show_name_use_alias:是否展示付款方别名,可选,收款方在支付宝账单中可见。枚举支持:
//* true:展示别名,将展示商家支付宝在商家中心 商户信息 > 商户基本信息 页面配置的 商户别名。
//* false:不展示别名。默认为 false。
model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
model.setBizScene("DIRECT_TRANSFER");//业务场景。单笔无密转账固定为 DIRECT_TRANSFER。
Participant payeeInfo = new Participant();//收款方信息
//当 identity_type=ALIPAY_USER_ID 时,填写支付宝用户 UID。示例值:2088123412341234。
//当 identity_type=ALIPAY_LOGON_ID 时,填写支付宝登录号。示例值:186xxxxxxxx。
payeeInfo.setIdentity(StringUtil.isbank(bank, TableEnum.guanyi_shop_bankcar.bank_code));
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
//参与方真实姓名。如果非空,将校验收款支付宝账号姓名一致性。
//当 identity_type=ALIPAY_LOGON_ID 时,本字段必填。若传入该属性,则在支付宝回单中将会显示这个属性。
payeeInfo.setName(StringUtil.isbank(bank, TableEnum.guanyi_shop_bankcar.bank_name));
model.setPayeeInfo(payeeInfo);
model.setTransAmount(this.tixianBalance(tixian));//订单总金额,单位为元,不支持千位分隔符,精确到小数点后两位,取值范围[0.1,100000000]。
model.setProductCode("TRANS_ACCOUNT_NO_PWD");//销售产品码。单笔无密转账固定为 TRANS_ACCOUNT_NO_PWD
model.setOrderTitle(this.getCongigStr(ConfigEnum.alipay_balance.title, channelid));//转账业务的标题,用于在支付宝用户的账单里显示。
request.setBizModel(model);
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
if (response.isSuccess()) {
tixian.put(TableEnum.component_accounttx.pay_state.toString(), "5");
tixian.put(TableEnum.component_accounttx.pay_no.toString(), response.getOrderId());
tixian.put(TableEnum.component_accounttx.pay_bak.toString(), StringUtil.isbank(channel, TableEnum.component_companypay_channel.channel_name) + ":代付成功");
tixian.put(TableEnum.component_accounttx.pay_time.toString(), new Date());
tixian.put(TableEnum.component_accounttx.companypay_channel.toString(), channelid);
accounttxMapper.baseUpdata(tixian);
} else {
if ("BALANCE_IS_NOT_ENOUGH".equals(response.getSubCode())) {
accounttxStopMapper.add(txid, "余额不足");
} else {
tixian.put(SystemConstant.results, "1");
tixian.put(SystemConstant.message, response.getSubMsg());
accounttxMapper.tuihui(tixian);
}
}
} catch (Exception e) {
accounttxStopMapper.add(txid, "程序异常:" + e.getMessage());
}
}