用户抽奖结果的订阅
接口提供方
该接口需要由开发者提供给燃豆
接口说明
抽奖结果订阅接口,对接后可以接收到抽奖相关的结果通知。 可通过该订阅,开发者可结合自身产品实现想要的功能,比如用户抽到商品类奖品,该商品发货的时候,可以通过自身推送系统消息告知用户商品已发货的信息,提升产品体验。
抽奖具体推送时间点下图中黄色框中所示:

- 抽中【积分】,获得该奖品即推送;
- 抽中【再抽1次】,获得该奖品即推送;
- 抽中【优惠券】,系统自动发放,发货该奖品时推送;
- 抽中【实物商品】【直充商品】,因领取商品是需要用户手动填写收货信息/充值账号信息
- 如果用户填写了收货信息/充值账号信息,系统发货该奖品时推送;
- 如果用户未在领奖期限内填写收货信息/充值账号信息,导致过期未领。领奖过期时推送。
参数说明
该接口除了公共必传参数外,还包括以下参数:
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
uid | 是 | string[1,64] | 需要充值的用户id,该id由开发者在免登接口中传给燃豆的用户唯一标志 |
mall_no | 是 | string[6,6] | 商城的唯一编号,表示用户下单的所在商城编号,如JF_001 |
serialNo | 是 | string[18,20] | 表示该次抽奖的唯一编号,如I388364710157766657 |
credits | 是 | int | 表示该次抽奖所花费的积分数量,在免费抽奖或者使用“再抽一次”奖项时为0 |
created_at | 是 | date | 发生时间,格式为yyyy-MM-dd HH:mm:ss,如2021-09-12 12:34:56 |
drawinggame_detail | 是 | JSONObject | 描述跟本次抽奖相关的信息,object中的参数请查看 |
hit | 是 | string[2,3] | 枚举值:YES表示中奖,NO表示未中奖 |
receive | 否 | string[2,3] | 表示是否领奖成功,仅当hit为YES时才有,枚举值:YES表示领奖成功,NO表示领奖失败(当前只有在领奖时间过期后才会失败) |
prize | 否 | JSONObject | 描述本次的奖品信息,仅当hit为YES时才有,object中的参数请查看 |
drawinggame_detail参数说明
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
title | 是 | string[1,64] | 开发者后台中本次抽奖活动名称 |
uniqueID | 是 | string[6,6] | 开发者后台中本次抽奖活动编号 |
prize参数说明
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
type | 是 | string[1,64] | 奖品类型,当前共5类,枚举值:GOODS_MATERIAL(实物类商品)、GOODS_COUPON(优惠券类商品)、GOODS_CHARGE(直充类商品)、CREDITS(积分)、FREE_DRAW(再来一次) |
name | 是 | string[1,256] | 开发者在开发者后台配置的奖品名称 |
credits_gain | 否 | int | 当receive为YES且type为CREDITS时返回,表示用户本次抽奖获得的新增积分数量 |
goods | 否 | JSONObject | 当receive为YES且type为商品类奖品(即为GOODS_MATERIAL、GOODS_COUPON、GOODS_CHARGE)时返回,表示用户本次抽奖获得的商品信息,object中的参数请查看 |
order_result | 否 | string[2,3] | 枚举值:当receive为YES且prize.type为商品类奖品(即为GOODS_MATERIAL、GOODS_COUPON、GOODS_CHARGE)时,会在系统中产生订单,如果订单成功返回“success”,否则返回“fail” |
prize.goods参数说明
参数 | 是否必须 | 类型[长度限制] | 说明 |
---|---|---|---|
product_no | 是 | string[0,20] | 商品编号,若未填则为空字符串 |
product_name | 是 | string[1,255] | 商品标题 |
返回结果
在收到消息推送后,开发者需要以HTTP响应码为200且body为“success”纯文本字符串(不包含引号)返回给燃豆,表示已正确处理了该消息,其他返回均视作失败。
注意事项
- 抽奖业务流程较长,情况较多,请开发者做好相应的处理。
代码示例
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->drawingGameSubscription($params);
$client->setDebug(true); // 切换沙箱环境
if ($event->isHit()) { // 是否中奖
echo '中奖啦';
if ($event->isReceive()) { // 是否领奖
echo '领奖啦';
print_r($event->getPrize()); // 打印奖品信息
if ($event->isGoodsPrize()) {
echo '中了商品类奖品';
print_r($event->getGoodsPrize()); // 打印商品信息
echo $event->isPrizeGoodsOrderSuccess() ? '商品类奖品发放成功' : '商品类奖品发放失败'; // 打印商品类奖品产生的订单是否成功
} elseif ($event->isCreditsPrize()) {
echo '中了积分类商品';
print_r($event->getCreditsGain()); // 抽中的积分数量
} elseif ($event->isFreeDrawPrize()) {
echo '中了“再来一瓶”';
}
} else {
echo '未领奖';
}
} else {
echo '很遗憾,未中奖';
}
} catch (RdException $e) {
print_r($e->getMessage());
return response('fail', 400);
}
return response('success', 200);
JAVA
import com.randou_tech.ClientBuilder;
import com.randou_tech.RdClient;
import com.randou_tech.RdException;
import com.randou_tech.event.DrawingPrizeEvent;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/subscription-drawinggame")
public String subscriptionDrawinggame(HttpServletRequest request) {
RdClient client = ClientBuilder.build(appid, appsecret);
// client.setDebug(debug);
try {
DrawingPrizeEvent event = client.drawingGameSubscription(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);
// }
// DrawingPrizeEvent event = client.drawingGameSubscriptionWithParams(params);
System.out.println(event);
if (event.isHit()) { // 是否中奖
System.out.println("中奖啦");
if (event.isReceive()) { // 是否领奖
System.out.println("领奖啦");
System.out.println(event.getPrize());
if (event.isCreditsPrize()) {
System.out.println("领的是积分奖:" + event.getCreditsGain());
} else if (event.isGoodsPrize()) {
System.out.println("领的是商品奖:" + event.getGoodsPrize());
System.out.println("商品类奖品是否发放成功" + event.isPrizeGoodsOrderSuccess());
} else if (event.isFreeDrawPrize()) {
System.out.println("领的是再来一瓶:" + event.prize.type);
}
} else {
System.out.println("没领奖");
}
} else {
System.out.println("未中奖");
}
return "success";
} catch (RdException e) {
System.out.println(e);
return "fail";
}
}