创建担保

生成担保订单并给付款方支付,支付完成后,对于付款来说,这笔费用是冻结状态。由开发者调用蜂巢进行转账给其他支付宝。 如果交易中止,开发者也可以调用取消担保订单接口,剩余的资金(充值金额-手续费-已转账金额)原路退回给付款方。

说明:担保订单生成后并由于付款方付款后, 不管后续买卖双方交易是否正常完成或中途取消,手续费都不会退还。

1.请求参数:

请求URL:

POST https://kf.fw199.com/gateway/partner/pay/alipay/wallet/take/order

基础参数

参数名 类型 说明 示例
appid String 合作伙伴AppId uwkahf@jfs92
timestamp String 当前时间戳
sign String 接口签名 如何计算生成见示例代码
alipay_logon_id String 签约的付款方支付宝账号
out_biz_no String 网站侧订单号
order_title String 订单标题
amount int 要充值的订单金额,注意单位是分,不是元 100元,则传入10000
notice_url String 网站侧的回调地址,商家对订单付款后,蜂巢会POST异步请求此url,将结果带回

2. 请求示例代码(Java)

   @Test  
public void FCWalletTakeOrder() 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("alipay_logon_id",  "abcxxxxxxxx@gmail.com");   
    data.put("out_biz_no",  "1686742412677");  
    data.put("order_title",  "618达人招集大会");  
    data.put("amount",  "5000");  
    data.put("notice_url",  "http://yousite.com/fc/paynotice");  
    // 签名  
    data.put("sign", Utils.Sign(data,Config.AppSecret));  
    // 调用服务API  
    String rsp =doHttpRequest(Config.FCWalletTakeOrderUrl ,data);  
    System.out.println(rsp);  
}

说明:

  1. 如果第一次付款方没有付款成功, 可以再次请求接口,传入相同的商家侧订单号out_biz_no进来,重新获取付款链接。
    金额,标题 ,还是会使用之前的订单的金额和标题。
  2. 如果订单状态是待付款状态的,可传入老的商家侧订单号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,
  "timestamp": 1686742720,
  "sign": "29d7aebed0d0717520a351a979ce5a219297721f666e4a45cf118b0dac691190"
}

返回参数说明

参数名 类型 说明 示例
action String 通知类型,guarantee_paid表示担保交易支付
sign String 服务端返回的签名,为安全起见,开发者需要进行验签
fc_biz_no String 蜂巢侧订单号,后续给其他支付宝转账时,需要传入
out_biz_no String 开发者请求时传入的订单号
trans_amount int 付款方充值金额,单位是分,切记!与创建时担保订单金额一致。
available_amount int 可用金额,单位是分,切记! 可用金额=充值金额-手续费
timestamp long 时间戳,秒

接收的回调的代码


@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