AddMiniProgramBannerAds.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. require_once __DIR__ . '/../../vendor/autoload.php'; // change path as needed
  3. use TencentAds\TencentAds;
  4. use TencentAds\Exception\TencentAdsResponseException;
  5. use TencentAds\Exception\TencentAdsSDKException;
  6. /*****
  7. * 本文件提供了一个微信公众账号创建一个微信推广小游戏的小程序Banner广告的示例
  8. */
  9. class AddMiniProgramBannerAds
  10. {
  11. public static $tads;
  12. public static $ACCESS_TOKEN = 'YOUR ACCESS TOKEN';
  13. public static $ACCOUNT_ID = 'YOUR ACCOUNT ID';
  14. public static $ADCREATIVE_TEMPLATE_ID = 608; // 单图规格
  15. public static $IMAGE_PATH = 'YOUR AD IMAGE PATH'; // 广告主图文件路径,608规格要求:960x334, <100K, png/jpg
  16. public static $MINI_GAME_ID = 'YOUR MINI GAME ID'; // 小游戏ID
  17. public static $MINI_GAME_PATH = 'YOUR MINI GAME PATH'; // 小游戏内页路径
  18. public function init()
  19. {
  20. $tads = TencentAds::init([
  21. 'access_token' => static::$ACCESS_TOKEN,
  22. 'is_debug' => true,
  23. ]);
  24. $tads->useSandbox(); // 默认访问沙箱环境,如访问正式环境,请切换为$tads->useProduction()
  25. static::$tads = $tads;
  26. return $tads;
  27. }
  28. public function main()
  29. {
  30. try {
  31. /* @var TencentAds $tads */
  32. $tads = static::$tads;
  33. // 第一步,创建推广计划
  34. $campaignType = 'CAMPAIGN_TYPE_NORMAL'; // 普通广告
  35. $promotedObjectType = 'PROMOTED_OBJECT_TYPE_MINI_GAME_WECHAT'; // 推广小游戏
  36. $campaignId = $this->AddCampaign($tads, $campaignType, $promotedObjectType);
  37. // echo 'Campaign ID: ' . $campaignId . PHP_EOL;
  38. // 第二步,创建广告组,不允许使用定向包,因此在广告组里创建定向
  39. $siteSet = ['SITE_SET_WECHAT']; // 投放微信流量
  40. $adgroupId = $this->AddAdgroup($tads, $campaignId, $promotedObjectType, static::$MINI_GAME_ID, $siteSet);
  41. // echo 'Adgroup ID: ' . $adgroupId . PHP_EOL;
  42. // 第三步,上传素材
  43. $imageId = $this->AddImage($tads, static::$IMAGE_PATH);
  44. // echo 'Image ID: ' . $imageId . PHP_EOL;
  45. // 第四步,创建创意
  46. $adcreativeId = $this->AddAdcreative($tads, static::$ADCREATIVE_TEMPLATE_ID, $campaignId,
  47. $promotedObjectType, static::$MINI_GAME_ID, $siteSet, $imageId, static::$MINI_GAME_PATH);
  48. // echo 'Adcreative ID: ' . $adcreativeId . PHP_EOL;
  49. // 第六步,创建广告
  50. $adId = $this->AddAd($tads, $adgroupId, $adcreativeId);
  51. // echo 'Ad ID: ' . $adId . PHP_EOL;
  52. return $adId;
  53. } catch (TencentAdsResponseException $e) {
  54. // When Api returns an error
  55. echo 'Tencent ads returned an error: ' . $e->getMessage() . PHP_EOL;
  56. throw $e;
  57. } catch (TencentAdsSDKException $e) {
  58. // When validation fails or other local issues
  59. echo 'Tencent ads SDK returned an error: ' . $e->getMessage() . PHP_EOL;
  60. throw $e;
  61. } catch (Exception $e) {
  62. echo 'Other exception: ' . $e->getMessage() . PHP_EOL;
  63. throw $e;
  64. }
  65. }
  66. // 创建朋友圈推广计划
  67. private function AddCampaign(TencentAds $tads, $campaignType, $promotedObjectType)
  68. {
  69. $campaignName = 'SDK计划' . uniqid();
  70. $campaignDailyBudget = 0; // 不限日预算
  71. $campaign = $tads->campaigns()
  72. ->add([
  73. 'account_id' => static::$ACCOUNT_ID,
  74. 'campaign_name' => $campaignName,
  75. 'campaign_type' => $campaignType,
  76. 'promoted_object_type' => $promotedObjectType,
  77. 'daily_budget' => $campaignDailyBudget,
  78. ]);
  79. $campaignId = $campaign->getCampaignId();
  80. return $campaignId;
  81. }
  82. // 创建广告组
  83. private function AddAdgroup(
  84. TencentAds $tads,
  85. $campaignId,
  86. $promotedObjectType,
  87. $promotedObjectId,
  88. $siteSet
  89. ) {
  90. $adgroupName = 'SDK sample adgroup ' . uniqid();
  91. $beginDate = date('Y-m-d', strtotime('+1 day')); // 开始投放日期
  92. $endDate = date('Y-m-d', strtotime('+10 day')); // 结束投放日期
  93. $billingEvent = 'BILLINGEVENT_IMPRESSION'; // CPM
  94. $bidAmount = 20000; // 200元(单位为分)
  95. $optimizationGoal = 'OPTIMIZATIONGOAL_APP_REGISTER'; // 优化目标APP注册
  96. $timeSeries = str_repeat('1', 48 * 7); // 全天投放
  97. $adgroupDailyBudget = 1000000; // 日预算10000元(单位为分)
  98. $expandEnabled = true; // 开启自动扩量
  99. $expandTargeting = ['age', 'geo_location', 'gender']; // 自动扩量定向范围
  100. $regionIds = ['310000', '110000']; // 上海,北京,朋友圈广告地域只能位于同一级别
  101. $targeting = [
  102. 'age' => [
  103. [ // 年龄定向,23~45岁
  104. 'min' => 23,
  105. 'max' => 45,
  106. ],
  107. ],
  108. 'gender' => ['MALE'], // 性别定向,男性
  109. 'geo_location' => [ // 地域定向
  110. 'location_types' => ['LIVE_IN'],
  111. 'regions' => $regionIds,
  112. ],
  113. 'user_os' => ['IOS'], // 操作系统定向
  114. ];
  115. $adgroup = $tads->adgroups()
  116. ->add([
  117. 'account_id' => static::$ACCOUNT_ID,
  118. 'campaign_id' => $campaignId,
  119. 'adgroup_name' => $adgroupName,
  120. 'promoted_object_type' => $promotedObjectType,
  121. 'begin_date' => $beginDate,
  122. 'end_date' => $endDate,
  123. 'billing_event' => $billingEvent,
  124. 'bid_amount' => $bidAmount,
  125. 'optimization_goal' => $optimizationGoal,
  126. 'time_series' => $timeSeries,
  127. 'site_set' => $siteSet,
  128. 'daily_budget' => $adgroupDailyBudget,
  129. 'promoted_object_id' => $promotedObjectId,
  130. 'targeting' => $targeting,
  131. 'expand_enabled' => $expandEnabled,
  132. 'expand_targeting' => $expandTargeting,
  133. ]);
  134. $adgroupId = $adgroup->getAdgroupId();
  135. return $adgroupId;
  136. }
  137. // 上传素材
  138. private function AddImage(TencentAds $tads, $imageFile)
  139. {
  140. $imageSignature = md5_file($imageFile);
  141. $uploadType = 'UPLOAD_TYPE_FILE';
  142. $image = $tads->images()
  143. ->add([
  144. 'account_id' => static::$ACCOUNT_ID,
  145. 'upload_type' => $uploadType,
  146. 'file' => $imageFile,
  147. 'signature' => $imageSignature,
  148. ]);
  149. $imageId = $image->getImageId();
  150. return $imageId;
  151. }
  152. // 创建创意
  153. private function AddAdcreative(
  154. TencentAds $tads,
  155. $adcreativeTemplateId,
  156. $campaignId,
  157. $promotedObjectType,
  158. $promotedObjectId,
  159. $siteSet,
  160. $imageId,
  161. $miniProgramPath
  162. ) {
  163. $adcreativeName = 'SDK sample adcreative ' . uniqid();
  164. $adcreativeElements = [
  165. 'image_list' => [intval($imageId)],
  166. ];
  167. $pageType = 'PAGE_TYPE_MINI_GAME_WECHAT';
  168. $pageSpec = [
  169. 'mini_program_spec' => [
  170. 'mini_program_id' => $promotedObjectId,
  171. 'mini_program_path' => $miniProgramPath,
  172. ],
  173. ];
  174. $adcreative = $tads->adcreatives()
  175. ->add([
  176. 'account_id' => static::$ACCOUNT_ID,
  177. 'campaign_id' => $campaignId,
  178. 'adcreative_name' => $adcreativeName,
  179. 'adcreative_template_id' => $adcreativeTemplateId,
  180. 'adcreative_elements' => $adcreativeElements,
  181. 'promoted_object_type' => $promotedObjectType,
  182. 'page_type' => $pageType,
  183. 'page_spec' => $pageSpec,
  184. 'site_set' => $siteSet,
  185. 'promoted_object_id' => $promotedObjectId,
  186. ]);
  187. $adcreativeId = $adcreative->getAdcreativeId();
  188. return $adcreativeId;
  189. }
  190. // 创建广告
  191. private function AddAd(TencentAds $tads, $adgroupId, $adcreativeId)
  192. {
  193. $adName = 'SDK sample ad ' . uniqid();
  194. $ad = $tads->ads()
  195. ->add([
  196. 'account_id' => static::$ACCOUNT_ID,
  197. 'adgroup_id' => $adgroupId,
  198. 'adcreative_id' => $adcreativeId,
  199. 'ad_name' => $adName,
  200. ]);
  201. $adId = $ad->getAdId();
  202. return $adId;
  203. }
  204. }
  205. if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
  206. try {
  207. $example = new AddMiniProgramBannerAds();
  208. $example->init();
  209. $example->main();
  210. } catch (\Exception $e) {
  211. exit(-1);
  212. }
  213. }