← 学习目录 新建广告 · 系统学习知识库
系统学习 · 原文静态导入

Untitled_doxcnsCq

原始路径:新建广告/Untitled_doxcnsCq

本页含 0 张本地化原始图片 · 0 个本站关联导航

三方(微信)小游戏转化回传技术对接指南

产品投放文档:

**更新日志**

2023.02.07 新增投放2.0参数下发(promotion_id等)

2022.06.22 支持**url&token在线获取**

2022.04.28 path下发参数已增加req_id和advertiser_id,详情见「clue_token下发」。

转化回传全景图

![图片展示了三方(微信)小游戏转化回传技术对接的全景图。用户侧进入落地页后,若跳转去微信则携clue_token参数进入微信小游戏,发生关键行为后结束;若不跳转则获取clue_token,匹配转化事件,申请url、密钥token,分配url、密钥token,获取url&path、密钥token,按规则回传事件、clue_token等信息。广告主侧和字节侧分别有获取clue_token、分配url、密钥token等操作。该图与文档中介绍三方(微信)小游戏转化回传技术对接的内容相呼应。](https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/authcode/?code=MTQzYWQ4Zjg0ZDJjODlhMzVhYmYzMTg3MTNmZGE5MDFfYmIwYjFlNzMxZmZkYTRkMTUzZmU4NjUwMWVlOTQ1NjNfSUQ6NzA2NzUyMTc0NzY0MjAwNzU1NV8xNzg0Nzk5NzYxOjE3ODQ4MDMzNjFfVjM)

转化回传全流程

clue_token下发

clue_token是用户每次通过广告调起微信小游戏的唯一编码,用于广告主进行自匹配归因,而不再需要点击监测链接。(注意:每次广告调起下发的clue_token均不相同)

广告主**可通过微信小游戏 生命周期getLaunchOptions提取参数值**,文档参考:

[Object wx.getLaunchOptionsSync()](https://developers.weixin.qq.com/minigame/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html)

**用户跳转至微信小游戏时,字节会将clue_token、项目id、广告id、素材ID、请求ID、账户ID信息以参数形式拼接在小游戏path上**。示例:`path:/pages/index.html?clue_token=___&``project_id=___&promotion_id=___&mid1=___&mid2=___&mid3=___&mid4=___&mid5=___``&req_id=___&advertiser_id=___`

**project_id**:项目id

**promotion_id**:广告id

**mid1-5**:素材id(1图片,2标题,3视频,4试玩,5落地页)

**advertiser_id**:广告账户id

**req_id**:请求下发的id。如果广告主在计划创编时填写第三方监控链接,可请求获取request_id和其他需要的参数(如IMEI、IDFA、OS等,具体参考文档[监测链接发送服务](https://open.oceanengine.com/labels/7/docs/1696710655781900)),然后与path下发的req_id进行映射。

广告主自归因后回传

1. 广告主可以通过字节下发的clue_token来匹配转化数据。

2. 广告主需要获取接口进行转化回传。

3. **Method**

• POST

4. **Content-Type**

• application/json

5. 获取接口信息流程如下:

• ~~广告主提交微信小游戏加白申请后,联系字节对应的运营同学提供url(含path)、密钥token任一账户创建小游戏资产后可在线获取url&token,如有多个账户在投,使用任一账户下获取的url&token进行上报即可~~在巨量纵横工作台可在线获取url&token,具体操作见下图

![图片展示的是巨量引擎工作台界面,用于获取三方(微信)小游戏转化回传接口信息。界面左侧有“小程序小游戏”选项被红色框标注。右侧上方有“资产”选项被红色框标注。中间部分有“小程序小游戏”搜索框及筛选条件,下方有“我创建的资产”和“被共享的资产”按钮,以及“小程序小游戏路径”等信息展示区域。右上角有“新手引导”和“转化上报”按钮,其中“转化上报”按钮被红色框标注。该图与文档中获取接口信息流程相关,直观呈现了获取接口信息的操作界面。](https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/authcode/?code=ZmZhZGI4ODgzMmI0MTQzNGFjYjBlMzJmMTYwMWI1MzJfMTk4YjY3OGM2ODI5ZjZiZThjNjg2ODRkYjMzMDk0OTNfSUQ6NzI5MDQ2NTExNjQzNTkyMjk0NV8xNzg0Nzk5NzYxOjE3ODQ4MDMzNjFfVjM)

• url示例:https://xxx.com/xxx?timestamp=\_\_\_\_&nonce=\_\_\_\_\_\_&signature=\_\_\_\_\_\_\_

• \_\_\_\_\_\_下划线里面需要客户填上值,**query参数解释如下Timestamp**转化事件发生时间unix时间戳,秒级别,10位。如1642419633([转换工具](https://tool.lu/timestamp/))**Nonce**随机整数(随机即可,防止请求被中间劫持篡改)**Signature**签名反作弊使用**计算签名方式**:

1. 对密钥token,timestamp和nonce三个string进行**升序**排序

2. 将三个string转成bytes放入一个buffer

3. 对byte buffer进行sha1 哈希加密

4. 哈希加密后转成string即为signature

5. 然后将string拼在url上

> 🌰假如token="D528C6F23C7D7", nonce="234", timestamp="1646989046",

>

> 1. 升序排序后字符串"1646989046234D528C6F23C7D7"

> 2. 对排序后字符串进行sha1转换,结果为"a3c1ad351db9b88c1c5cb7a4cab977f8cd146524"

• golang代码示例:

```Go

strList := []string{token, timestamp, nonce}

sort.Strings(strList)

var buffer bytes.Buffer

for i , str := range strList {

buffer.WriteString(str)

}

h := sha1.New()

h.Write(buffer.Bytes())

r := fmt.Sprintf("%x", h.Sum(nil))

```

• Java 代码示例

```Java

String[] arr={token,nonce,String.valueOf(dto.getTime())}; //进行排序

Arrays.sort(arr);

StringBuffer buffer = new StringBuffer();

for (int i = 0; i < arr.length; i++) {

buffer.append(arr[i]);

}

//进行sha1加密生成签名

String signature=DigestUtils.sha1Hex(buffer.toString());

```

• nodejs代码示例

```JavaScript

const sha1 = require('./sha1.min.js')

let sign = (token, timestamp, nonce) => {

let strList = [token, timestamp, nonce];

strList.sort();

let buffer = "";

strList.forEach(str => {

buffer += str;

})

return sha1(buffer);

}

```

• php代码示例

```PHP

$collect = Array((string)$token,(string)$nonce,(string)$timestamp);

usort($collect,'strcmp');

$signature = sha1(implode('',$collect));

echo $signature;

```

**Body参数**

```Go

{

"clue_token": "xxx", // 用户跳转小程序时携带的clue_token参数

"union_id": "xxx", // 微信union_id

"open_id": "xxx", // 微信open_id,必须回传

"event_type": "0", // 事件类型,string格式

"props": {

"pay_amount": 123 // 当event_type为2,使用付费类出价产品时需上报,单位为分,格式int

}

}

```

• **参数枚举说明:**回传事件定义及标准:不同出价产品需要回传的事件类型:

event_type(事件类型)
字节侧
事件定义
客户侧
取值字段定义回传窗口期
active激活
(必须回传)
0投放微信小游戏时,可将首次「调起微信小游戏」定义为激活事件
即,新用户/新设备首次联网打开(不同客户定义口径存在差异,可自行调整)微信小游戏
下发clue_token后第1天-第8天内的全量激活数据
active_register注册1在调起微信小游戏后,且在联网环境下,在微信小游戏「完成创角」定义为注册事件回传激活后第1天-第8天内的全量注册数据
active_pay付费
(投付费必须回传)
2在调起微信小游戏后,且在联网环境下,「发生交易并完成的每一笔付款」定义为付费事件,付费事件应包括首充及复充数据,并回传付费金额
付费金额回传要求
props:{"pay_amount":xxx}
xxx单位为分,格式int
回传激活后第1天-第8天内的全量付费数据
game_addiction关键行为25常见的关键行为有:IPU次数、观看激励视频次数、游戏时长等。具体可参考文档
next_day_open次留6用户激活后次日在互联网环境下打开微信小游戏回传激活后第2天内的全量留存数据

| **出价产品** | **需回传的event_type(事件类型)和取值** |

|-|-|

| 激活 | 激活时回传event_type=0 |

| 激活且注册 | 激活时回传event_type=0
注册时回传event_type=1 |

| 激活且付费 | 激活时回传event_type=0
付费时回传event_type=2,回传包括pay_amount |

| 每次付费 | 激活时回传event_type=0
付费时回传event_type=2,回传包括pay_amount,多次付费多次回传 |

| 付费ROI | 激活时回传event_type=0
付费时回传event_type=2,回传包括pay_amount,多次付费多次回传 |

| 直投关键行为 | 激活时回传event_type=0
产生关键行为时回传event_type=25 |

| 次留双出价 | 激活时回传event_type=0
次日再次打开时回传event_type=6 |

**回传举例**:

> 用户在2022年2月25日12:40通过点击字节广告跳转小游戏进行了激活(字节在用户进行的这次跳转进行了对应的clue_token的下发),发生的场景和需要回传的示例如下:

| **时间** | **发生了什么** | **需要回传什么** |

|-|-|-|

| 2022-2-25 12:40:53 | 该用户完成了小游戏激活 | 必须回传
event type=0
timestamp=1645764053(2022-2-25 12:40:53) |

| 2022-2-25 13:18:23 | 该用户完成了首次付费,付费金额为6.6元 | 必须回传
event type=2
pay amount=660
timestamp=1645766303(2022-2-25 13:18:23) |

| …… | …… | …… |

| 2022-2-27 16:56:33 | 该用户完成了第三次付费,付费金额为19.9元 | 必须回传
event type=2
pay amount=1990
timestamp=1645952193(2022-2-27 16:56:33 ) |

> 用户1通过ad1调起微信但并未完成激活(字节对这次跳转下发了clue_token1),用户1再次通过ad2跳转小游戏并完成激活(字节对此次跳转下发了clue_token2),则广告主针对这次的激活转化事件,需通过clue_token2进行激活事件的回传,后续用户1产生的付费也需要通过clue_token2进行回传。

>

> 用户1通过ad3调起小游戏产生的付费,需通过产生激活的clue_token2进行回传

>

> 用户1通过其他途径调起小游戏产生的付费,需通过产生激活的clue_token2进行回传

![图片展示了用户1在微信小游戏转化过程中的行为及回传逻辑。用户1先后通过ad1、ad2、ad3调起小游戏,ad1未使其激活,ad2使其激活并获得clue_token2,ad3使产生付费。图中明确,用户1首次联网打开小游戏激活需回传,首次及后续付费也需技术回传相应付费金额。特别指出,用户1通过ad3调起小游戏产生的付费,需通过产生激活的clue_token2进行回传,与上文所举用户1激活及付费回传示例相呼应,直观呈现转化回传流程。](https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/authcode/?code=MDljNzUyZDRiNmQ4ZDMxOTgwMGQ5YTlhNWQyNThlOWFfYTA4NDQ5ZDk1NzkwNTJmYTRmZWIzODllYTAzN2Q3NjFfSUQ6NzA2OTk1OTg4NjMyMTAwODY0M18xNzg0Nzk5NzYxOjE3ODQ4MDMzNjFfVjM)

**Resp**

> http code为200即为正常上报

>

> 接口要求是POST请求,GET请求会404

异常情况状态码message可能原因
token密钥无效400Invalid token检查token密钥或事件回传url是否和下发的一致
请求鉴权失败400Invalid signature检查token和生成的字符串是否正确
body参数解析失败400Invalid body检查字段类型
event_type不合法400Invalid event type
  1. event_type事件类型应为string
  2. 回传的event_type取值不是0/1/2/6/25
clue_token不合法400Invalid clue tokenclue_token格式错误,正确样例参考:“1631518677072900,1727615094120487”
未匹配到任何线索信息400未匹配到任何线索信息,请使用真实环境数据进行上报
  1. 需要使用广告投放环境或者预览广告产生的clue token,才可以回传,非广告环境会报错
  2. 用户的点击动作和回传时间,中间超过30天,会出现这个错误
clue_token不存在或系统异常500system err非正常途径获取或生成的clue_token
500缺少必要的广告信息字段context.ad非线上广告场景下产生的转化,如计划预览等,无法用于上报

FAQ

有问题先自查该文档:

在接这个接口时卡住了?
Stuck wiring this API into production? We build ad-delivery tooling on these platforms — campaign automation, reporting pipelines, error-handling and migration between API versions.
联系我们 · Talk to us 每日平台更新简报 →