开发者自有商品直充接口

接口提供方

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

接口说明

用户在积分商城通过兑换或抽奖获得开发者自有的直充商品时,燃豆服务端会通过该接口为用户发起充值。

参数说明

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

参数是否必须类型[长度限制]说明
uidstring[1,64]需要充值的用户id,该id由开发者在免登接口中传给燃豆的用户唯一标志
mall_nostring[6,6]商城的唯一编号,表示用户下单的所在商城编号,如JF_001
product_nostring[1,20]开发者在燃豆后台填写的商品的编号
descriptionstring[1,255]本次充值请求的文字描述
orderNostring[18,20]预扣订单编号,即预扣积分时推送的预扣订单编号,如T388364710157766657
bizNostring[10,32]预扣事件中开发者返回的预扣订单号,请注意,在免费抽奖(此时没有积分预扣事件发生)的情况下,没有bizNo
accountstring[1,128]如果该直充商品配置了需要填写账号才能发起充值,燃豆服务端会通过该字段传递用户需要充值的账号

返回结果

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

参数是否必须类型[长度限制]说明
statusstring[4,7]充值结果(枚举值),success(成功)、fail(失败)、process(处理中)
messagestring[0,255]status为fail的情况说明,如成功可以传空字符串
chargeBizNostring[10,32]开发者系统内部充值单号,status为success或process时必传,由开发者自行生成,要求10-32个字符内,只能包含数字、大小写字母、_和-

返回案例

充值成功

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

充值失败

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

充值处理中

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

注意事项

  1. 对于处理中的充值单,燃豆会通过自有充值类商品结果查询接口,发起后续的充值单结果查询;

代码示例

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;
}