自有充值类商品结果查询接口

接口提供方

该接口需要由开发者提供给燃豆

接口说明

燃豆在为用户发起充值请求后,如果开发者的充值处理无法即刻完成,即充值接口中status返回process,燃豆后续会通过该接口查询充值结果。

如果开发者的自有充值逻辑没有“处理中”的逻辑,可不对接该接口

查询逻辑说明

开发者在充值接口中返回了处理中后,燃豆服务端会在发起充值后的以下时间点(5s,15s,1m,10m,30m,1h,2h,5h)发起订单查询,直至开发者返回充值成功或者充值失败(即status字段返回了fail或success),如果在5个小时后最后一次查询中开发者仍返回充值单处理中状态,此时燃豆会认为该笔订单充值失败,同时取消对应商品订单

请开发者务必保证至少在5小时内完成全部充值流程,如有特殊情况,请在上线前联系客服。

参数说明

该接口除了公共必传参数外,还包括以下参数:

参数是否必须类型[长度限制]说明
orderNostring[18,20]预扣订单编号,即预扣积分时推送的预扣订单编号,如T388364710157766657
chargeBizNostring[10,32]开发者系统内部充值单号,由充值接口中返回

返回结果

开发者需以json格式返回响应内容,且不论查询结果如何,http响应码必须为200,返回码非200的情况下燃豆会认为本次请求失败,json对象中的响应参数如下:

参数是否必须类型[长度限制]说明
statusstring[4,7]充值结果(枚举值),success(成功)、fail(失败)、process(处理中)
messagestring[0,255]status为fail的情况说明,如成功可以传空字符串

返回案例

充值成功

{
    "status": "success",
    "message": "充值成功",
}

充值失败

{
    "status": "fail",
    "message": "充值失败"
}

充值处理中

{
    "status": "process",
    "message": "充值处理中",
}

代码示例

PHP


use Randou\Exception\RdException;
use Randou\RdClient;
use Randou\RdClientBuilder;


$appid = 'aaaaaaaaaaaaaaaaaaaaaaaa';
$appsecret = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';

// 获取全部请求数据
$params = $request->all();

try {
    $client = RdClientBuilder::getClient($appid, $appSecret);
    $event = $client->chargeQuery($params);
    print_r($event);

//    检查本地的充值处理结果
    check($event);

//    充值成功返回
    return response()->json([
        'status'      => 'success',  // status返回success表示充值已处理完毕并且充值成功,process表示充值仍然在处理中
        'message'     => '充值处理中'
    ]);

} catch (RdException $e) {
  print_r($e);
  
}

// 充值失败返回
return response()->json([
    'status'  => 'fail',  // 充值失败status返回fail
    'message' => '当前无法充值',
])


JAVA



import com.randou_tech.ClientBuilder;
import com.randou_tech.RdClient;
import com.randou_tech.RdException;
import com.randou_tech.event.GoodsChargeQueryEvent;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;


@RequestMapping("/chargeQuery")
public Map<String, String> chargeQuery(HttpServletRequest request) {
    String appid = "aaaaaaaaaaaaaaaaaaaaaaaa";
    String appsecret = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";

    RdClient client = ClientBuilder.build(appid, appsecret);
    Map<String, String> map = new HashMap<>();
    try {
        GoodsChargeQueryEvent event = client.chargeQuery(request);

        // 如果项目中没有javax.servlet.http.HttpServletRequest,可从request中自行获取出全部参数,以下为从jakarta.servlet.http.HttpServletRequest对象中获取参数
        // Enumeration<String> parameterNames = request.getParameterNames();
        // Map<String, String> params = new HashMap<>();
        // // 遍历参数名并获取对应的值
        // while (parameterNames.hasMoreElements()) {
        //     String paramName = parameterNames.nextElement();
        //     String paramValue = request.getParameter(paramName); // 只取第一个值
        //     params.put(paramName, paramValue);
        // }
        // GoodsChargeQueryEvent event = client.chargeQueryWithParams(params);
        
//        查询本地充值结果
//      check(event);

//        充值成功样例
        map.put("status", "success"); // status返回success表示充值已处理完毕并且充值成功,process表示充值仍然在处理中,
        map.put("message", "充值成功");
    } catch (RdException e) {
        map.put("status", "fail");  // 充值失败status返回fail
        map.put("message", "充值失败");
    }
    return map;
}