抖音小游戏接口上报文档
<p>[TOC]</p>
<h1>注意</h1>
<p><div style="background: #fda7b4;padding: 12px; border-radius: 8px; color: #000;">1、抖音小游戏接口上报,供无法使用js SDK的使用
2、如果能使用js SDK接入,建议接入[抖音小游戏SDK文档](<a href="https://cps.moyangmoyang.com/b6791bnlwiki/douyin">https://cps.moyangmoyang.com/b6791bnlwiki/douyin</a> "抖音小游戏SDK文档")
</div></p>
<h1>介绍</h1>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">抖音小游戏CPS上报接口。
接入前需要运营先在CPS后台添加对应的游戏appid,提供生成加密密钥 secret_key,研发才能进行后续接入。</p>
<p>接口主域名为 <code>https://cps.moyangmoyang.com</code></p>
<p>全部采用POST请求,请求必须有加密签名,支持JSON和表单格式
</div></p>
<h1>签名加密</h1>
<p>1)参数名进行升序排序后
2)md5(源字符串+'&secret_key='+secret_key)生成签名sign
3) 生成的签名小写,无需转换
提供加密代码实例:</p>
<p>(1) PHP代码:</p>
<pre><code class="language-php">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 = md5($str);
return $realSign;</code></pre>
<p>(2)js代码:</p>
<pre><code class="language-javascript">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;
let sign = md5(str);
console.log(sign);
}</code></pre>
<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和其他信息</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/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 | 场景值,通过[tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync")获取场景值scene,<span style="color:red">空的话默认test_channel_id</span> |
|sub_channel_id |是 |string | 通过 [tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync")里面的 query 字段获取到链接上的promotionid,<span style="color:red">空的话默认test_sub_channel_id</span>>>>>>>字段详情看备注 |
|dy_click_id |是 |string | 通过 [tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync") 里面的 query 字段获取到链接上的clickid,<span style="color:red">空的话就传空</span>>>>>>> 字段详情看备注 |
|dyadid |是 |string | 通过 [tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync") 里面的 query 字段获取到链接上的dyadid,<span style="color:red">空的话就传空</span>>>>>>> 字段详情看备注 |
|shareid |是 |string | 通过哪个用户的分享进来,分享用户的account_id,没有传0 |
|sign |是 |string | 生成签名 |</p>
<p><strong>字段备注</strong>
获取启动参数示例:
C#:[获取启动参数](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/unity-game-access/sc_stark_sdk#e939bf70">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/unity-game-access/sc_stark_sdk#e939bf70</a> "获取启动参数")
Js:[获取启动参数](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "获取启动参数")</p>
<p>sub_channel_id字段详情:开发人员可以通过[tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync") 里面的 query 字段获取到链接上的<span style="color:red">promotionid</span>参数。<strong>只有通过广告进来的用户,query中才会有promotionid参数</strong>,空的话默认test_sub_channel_id</p>
<p>dy_click_id字段详情:开发人员可以通过 [tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync")里面的 query 字段获取到链接上的<span style="color:red">clickid</span>参数。<strong>只有通过广告进来的用户,query中才会有clickid参数</strong>,空的话默认就传空</p>
<p>dyadid字段详情:开发人员可以通过 [tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync") 里面的 query 字段获取到链接上的<span style="color:red">dyadid</span>参数。<strong>只有通过广告进来的用户,query中才会有dyadid参数</strong>,空的话默认就传空</p>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">query中promotionid、clickid和dyadid参数示例:(可将下面的启动参数信息填入到抖音开发工具-启动链接,测试是否能正确获取对应字段参数)👇👇👇👇👇
</div></p>
<pre><code>//启动参数
promotionid=test123456&amp;clickid=B.DP2lmE6safpTcaQjcXoCE88ue16QFcCAj8ypLQv1vidmDTf2gkSR3QYBjOgOfEByyohY1whsRdszj8RIDAc2eTWjEzqP2DFfMVs8mOrZeamkYdUQ6oRrv414tukI1Nabcd&amp;dyadid=1</code></pre>
<h2>1.3示例代码</h2>
<p>密钥:giITuVRdZOL987ocR5</p>
<pre><code class="language-javascript">{
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;channel_id&quot;: &quot;990001&quot;,
&quot;sub_channel_id&quot;: &quot;test123456&quot;,
&quot;dy_click_id&quot;: &quot;B.DP2lmE6safpTcaQjcXoCE88ue16QFcCAj8ypLQv1vidmDTf2gkSR3QYBjOgOfEByyohY1whsRdszj8RIDAc2eTWjEzqP2DFfMVs8mOrZeamkYdUQ6oRrv414tukI1Nabcd&quot;,
&quot;dyadid&quot;: &quot;1&quot;,
&quot;shareid&quot;: &quot;0&quot;,
&quot;sign&quot;: &quot;2d24d5f3d8e84e9b3357ede240d95e89&quot;
}</code></pre>
<h2>1.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:1,&quot;msg&quot;:&quot;用户已经上报&quot;,&quot;time&quot;:&quot;1721272806&quot;,&quot;data&quot;:null}</code></pre>
<h1>2.登陆活跃信息上报(必须)</h1>
<h2>2.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍用户每次打开登陆游戏时候上报</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/login</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
如果是当天注册的新用户,只需上报注册信息即可,无需再调用此接口
</div></p>
<h2>2.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string |游戏appid |
|channel_id |是 |string | 场景值,通过[tt.getLaunchOptionsSync](<a href="https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync">https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/foundation/system/lifecycle/tt-get-launch-options-sync</a> "tt.getLaunchOptionsSync")获取场景值scene,空的话默认test_channel_id |
|sub_channel_id |是 |string | 默认test_sub_channel_id |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>2.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;channel_id&quot;: &quot;990001&quot;,
&quot;sub_channel_id&quot;: &quot;test_sub_channel_id&quot;,
&quot;sign&quot;: &quot;d759f65fc676bfbcb33feb4e871a3f04&quot;
}</code></pre>
<h2>2.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:0,&quot;msg&quot;:&quot;登录已上报&quot;,&quot;time&quot;:&quot;1724053440&quot;,&quot;data&quot;:null}</code></pre>
<h1>3.创建角色信息上报</h1>
<h2>3.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍上报创角事件</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/create_role</code>
</div></p>
<h2>3.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|role_id |是 |string |角色ID (若无角色唯一id,则传account_id) |
|nickname |是 |int | 角色名称 |
|server_id |是 |int | 区服ID,没有填个默认数字 |
|server_name |是 |string | 区服名称,没有填个默认名称 |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>3.3示例代码</h2>
<pre><code class="language-javascript">let param = {
server_id: 1,
server_name: &#039;服务器&#039;,
role_name: &#039;默认昵称&#039;,
}
dyb.createRole(param, function (callback) {
console.log(&#039;roleData:&#039; + JSON.stringify(callback));
});</code></pre>
<h2>3.4接口返回</h2>
<pre><code class="language-javascript">roleData:{&quot;code&quot;:1,&quot;msg&quot;:&quot;角色已经上报&quot;,&quot;time&quot;:&quot;1586418685&quot;,&quot;data&quot;:null}</code></pre>
<h1>4.激励视频广告点击(有激励视频必须上报)</h1>
<h2>4.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍激励视频广告点击上报</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/video_click</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.只上报激励视频
2.广告show出来的时候上报
</div></p>
<h2>4.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>4.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;sign&quot;: &quot;81a572e5a0365756fa3be3dc758f4193&quot;
}</code></pre>
<h2>4.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1721272731&quot;,&quot;data&quot;:null}</code></pre>
<h1>5.激励视频广告看完(有激励视频必须上报)</h1>
<h2>5.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍激励视频广告完整看完上报</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/watch</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.只上报激励视频
2.广告完整看完的时候上报
</div></p>
<h2>5.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>5.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;sign&quot;: &quot;81a572e5a0365756fa3be3dc758f4193&quot;
}</code></pre>
<h2>5.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1721272731&quot;,&quot;data&quot;:null}</code></pre>
<h1>6.在线时长上报</h1>
<h2>6.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍统计在线时长(用户打开到退出的停留时长)</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/timing</code>
</div>
<div style="background: #FFE4B5;padding: 12px; border-radius: 8px; color: #000;">⚠️ <strong>注意</strong>
1.大于等于60秒才上报
2.可以分片上传,可以退出后一次性传,同用户后台会自动累加
</div></p>
<h2>6.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|timing |是 |int | 在线时长(秒),大于等于60秒才上报,可以分片上传,可以退出后一次性传,同用户后台会自动累加 |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>6.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;timing&quot;: &quot;100&quot;,
&quot;sign&quot;: &quot;5632a6667cd3a3a0295bd8b79090e14e&quot;
}</code></pre>
<h2>6.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1721272731&quot;,&quot;data&quot;:null}</code></pre>
<h1>7.分享成功上报接口</h1>
<h2>7.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍统计分享次数(用户分享成功就上报)</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/share</code>
</div></p>
<h2>7.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>7.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;sign&quot;: &quot;5632a6667cd3a3a0295bd8b79090e14e&quot;
}</code></pre>
<h2>7.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1721272731&quot;,&quot;data&quot;:null}</code></pre>
<h1>8.关卡等级上报</h1>
<h2>8.1接口说明</h2>
<p><div style="background: #9efca6;padding: 12px; border-radius: 8px; color: #000;">✍关卡等级或者分数记录</p>
<p><code>url:</code>
<code>https://cps.moyangmoyang.com/api/dygame/game_level</code>
</div></p>
<h2>8.2参数说明</h2>
<p>|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|level |是 |int | 等级或者积分 |
|game_appid |是 |string | 游戏appid |
|account_id |是 |string | 玩家openid,小游戏服务器从抖音服务器获取 |
|sign |是 |string | 生成签名 |</p>
<h2>8.3示例代码</h2>
<pre><code class="language-javascript">{
&quot;game_appid&quot;: &quot;ttestdouyin&quot;,
&quot;account_id&quot;: &quot;34D015FCDA78A87A07FA5CF3B5276523&quot;,
&quot;level&quot;: 1,
&quot;sign&quot;: &quot;09cb34efd7a81ee8f32abc5cf657336c&quot;
}</code></pre>
<h2>8.4接口返回</h2>
<pre><code class="language-javascript">Callback: {&quot;code&quot;:1,&quot;msg&quot;:&quot;成功&quot;,&quot;time&quot;:&quot;1721272731&quot;,&quot;data&quot;:null}</code></pre>