# 发放 API 奖品 / issue_prize
>[info] 抽奖系统支持多种奖品类型,对于实物奖品/卡密等奖品可以由平台内部发放,但是接入 API 后,将支持 API 奖品。API 奖品是指由由应用端自动发放的,比如抵用券、金币、游戏道具等。在用户抽中 API 奖品后,抽奖工坊将通过此 API 通知应用端进行奖品发放。
## **API 地址**
>[info] 此 API 由云端往您的应用端 API 地址发送请求
## **API 将传入参数**
<table>
<tr style="background:#f5f5f5;">
<th style="width:150px">参数名</th>
<th style="width:120px">类型</th>
<th style="width:100px">必须</th>
<th style="width:200px">示例</th>
<th>说明</th>
</tr>
<tr>
<td>api</td>
<td>字符串</td>
<td>是</td>
<td>issue_prize</td>
<td>API名称,此处固定传入 issue_prize</td>
</tr>
<tr>
<td>record_id</td>
<td>整数</td>
<td>是</td>
<td>20301</td>
<td>中奖记录的唯一ID</td>
</tr>
<tr>
<td>prize_identifier</td>
<td>字符串</td>
<td>是</td>
<td>gold_88</td>
<td>奖品标识,详解表格下方说明</td>
</tr>
<tr>
<td>user_identifier</td>
<td>字符串</td>
<td>是</td>
<td>10001</td>
<td>用户唯一标识</td>
</tr>
<tr>
<td>exchange_info</td>
<td>JSON字符串</td>
<td>否</td>
<td>{"手机":"18012345678"}</td>
<td>用户提交的兑奖信息,详见下方表格说明</td>
</tr>
<tr>
<td>time</td>
<td>整数</td>
<td>是</td>
<td>1576830778</td>
<td>时间戳 (Unix timestamp),精确到秒</td>
</tr>
<tr>
<td>token</td>
<td>字符串</td>
<td>是</td>
<td>xxxxxxxxxx</td>
<td>访问令牌 token</td>
</tr>
</table>
#### **参数详细说明**
* **record_id**:是中奖记录的唯一 ID。有时候因为网络或程序错误导致 API 没有正确返回成功信息。抽奖工坊可能会二次通知 API 发放奖品。这种情况,就有可能造成重复发放奖品。因此在发放奖品的时候,可以记录这个唯一 ID,在发放奖品的时候检查一下对于的 ID 是否已经发放过。若发放过了,就直接返回 success 标识,避免重复发放奖品。
* **prize_identifier**:这个参数是奖品指的标识。在抽奖工坊添加 API 奖品的时候,除了奖品名称外,还需要填写一个奖品标识,即用于此处传送给应用端 API 。这个标识可以让我们更灵活的设置奖项。比如一个金币的奖品,可以设置这样一个标识:gold_xx,后面的 xx 表示金币的数量。例如 gold_88 表示 88 个金币,gold_120 表示 120 个金币。这样就可以在抽奖平台设置任意数额的金币奖品了。
* **exchange_info**:对于一些特殊的 API 奖品,有可能需要让中奖用户填一些兑奖的表达。此参数将回传用户填写的信息。比如电话号码、游戏账号等。
## **返回**
通讯成功请返如以下 JSON,其中 msg 中的信息会原样显示给用户:
```
{"status":"success","msg":"优惠券已发放至您的账户,请注意查收。"}
```
失败返回以下 JSON:
```
{"status":"error","msg":"系统错误,请稍后再试!"}
```
## PHP 代码片段示例
```
<?php
......
//发放奖品
case 'issue_prize':
//获得参数
$uid = (int)$_POST["user_identifier"]; //获得中奖用户UID
$prize_identifier = $_POST["prize_identifier"]; //奖品表示
//根据奖品标识获得奖品信息
$tempArr = explode("_",$prizeIdentifier);
$type = $tempArr[0]; //奖品类型
$num = (int)$tempArr[1]; //数量
//在实际应用中,可以根据奖品的类型不同分别执行不同的奖品发放操作,例如发放道具、开通VIP权限等
switch($type){
case "gold": //金币
DB("user")->where("uid",$uid)->setInc("gold",$num);
//返回提示
exit('{"status":"success","msg":"金币已发放至您的账户,请注意查收。"}');
break;
case "coupon": //抵用券
DB("user")->where("uid",$uid)->setInc("coupon",$num);
//返回提示
exit('{"status":"cuccess","msg":"{$num}抵用券以发放至您的账户,请注意查收。"}');
break;
default:
$this->echo_json('error','参数错误,所兑换的奖品无效。');
break;
}
.....
?>
```