CPS上报接口文档
<p>[TOC]</p>
<h1>文档介绍</h1>
<p>数据上报CPS接口。接入前先在CPS后台添加对应的游戏appid,提供生成加密密钥 secret_key。
接口主域名为 <code>https://cps.moyangmoyang.com</code>
全部采用POST请求,请求必须有加密签名,支持JSON和表单格式</p>
<h1>签名加密</h1>
<pre><code>1)参数名进行升序排序后
2)sha1(源字符串+&#039;&amp;secret_key=&#039;+secret_key)生成签名sign,或者md5也可以
3) 生成的签名小写,无需转换
提供加密代码实例:
PHP:
$data = [
&quot;game_appid&quot; =&gt; &quot;1108007508&quot;,
&quot;account_id&quot; =&gt; &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;channel_id&quot; =&gt; &quot;wanba&quot;,
&quot;sub_channel_id&quot; =&gt; &quot;wanba_ts.121&quot;,
&quot;shareid&quot; =&gt; &quot;0&quot;
];
$secret_key = &#039;uIwdb8zNNxdY7KWe&#039;;//示例
ksort($data);
$tmp=array();
foreach ($data as $k =&gt; $v) {
$tmp[] = $k . &#039;=&#039; . $v;
}
$str = implode(&#039;&amp;&#039;, $tmp) . &#039;&amp;secret_key=&#039;.$secret_key;
$realSign = sha1($str);
//或者用md5也行
//$realSign = md5($str);
return $realSign;
---------------------------------------------------------------------
js:
data = {
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;channel_id&quot;: &quot;wanba&quot;,
&quot;sub_channel_id&quot;: &quot;wanba_ts.121&quot;,
&quot;shareid&quot;: &quot;0&quot;
};
secret_key = &#039;uIwdb8zNNxdY7KWe&#039;//示例
function check_sign(data, secret_key) {
let keys = Object.keys(data);
keys.sort();
let tmp = [];
for (let i = 0; i &lt; keys.length; i++) {
tmp.push(keys[i] + &#039;=&#039; + data[keys[i]]);
}
console.log(tmp.join(&#039;&amp;&#039;));
let str = tmp.join(&#039;&amp;&#039;) + &#039;&amp;secret_key=&#039; + secret_key;
//或者用sha1也行
//let sign = sha1(str);
let sign = md5(str);
console.log(sign);
}</code></pre>
<p>比如上报用户注册信息:</p>
<pre><code>{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;channel_id&quot;: &quot;wanba&quot;,
&quot;sub_channel_id&quot;: &quot;wanba_ts.121&quot;,
&quot;shareid&quot;: &quot;0&quot;,
&quot;sign&quot;: &quot;a40dd81454f1bc71f162238513b72248608151fd&quot;
}</code></pre>
<p>参数升序排序后:</p>
<pre><code>account_id=34D015FCDA78A87A07FA5CF3B5276523&amp;channel_id=wanba&amp;game_appid=1108007508&amp;shareid=0&amp;sub_channel_id=wanba_ts.121&amp;secret_key=uIwdb8zNNxdY7KWe</code></pre>
<p>然后对排序后的字符串md5或者sha1签名。</p>
<pre><code>sha1签名:
a40dd81454f1bc71f162238513b72248608151fd
md5签名:
7182c144d83291efb6aee74a8a0ca243</code></pre>
<h1>返回格式</h1>
<p> 正常响应code为1:{"code":1,"msg":"ok","time":1574923247,"data":[]}
错误响应code为0:{"code":0,"msg":"error","time":1574923247,"data":[]}</p>
<h1>1.上报注册用户信息(必须首先上报)</h1>
<p><div style="background: #fda7b4;padding: 12px; border-radius: 8px; color: #000;">⚡ <strong>注意</strong>
必须上报,必须首先上报这个
</div></p>
<h2>1.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍上报第一次进入游戏的新用户,account_id和其他信息
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/userinfo</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
后续接口依赖于已存在的用户数据,所以此接口必须先完成上报才能接入后续上报
</div></p>
<h2>1.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|account_id |是 |string |玩家openid(唯一) |
|game_appid |是 |string | 游戏appid |
|channel_id |是 |string | 主渠道(场景值),没有填默认值(空间玩吧填写 wanba,小游戏填写场景值) |
|sub_channel_id |是 |string | 子渠道,没有填默认值test_sub_channel_id (空间玩吧填写 平台pf值【例如wanba_ts.9、weixin.95】) |
|shareid |是 |string | 通过哪个用户的分享进来,分享用户的account_id,没有传0 |
|sign |是 |string | 生成签名 |</p>
<h2>1.3示例代码</h2>
<p>密钥:uIwdb8zNNxdY7KWe(示例)</p>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;channel_id&quot;: &quot;wanba&quot;,
&quot;sub_channel_id&quot;: &quot;wanba_ts.121&quot;,
&quot;shareid&quot;: &quot;0&quot;,
&quot;sign&quot;: &quot;a40dd81454f1bc71f162238513b72248608151fd&quot;
}</code></pre>
<h1>2.登录活跃信息上报</h1>
<h2>2.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍用户每次打开登陆游戏时候上报
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/login</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
如果是当天注册的新用户,只需上报注册api/web/userinfo信息即可,无需再调用此接口
</div></p>
<h2>2.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string |玩家openid(唯一) |
|channel_id |是 |string | 主渠道(场景值),没有填默认值(空间玩吧填写 wanba, 小程序填写场景值) |
|sub_channel_id |是 |string | 子渠道,没有填默认值test_sub_channel_id (空间玩吧填写 平台pf值【例如wanba_ts.9、weixin.95】) |
|account_id |是 |string | account_id |
|sign |是 |string | 生成签名 |</p>
<h2>2.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;channel_id&quot;: &quot;wanba&quot;,
&quot;sub_channel_id&quot;: &quot;wanba_ts.121&quot;,
&quot;sign&quot;: &quot;a40dd81454f1bc71f162238513b72248608151fd&quot;
}</code></pre>
<h1>3.创建角色信息上报</h1>
<h2>3.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍用户创建角色时上报,只需上报游戏内第一次创角
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/create_role</code>
</div></p>
<h2>3.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|role_id |是 |string |角色ID (若无角色唯一id,则传account_id) |
|nickname |是 |string | 角色名称 |
|server_id |是 |int | 区服ID |
|server_name |是 |string | 区服名称 |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|sign |是 |string | 生成签名 |</p>
<h2>3.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;role_id&quot;: &quot;111&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;server_id&quot;: &quot;10&quot;,
&quot;server_name&quot;: &quot;游戏一服&quot;,
&quot;nickname&quot;: &quot;昵称&quot;,
&quot;sign&quot;: &quot;1cbc64bfa74b920c760f8b11ea2adbfd39509644&quot;
}</code></pre>
<h1>4.在线时长上报</h1>
<h2>4.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍统计在线时长(用户打开到退出的停留时长)
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/timing</code>
</div></p>
<h2>4.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|timing |是 |int |在线时长(秒)可以分片上传,可以退出后一次性传,同用户后台会自动累加 数值范围:40-86400 |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|sign |是 |string | 生成签名 |</p>
<h2>4.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;timing&quot;: 100,
&quot;sign&quot;: &quot;8c994b139c7113a6bd4fdf5673feab3429e6055b&quot;
}</code></pre>
<h1>5.分享成功上报</h1>
<h2>5.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍统计分享次数
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/share</code>
</div></p>
<h2>5.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|sign |是 |string | 生成签名 |</p>
<h2>5.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;sign&quot;: &quot;c39d0ac731f6a48d27c902652b5b77832b175669&quot;
}</code></pre>
<h1>6.支付成功订单上报</h1>
<h2>6.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍支付成功的订单上报
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/order</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
必须是支付成功的才上报,未支付成功的不要上报,做好筛选
</div></p>
<h2>6.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|goods_count |是 |int | 商品数量 |
|goods_name |是 |string | 商品名称 由接入方提供 如:元宝 |
|goods_identifier |是 |string | 商品ID |
|pay_amount |是 |int | 支付金额(元) 由接入方提供 如:1.0元 |
|order_sn |是 |string | 订单编号(游戏方生成的订单号) |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|role_id |是 |string | 角色ID,没有就乱写一个 |
|role_name |是 |string | 角色名称 |
|server_id |是 |string | 区服ID |
|server_name |是 |string | 区服名称 |
|sign |是 |string | 生成签名 |</p>
<h2>6.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;goods_count&quot;: &quot;1&quot;,
&quot;goods_name&quot;: &quot;元宝&quot;,
&quot;pay_amount&quot;: &quot;1&quot;,
&quot;role_id&quot;: &quot;10&quot;,
&quot;role_name&quot;: &quot;角色名&quot;,
&quot;server_id&quot;: &quot;10&quot;,
&quot;server_name&quot;: &quot;游戏一服&quot;,
&quot;order_sn&quot;: &quot;20191018111114110&quot;,
&quot;goods_identifier&quot;: &quot;qqqqqq111&quot;,
&quot;sign&quot;: &quot;c55c1f0978ffacbb0a45d7639960a669bfd1de62&quot;
}</code></pre>
<h1>7.关卡等级上报</h1>
<h2>7.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍关卡等级或者分数记录上报
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/game_level</code>
</div></p>
<h2>7.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|level |是 |int | 等级或者积分 |
|sign |是 |string | 生成签名 |</p>
<h2>7.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;level&quot;: 1,
&quot;sign&quot;: &quot;410919c6c82c8645adafe7abedf252c3ad489f37&quot;
}</code></pre>
<h1>8.无。。。</h1>
<h1>9.视频广告点击</h1>
<h2>9.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍广告show出来的时候上报
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/video_click</code>
</div></p>
<h2>9.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|sign |是 |string | 生成签名 |</p>
<h2>9.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;sign&quot;: &quot;c39d0ac731f6a48d27c902652b5b77832b175669&quot;
}</code></pre>
<h1>10.视频广告关闭</h1>
<h2>10.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍广告close的时候上报
<code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/watch</code>
</div></p>
<h2>10.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | account_id |
|sign |是 |string | 生成签名 |</p>
<h2>10.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;sign&quot;: &quot;c39d0ac731f6a48d27c902652b5b77832b175669&quot;
}</code></pre>
<h1>11.打点上报</h1>
<h2>11.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍游戏埋点
一、埋点流程:
大厅玩家点击游戏icon拉起下载--服务器下载资源包--下载完成进行安装--游戏窗口启动--进入选服界面--玩家创角--创角成功--进入游戏主界面。
二、步骤解释:
1、启动器下载(即玩家在大厅点击下载开始就算)
2、下载资源包(有下载器则视为下载win包,若直接是win包则从更新资源算起)
3、拉起游戏窗体(下载器游戏即为游戏在电脑界面窗口模式展开,win包则按游戏更新完资源开启窗口为节点计算)
4、选服、创角(顾名思义,进入此步骤则打点计算流失率)</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/web/dot_record</code>
</div></p>
<h2>11.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|key |是 |string | 打点上报关键字,见下方说明 |
|sign |是 |string | 生成签名 |</p>
<h2>11.3key说明</h2>
<p>|节点说明|对应传递的key值|
|:---- |----- |
|启动器下载 | download |
|开始loading(下载资源包) | start_loading |
|结束loading(下载完成) |end_loading |
|拉起游戏窗体 |start_up |
|进入选服界面 |server_list |
|显示创角选角页面 |role_list |
|创角成功 |create_role |
|成功进入开始游戏 |play |
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
下方自定义key节点<span style="color:red">需要先接入完打点数据返回成功之后,联系运营添加白名单</span>才能接入
key的节点可自定义,
比如:加载20%->key1,加载40%->key2,加载60%->key3,加载80%->key4,加载100%->key5
</div>
<strong>自定义key说明:</strong></p>
<p>|节点说明|对应传递的key值|
|:---- |----- |
|自定义key1 | key1 |
|自定义key2 | key2 |
|自定义key3 |key3 |
|自定义key4 |key4 |
|自定义key5 |key5 |</p>
<h2>11.4示例</h2>
<pre><code>下载节点的传送参数
{
&quot;game_appid&quot;: &quot;1108007508&quot;,
&quot;key&quot;: &quot;download&quot;,
&quot;sign&quot;: &quot;db6d4938e7a96b545d219d962b85bd564525ae81&quot;
}</code></pre>