事件埋点
<p>[TOC]</p>
<h3>1、【事件埋点】接口功能说明</h3>
<pre><code>调用该接口发送事件埋点,如华为的快应用</code></pre>
<h5>请求URL</h5>
<ul>
<li><a href="https://exc.llewan.com/v1/CPServer/actionReport">https://exc.llewan.com/v1/CPServer/actionReport</a></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>POST </li>
</ul>
<h5>数据格式</h5>
<ul>
<li>请求:Content-Type: application/json</li>
<li>响应:Content-Type: application/json</li>
</ul>
<h5>请求参数</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">game</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>游戏标识</td>
</tr>
<tr>
<td style="text-align: left;">platform</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>平台标识, 华为快应用:huawei</td>
</tr>
<tr>
<td style="text-align: left;">mark </td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td><span style="color:red">请求唯一标识,不超过64位</span>,cp方需要保证每次调用唯一,相同的mark值会被忽略</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>上报事件,json字符串,<span style="color:red">最多100个乐玩UID</span></td>
</tr>
<tr>
<td style="text-align: left;">timeStamp</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">integer</td>
<td>时间戳,单位为:s</td>
</tr>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,签名方式见下说明</td>
</tr>
</tbody>
</table>
<h5>上报事件(data)具体参数说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">event_key</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>事件KEY</td>
</tr>
<tr>
<td style="text-align: left;">event_time</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">Number</td>
<td>事件上报时间戳,单位:毫秒。</td>
</tr>
<tr>
<td style="text-align: left;">properties</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">Object</td>
<td><span style="color:red">没有不传</span>,事件属性列表,包括公共属性和事件属性。</td>
</tr>
</tbody>
</table>
<h5>请求示例</h5>
<pre><code>// 单个角色事件
{
&quot;game&quot;: &quot;jihewangguo-huawei&quot;,
&quot;platform&quot;:&quot;huawei&quot;,
&quot;mark&quot;:&quot;26520207_10_22814080_17521323511&quot;,
&quot;data&quot;: &quot;[{\&quot;uid\&quot;:\&quot;26520207_10\&quot;,\&quot;roleId\&quot;:\&quot;22814080\&quot;,\&quot;eventKey\&quot;:\&quot;#user_login\&quot;,\&quot;eventTime\&quot;:1752132350}]&quot;,
&quot;timeStamp&quot;:&quot;1752132350&quot;,
&quot;sign&quot;:&quot;35fc76285a0b2b9c59e92e9bf1359908&quot;
}
//多个角色事件
{
&quot;game&quot;: &quot;jihewangguo-huawei&quot;,
&quot;platform&quot;:&quot;huawei&quot;,
&quot;mark&quot;:&quot;26520207_10_22814080_1752198463&quot;,
&quot;data&quot;: &quot;[{\&quot;uid\&quot;:\&quot;26520207_10\&quot;,\&quot;roleId\&quot;:\&quot;22814080\&quot;,\&quot;eventKey\&quot;:\&quot;#sign_in\&quot;,\&quot;eventTime\&quot;:1752198462},{\&quot;uid\&quot;:\&quot;46981640_10\&quot;,\&quot;roleId\&quot;:\&quot;29441628\&quot;,\&quot;eventKey\&quot;:\&quot;#sign_in\&quot;,\&quot;eventTime\&quot;:1752198462}]&quot;,
&quot;timeStamp&quot;:&quot;1752198462&quot;,
&quot;sign&quot;:&quot;b37c697724ad08b3053746086e3e3aca&quot;
}</code></pre>
<h5>返回示例</h5>
<pre><code>// 成功
{
&quot;code&quot;: 1,
&quot;msg&quot;: &quot;success&quot;,
&quot;d&quot;: []
}
// 异常
{&quot;code&quot;: -1, &quot;msg&quot;: &quot;param error&quot;} // 参数错误,缺少请求参数
</code></pre>
<h5>签名方式,同封禁请求</h5>
<ul>
<li><strong>参与签名字段说明</strong>
以上请求参数除sign外都需要参与签名</li>
<li><strong>签名规则</strong>
1、签名串规则:所有参与签名的参数,按参数名(key)字典序升序排序,以key=value格式,并用【&】连接组成签名串,最后连接服务端签名秘钥
2、对签名串进行MD5加密得到签名(32位小写字符串),PHP示例如下:</li>
</ul>
<pre><code>&lt;?php
function getSign($params, $secret)
{
//剔除sign字段
if (isset($params[&#039;sign&#039;])) unset($params[&#039;sign&#039;]);
//对数组按key升序排序
ksort($params);
//拼接签名串
$formatStr = &#039;&#039;;
foreach ($params as $key =&gt; $v) {
$formatStr .= $key . &#039;=&#039; . $v . &#039;&amp;&#039;;
}
return md5(substr($formatStr, 0, -1) . $secret);
}
$secret = &#039;abc&#039;; //服务端签名秘钥
$params = [
&#039;game&#039; =&gt; &#039;jihewangguo-huawei&#039;,
&#039;platform&#039; =&gt; &#039;huawei&#039;,
...
]; //请求参数
$sign = getSign($params, $secret); //签名
</code></pre>