自有充值类商品结果查询接口
接口提供方
该接口需要由开发者提供给燃豆
接口说明
燃豆在为用户发起充值请求后,如果开发者的充值处理无法即刻完成,即充值接口中status返回process,燃豆后续会通过该接口查询充值结果。
如果开发者的自有充值逻辑没有“处理中”的逻辑,可不对接该接口。
查询逻辑说明
开发者在充值接口中返回了处理中后,燃豆服务端会在发起充值后的以下时间点(5s,15s,1m,10m,30m,1h,2h,5h)发起订单查询,直至开发者返回充值成功或者充值失败(即status字段返回了fail或success),如果在5个小时后最后一次查询中开发者仍返回充值单处理中状态,此时燃豆会认为该笔订单充值失败,同时取消对应商品订单。
请开发者务必保证至少在5小时内完成全部充值流程,如有特殊情况,请在上线前联系客服。
参数说明
该接口除了公共必传参数外,还包括以下参数:
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
orderNo | 是 | string[18,20] | 预扣订单编号,即预扣积分时推送的预扣订单编号,如T388364710157766657 |
chargeBizNo | 是 | string[10,32] | 开发者系统内部充值单号,由充值接口中返回 |
返回结果
开发者需以json格式返回响应内容,且不论查询结果如何,http响应码必须为200,返回码非200的情况下燃豆会认为本次请求失败,json对象中的响应参数如下:
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
status | 是 | string[4,7] | 充值结果(枚举值),success(成功)、fail(失败)、process(处理中) |
message | 是 | string[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;
}