转账
将担保订单的有效金额,转给其他支付宝用户,收款方可以是企业支付宝或是个人支付宝。
1.请求参数:
请求URL:
POST https://kf.fw199.com/gateway/partner/pay/alipay/wallet/trans
基础参数
参数名 | 类型 | 说明 | 示例 |
---|---|---|---|
appid | String | 合作伙伴AppId | uwkahf@jfs92 |
timestamp | String | 当前时间戳 | |
sign | String | 接口签名 | 如何计算生成见示例代码 |
fc_biz_no | String | 必填,传入原担保订单中的蜂巢订单号fc_biz_no | |
to_user | json | 必填,收款方信息 | |
– out_biz_no | String | 必填,开发者侧订单号,支持幂等传入 | |
– alipay_logon_id | String | 必填,收款方支付宝账号,一般是手机号或邮箱 | |
– alipay_real_name | String | 必填,收款方支付宝的姓名,一定要实名 | |
– trans_amount | int | 必填,转账金额,单位为分,切记 | |
– order_title | String | 必填,交易标题,会在支付宝交易记录里显示 |
2. 请求示例代码(Java)
@Test
public void fcWalletTransToUser() throws Exception {
Map<String, String> data = new HashMap<String, String>();
data.put("appid", Config.AppId);
Long timestamp = System.currentTimeMillis() / 1000;
data.put("timestamp", timestamp.toString());
data.put("fc_biz_no", "20230613194527600237");
String toUser = "{ " +
"\"out_biz_no\":\"20230613-006\"," +
"\"alipay_logon_id\":\"zhangshang@163.com\"," +
"\"alipay_real_name\":\"张三\"," +
"\"trans_amount\": 490," +
"\"order_title\":\"达人佣金\"" +
" }";
data.put("to_user", toUser);
// 签名
data.put("sign", Utils.Sign(data,Config.AppSecret));
// 调用服务API
String rsp =doHttpRequest(Config.FCWalletTransToUserUrl ,data);
System.out.println(rsp);
}
说明:
- 如果第一次付款方没有付款成功, 可以再次请求接口,传入相同的商家侧订单号out_biz_no进来,重新获取付款链接。
金额,标题 ,还是会使用之前的订单的金额和标题。 - 如果订单状态是待付款状态的,可传入老的商家侧订单号out_biz_no进行重新付款。如果付过款了,则会提示状态不对,不用重复提交。
3. 接口返回付款链接:
网站调用下单支付接口,会得到一个付款链接, 在电脑上点击此链接, 跳到支付宝收银台。
{
"code": 0,
"message": "ok",
"data": "https://kf.fw199.com/gateway/partner/pay/alipay/wallet/recharge?bizid=20230614193801715551",
"trace_id": ""
}
4. 付款完成回调通知
付款方完成付款后,蜂巢将异步通知(POST)给开发者在创建担保订单时传入的网址notice_url。
{
"action": "guarantee_paid",
"fc_biz_no": "20230614193332551094",
"out_biz_no": "1686742412677",
"trans_amount": 5000,
"available_amount": 4985,
"sign": "29d7aebed0d0717520a351a979ce5a219297721f666e4a45cf118b0dac691190"
}
返回参数说明
参数名 | 类型 | 说明 | 示例 |
---|---|---|---|
action | String | 通知类型,guarantee_paid表示担保交易支付 | |
sign | String | 服务端返回的签名,为安全起见,开发者需要进行验签 | |
fc_biz_no | String | 蜂巢侧订单号,后续给其他支付宝转账时,需要传入 | |
out_biz_no | String | 开发者请求时传入的订单号 | |
trans_amount | int | 付款方充值金额,单位是分,切记!与创建时担保订单金额一致。 | |
available_amount | int | 可用金额,单位是分,切记! 可用金额=充值金额-手续费 |
接收的回调的代码
@RequestMapping("/recharge/notice")
@ResponseBody
public String rechargeNotice(@RequestBody String jsonData , HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
try {
JSONObject jsonObject = JSON.parseObject(jsonData);
String fcBizNo = jsonObject.getString("fc_biz_no");
String bizOutNo = jsonObject.getString("out_biz_no");
String transAmount = jsonObject.getString("trans_amount");
String availableAmount = jsonObject.getString("available_amount");
// 构建签名参数
Map<String, String> data = new HashMap<String, String>();
data.put("fc_biz_no", fcBizNo );
data.put("out_biz_no", bizOutNo );
data.put("trans_amount", transAmount );
data.put("available_amount", availableAmount);
data.put("action", jsonObject.getString("action"));
String fcSign = jsonObject.getString("sign");
String sign = Utils.Sign(data, Config.AppSecret);
//参数签名
if( sign.equals(fcSign) ){
return "ERROR,签名不相等";
}
// 根据收到的订单处理,处理逻辑
System.out.println("处理业务逻辑");
//处理成功后,一定返回 SUCCESS
return "SUCCESS";
} catch (Exception ex) {
ex.printStackTrace();
logger.error(ex.getMessage());
//日志处理
}
return "SUCCESS"; //处理成功后,一定返回 SUCCESS}
文档更新时间: 2023-09-07 16:13 作者:admin