audiencerun / iabtcf
基于 https://github.com/dynata/iab-tcf-php 的分支
1.0.2
2024-01-22 17:01 UTC
Requires
- php: ^7.0|^8.0
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^8.5
README
基于 https://github.com/dynata/iab-tcf-php
该项目包含一个用于与
- IAB的 透明度与同意框架 v1.1 操作的PHP库
- IAB的 透明度与同意框架 v2.0
TC 字符串是 IAB Europe 透明度与同意框架 (TCF) 的技术组件。
通用数据保护条例 (GDPR) 要求对个人数据处理的高度问责。尽管这对数字广告生态系统的所有各方都很重要,但 GDPR 的实施带来了巨大的技术挑战。
GDPR 要求,包括但不限于,此类处理的法律依据。最相关的法律依据是用户同意其个人数据处理,以及控制器或第三方处理用户个人数据的合法利益,前提是用户的利益和基本权利不会被超越。这两种法律依据都要求提供披露以确保透明度,并在处理开始前通过用户的同意或处理开始后通过用户的反对来提供用户选择的机会,如果法律依据是同意,或者如果法律依据是合法利益。根据 GDPR,控制器必须创建和维护合规记录,包括但不限于用户同意记录。这为所有受影响方提供了共同技术解决方案的明确标准,以及规范该解决方案如何使用的政策。
IAB Europe 建立了 TCF 来支持数字广告环境中遵守 GDPR。
安装
通过 composer 安装包(目前不可用)
composer require audiencerun/iabtcf
使用方法
解码同意字符串
$cs = IABTcf\Decoder::decode("COtybn4PA_zT4KjACBENAPCIAD-AAECAAIAAAxAAAAgAIAwgAgAAAAEAgQAAAAAEAYQAQAAAACAAAABACBQAYAAgAEEgBAABAAQA.IBAgAAAgAIAwgAgAAAAEAAAACA.Qu4QBQAGAAXABLAC8AMAu4A.cAAAAAAAITg");
// Core String
var_dump($cs->getVersion());
int(2)
var_dump($cs->getCreated()->format("c"));
string(25) "2020-01-26T17:01:00+00:00"
var_dump($cs->getLastUpdated()->format("c"));
string(25) "2021-02-02T17:01:00+00:00"
var_dump($cs->getCmpId());
int(675)
var_dump($cs->getCmpVersion());
int(2)
var_dump($cs->getConsentScreen());
int(1)
var_dump($cs->getVendorListVersion());
int(15)
var_dump($cs->getTcfPolicyVersion());
int(2)
var_dump($cs->getConsentLanguage());
string(2) "en"
var_dump($cs->getPublisherCC());
string(2) "aa"
var_dump($cs->getIsServiceSpecific());
bool(false)
var_dump($cs->getPurposeOneTreatment());
bool(true)
var_dump($cs->getUseNonStandardStacks());
bool(false)
var_dump($cs->getPurposesConsent());
array(7) {
[0]=>
int(3)
[1]=>
int(4)
[2]=>
int(5)
[3]=>
int(6)
[4]=>
int(7)
[5]=>
int(8)
[6]=>
int(9)
}
var_dump($cs->getVendorConsent());
array(7) {
[0]=>
int(23)
[1]=>
int(37)
[2]=>
int(47)
[3]=>
int(48)
[4]=>
int(53)
[5]=>
int(65)
[6]=>
int(98)
}
var_dump($cs->getVendorLegitimateInterest());
array(7) {
[0]=>
int(37)
[1]=>
int(47)
[2]=>
int(48)
[3]=>
int(53)
[4]=>
int(65)
[5]=>
int(98)
[6]=>
int(129)
}
var_dump($cs->getSpecialFeatureOptIns());
array(1) {
[0]=>
int(1)
}
var_dump($cs->getPurposesLITransparency());
array(2) {
[0]=>
int(2)
[1]=>
int(9)
}
$pubRestrictions = $cs->getPublisherRestrictions();
var_dump($pubRestrictions[0]->getPurposeId());
int(1)
var_dump($pubRestrictions[0]->getRestrictionType()->getId());
int(1)
var_dump($pubRestrictions[0]->getVendorIds());
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
// Segment 1: Disclosed vendors
var_dump($cs->getDisclosedVendors());
array(8) {
[0]=>
int(23)
[1]=>
int(37)
[2]=>
int(47)
[3]=>
int(48)
[4]=>
int(53)
[5]=>
int(65)
[6]=>
int(98)
[7]=>
int(129)
}
// Segment 2: Allowed vendors
var_dump($cs->getAllowedVendors());
array(6) {
[0]=>
int(12)
[1]=>
int(23)
[2]=>
int(37)
[3]=>
int(47)
[4]=>
int(48)
[5]=>
int(6000)
}
// Segment 3: Publisher purposes
var_dump($cs->getPubPurposesConsent());
array(1) {
[0]=>
int(1)
}
var_dump($cs->getPubPurposesLITransparency());
array(1) {
[0]=>
int(24)
}
var_dump($cs->getCustomPurposesConsent());
array(1) {
[0]=>
int(2)
}
var_dump($cs->getCustomPurposesLITransparency());
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
编码同意数据
$cs = new IABTcf\ConsentString();
$cs->setVersion(2);
$cs->setCreated(new DateTime('2020-01-26 17:01:00'));
$cs->setLastUpdated(new DateTime('2021-02-02 17:01:00'));
$cs->setCmpId(675);
$cs->setCmpVersion(2);
$cs->setConsentScreen(1);
$cs->setVendorListVersion(15);
$cs->setTcfPolicyVersion(2);
$cs->setConsentLanguage('en');
$cs->setPublisherCC('aa');
$cs->setIsServiceSpecific(false);
$cs->setPurposeOneTreatment(true);
$cs->setUseNonStandardStacks(false);
$cs->setAllowedPurposes([2, 10]);
$cs->setSpecialFeatureOptIns([1]);
$cs->setPurposesConsent([3, 4, 5, 6, 7, 8, 9]);
$cs->setVendorConsent([23, 37, 47, 48, 53, 65, 98]);
$cs->setVendorLegitimateInterest([37, 47, 48, 53, 65, 98, 129]);
$cs->setPurposesLITransparency([2, 9]);
$restrictionType = new IABTcf\TCFv2\RestrictionType(1);
$cs->setPublisherRestrictions([
new IABTcf\TCFv2\PublisherRestriction(1, $restrictionType, [1, 2]),
new IABTcf\TCFv2\PublisherRestriction(2, $restrictionType, [1, 8])
]);
$cs->setDisclosedVendors([23, 37, 47, 48, 53, 65, 98, 129]);
$cs->setAllowedVendors([12, 23, 37, 47, 48, 6000]);
$cs->setPubPurposesConsent([1]);
$cs->setPubPurposesLITransparency([24]);
$cs->setCustomPurposesConsent([2]);
$cs->setCustomPurposesLITransparency([1, 2]);
// Encode the data into a web-safe base64 string
$enc = IABTcf\Encoder::encode($cs);
echo $enc;
Outputs:
COtybn4PA_zT4KjACBENAPCIAD-AAECAAIAAAxAAAAgAIAwgAgAAAAEAgQAAAAAEAYQAQAAAACAAAABACBQAYAAgAEEgBAABAAQA.IBAgAAAgAIAwgAgAAAAEAAAACA.Qu4QBQAGAAXABLAC8AMAu4A.cAAAAAAAITg
免责声明
您正在自行承担使用此应用的风险。DYNATA 对此应用程序不提供任何保证或陈述。此应用程序按“现状”提供给您。DYNATA 此处放弃所有有关该应用程序的明示或暗示保证,包括但不限于商销性、适用性、非侵权性和根据性能、交易或行业惯例产生的任何暗示保证。在适用法律允许的情况下,DYNATA 可能无法放弃任何保证,此类保证的范围和持续时间应限于适用法律规定的最低限度。您将赔偿、辩护并保护 DYNATA 及其关联公司、雇员、官员和承包商免受因您使用此应用程序而产生的任何第三方索赔。