用户抽奖结果的订阅

接口提供方

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

接口说明

抽奖结果订阅接口,对接后可以接收到抽奖相关的结果通知。 可通过该订阅,开发者可结合自身产品实现想要的功能,比如用户抽到商品类奖品,该商品发货的时候,可以通过自身推送系统消息告知用户商品已发货的信息,提升产品体验。

抽奖具体推送时间点下图中黄色框中所示:

  • 抽中【积分】,获得该奖品即推送;
  • 抽中【再抽1次】,获得该奖品即推送;
  • 抽中【优惠券】,系统自动发放,发货该奖品时推送;
  • 抽中【实物商品】【直充商品】,因领取商品是需要用户手动填写收货信息/充值账号信息
    • 如果用户填写了收货信息/充值账号信息,系统发货该奖品时推送;
    • 如果用户未在领奖期限内填写收货信息/充值账号信息,导致过期未领。领奖过期时推送。

参数说明

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

参数是否必须类型[长度限制]说明
uidstring[1,64]需要充值的用户id,该id由开发者在免登接口中传给燃豆的用户唯一标志
mall_nostring[6,6]商城的唯一编号,表示用户下单的所在商城编号,如JF_001
serialNostring[18,20]表示该次抽奖的唯一编号,如I388364710157766657
creditsint表示该次抽奖所花费的积分数量,在免费抽奖或者使用“再抽一次”奖项时为0
created_atdate发生时间,格式为yyyy-MM-dd HH:mm:ss,如2021-09-12 12:34:56
drawinggame_detailJSONObject描述跟本次抽奖相关的信息,object中的参数请查看
hitstring[2,3]枚举值:YES表示中奖,NO表示未中奖
receivestring[2,3]表示是否领奖成功,仅当hit为YES时才有,枚举值:YES表示领奖成功,NO表示领奖失败(当前只有在领奖时间过期后才会失败)
prizeJSONObject描述本次的奖品信息,仅当hit为YES时才有,object中的参数请查看

drawinggame_detail参数说明

参数是否必须类型[长度限制]说明
titlestring[1,64]开发者后台中本次抽奖活动名称
uniqueIDstring[6,6]开发者后台中本次抽奖活动编号

prize参数说明

参数是否必须类型[长度限制]说明
typestring[1,64]奖品类型,当前共5类,枚举值:GOODS_MATERIAL(实物类商品)、GOODS_COUPON(优惠券类商品)、GOODS_CHARGE(直充类商品)、CREDITS(积分)、FREE_DRAW(再来一次)
namestring[1,256]开发者在开发者后台配置的奖品名称
credits_gainint当receive为YES且type为CREDITS时返回,表示用户本次抽奖获得的新增积分数量
goodsJSONObject当receive为YES且type为商品类奖品(即为GOODS_MATERIAL、GOODS_COUPON、GOODS_CHARGE)时返回,表示用户本次抽奖获得的商品信息,object中的参数请查看
order_resultstring[2,3]枚举值:当receive为YES且prize.type为商品类奖品(即为GOODS_MATERIAL、GOODS_COUPON、GOODS_CHARGE)时,会在系统中产生订单,如果订单成功返回“success”,否则返回“fail”

prize.goods参数说明

参数是否必须类型[长度限制]说明
product_nostring[0,20]商品编号,若未填则为空字符串
product_namestring[1,255]商品标题

返回结果

在收到消息推送后,开发者需要以HTTP响应码为200且body为“success”纯文本字符串(不包含引号)返回给燃豆,表示已正确处理了该消息,其他返回均视作失败。

注意事项

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