开发者自有商品直充接口
接口提供方
该接口需要由开发者提供给燃豆
接口说明
用户在积分商城通过兑换或抽奖获得开发者自有的直充商品时,燃豆服务端会通过该接口为用户发起充值。
参数说明
该接口除了公共必传参数外,还包括以下参数:
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
uid | 是 | string[1,64] | 需要充值的用户id,该id由开发者在免登接口中传给燃豆的用户唯一标志 |
mall_no | 是 | string[6,6] | 商城的唯一编号,表示用户下单的所在商城编号,如JF_001 |
product_no | 是 | string[1,20] | 开发者在燃豆后台填写的商品的编号 |
description | 是 | string[1,255] | 本次充值请求的文字描述 |
orderNo | 是 | string[18,20] | 预扣订单编号,即预扣积分时推送的预扣订单编号,如T388364710157766657 |
bizNo | 否 | string[10,32] | 预扣事件中开发者返回的预扣订单号,请注意,在免费抽奖(此时没有积分预扣事件发生)的情况下,没有bizNo |
account | 否 | string[1,128] | 如果该直充商品配置了需要填写账号才能发起充值,燃豆服务端会通过该字段传递用户需要充值的账号 |
返回结果
开发者需以json格式返回响应内容,且不论充值结果如何,http响应码必须为200,返回码非200的情况下燃豆会认为本次充值请求失败,取消订单,json对象中的响应参数如下:
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
status | 是 | string[4,7] | 充值结果(枚举值),success(成功)、fail(失败)、process(处理中) |
message | 是 | string[0,255] | status为fail的情况说明,如成功可以传空字符串 |
chargeBizNo | 否 | string[10,32] | 开发者系统内部充值单号,status为success或process时必传,由开发者自行生成,要求10-32个字符内,只能包含数字、大小写字母、_和- |
返回案例
充值成功
{
"status": "success",
"message": "充值成功",
"chargeBizNo": "aaaaaaaaaaaa"
}
充值失败
{
"status": "fail",
"message": "充值失败"
}
充值处理中
{
"status": "process",
"message": "充值处理中",
"chargeBizNo": "aaaaaaaaaaaa"
}
注意事项
- 对于处理中的充值单,燃豆会通过自有充值类商品结果查询接口,发起后续的充值单结果查询;
代码示例
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->charge($params);
print_r($event);
// 充值处理
todo($event);
// 充值成功返回
return response()->json([
'status' => 'process', // process表示充值处理中,异步处理充值过程,返回success表示充值无需异步处理,直接充值成功
'message' => '充值处理中',
'chargeBizNo' => 'No1111111',
]);
} 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.GoodsChargeEvent;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/charge")
public Map<String, String> charge(HttpServletRequest request) {
String appid = "aaaaaaaaaaaaaaaaaaaaaaaa";
String appsecret = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
RdClient client = ClientBuilder.build(appid, appsecret);
Map<String, String> map = new HashMap<>();
try {
GoodsChargeEvent event = client.charge(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);
// }
// GoodsChargeEvent event = client.chargeWithParams(params);
System.out.println(event.hasAccount());
System.out.println(event.hasBizNo());
System.out.println(event.toString());
// 充值处理
// todo()
// 充值成功样例
map.put("status", "process"); // process表示充值处理中,异步处理充值过程,返回success表示充值无需异步处理,直接充值成功
map.put("message", "充值成功");
map.put("chargeBizNo", "3333333333");
} catch (RdException e) {
map.put("status", "fail"); // 充值失败status返回fail
map.put("message", "充值失败");
}
return map;
}