MpOpenMktNew.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <?php
  2. /**
  3. * MpOpenMktNew.php UTF-8
  4. *
  5. *
  6. * @date : 2021-03-06 17:43
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : luowei <lw@huosdk.com>
  10. * @version : HUOSDK 9.0
  11. */
  12. namespace huoMpAd;
  13. use huo\controller\common\Base;
  14. use huolib\status\CommonStatus;
  15. use huomp\model\weixin\MpAdReportLogModel;
  16. use huomp\model\weixin\MpAdSourceModel;
  17. use huomp\model\weixin\MpConfAgentModel;
  18. use huomp\model\weixin\MpConfModel;
  19. use think\Log;
  20. class MpOpenMktNew extends Base {
  21. /**
  22. * 创建数据源
  23. * https://ad.weixin.qq.com/guide/1680
  24. *
  25. * @param $wx_app_id
  26. * @param $wx_app_secret
  27. * @param string $name 用户行为源名称
  28. * @param string $type 用户行为源类型 默认:WECHAT_MINI_GAME
  29. * @param string $promoted_mp_id 小程序/小游戏对应的appid
  30. *
  31. * @return array
  32. */
  33. public function createDataSourceByAppidSecret(
  34. $wx_app_id, $wx_app_secret, $name, $promoted_mp_id, $type = 'WECHAT_MINI_GAME'
  35. ) {
  36. $_param = [
  37. 'type' => $type,
  38. 'name' => $name
  39. ];
  40. if (!empty($promoted_mp_id)) {
  41. $_param['wechat_app_id'] = $promoted_mp_id;
  42. }
  43. $_rs = (new MpAdApi())->createDataSource($wx_app_id, $wx_app_secret, $_param);
  44. if (CommonStatus::NO_ERROR != $_rs['code']) {
  45. if ($_rs['code'] == '900351000') {
  46. // 已经创建过
  47. // msg = "WECHAT_MINI_PROGRAM App wxf4603b9c18a0b5ee already registered with existed one : 1111504663"
  48. $_msg_arr = explode(" ", $_rs['msg']);
  49. $_user_action_set_id = array_pop($_msg_arr);
  50. } else {
  51. $_code = $_rs['code'];
  52. Log::write(
  53. ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => $_param, 'result' => $_rs],
  54. LOG::ERROR, true
  55. );
  56. return $this->huoError($_code, $_rs['msg']);
  57. }
  58. } else {
  59. $_user_action_set_id = $_rs['data']['user_action_set_id'];
  60. }
  61. $_data = [
  62. 'user_action_set_id' => $_user_action_set_id,
  63. ];
  64. $_code = CommonStatus::NO_ERROR;
  65. return $this->huoSuccess($_code, CommonStatus::getMsg($_code), $_data);
  66. }
  67. /**
  68. * 数据上报
  69. *
  70. * @param $mp_conf_info
  71. * @param $agent_id
  72. * @param $action_data
  73. *
  74. * @return array
  75. */
  76. public function dataReport($mp_conf_info, $agent_id, $action_data) {
  77. // 根据渠道游戏,查找关联的广告账号
  78. $_promoted_conf_id = $mp_conf_info['id'];
  79. $_promoted_appid = $mp_conf_info['mp_id'];
  80. $_promoted_game_id = $mp_conf_info['app_id'];
  81. $_mp_conf_agent_model = new MpConfAgentModel();
  82. $_mp_conf_agent_info = $_mp_conf_agent_model->getInfoByConfAgent($_promoted_conf_id, $agent_id);
  83. if (empty($_mp_conf_agent_info)) {
  84. $_code = CommonStatus::INNER_ERROR;
  85. return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'1');
  86. }
  87. // 查找关联的广告账号
  88. $_advertiser_conf_id = $_mp_conf_agent_info['advertiser_conf_id'];
  89. if (empty($_advertiser_conf_id)) {
  90. $_code = CommonStatus::NO_ERROR;
  91. return $this->huoSuccess($_code, CommonStatus::getMsg($_code));
  92. }
  93. $_mp_conf_model = new MpConfModel();
  94. $_advertiser_conf_info = $_mp_conf_model->getDataById($_advertiser_conf_id);
  95. $_advertiser_appid = $_advertiser_conf_info['mp_id'];
  96. $_advertiser_appsecret = $_advertiser_conf_info['app_secret'];
  97. $_mp_source_info = (new MpAdSourceModel())->getInfoByConfType(
  98. $_promoted_conf_id, $agent_id, $_advertiser_conf_id
  99. );
  100. if (empty($_mp_source_info['source_id'])) {
  101. $_code = CommonStatus::INNER_ERROR;
  102. return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'2');
  103. }
  104. $_user_action_set_id = $_mp_source_info['source_id'];
  105. $_action_param_value = $action_data['action_param_value'];
  106. if ($action_data['action_type'] == 'PURCHASE') {
  107. $_action_param_value = (int)$_action_param_value * 100;
  108. }
  109. $_action_data_url = $action_data['url'] ?? 'http://www.qq.com';
  110. $_action_time = $action_data['action_time'] ?? time();
  111. $_action_param_claim_type = $action_data['claim_type'] ?? 0;
  112. $_action_param_source = $action_data['source'] ?? "Web";
  113. $_param = [
  114. 'user_action_set_id' => "{$_user_action_set_id}",
  115. 'actions' => [[
  116. 'url' => $_action_data_url,
  117. 'action_time' => $_action_time,
  118. 'action_type' => $action_data['action_type'],
  119. 'user_id' => [
  120. 'wechat_app_id' => $_promoted_appid,
  121. 'wechat_openid' => $action_data['openid'],
  122. ],
  123. 'action_param' => [
  124. 'claim_type' => $_action_param_claim_type,
  125. 'source' => $_action_param_source,
  126. 'value' => $_action_param_value,
  127. ],
  128. ]]
  129. ];
  130. Log::write(['广告回传start:', date('Y-m-d H:i:s'), "玩家ID:{$action_data['mem_id']}", $_advertiser_appid, $_advertiser_appsecret, $_param], 'info', true);
  131. $_rs = (new MpAdApi())->dataReport($_advertiser_appid, $_advertiser_appsecret, $_param);
  132. Log::write(['广告回传end:', date('Y-m-d H:i:s'), $_rs], 'info', true);
  133. if (CommonStatus::NO_ERROR != $_rs['code']) {
  134. Log::write(
  135. ['func' => __FUNCTION__, 'args' => func_get_args(),
  136. 'param' => [$_advertiser_appid, $_advertiser_appsecret, $_param], 'result' => $_rs],
  137. LOG::ERROR, true
  138. );
  139. $_code = CommonStatus::UNKNOWN_ERROR;
  140. return $this->huoError($_code, CommonStatus::getMsg($_code));
  141. }
  142. $_add_data = [
  143. 'agent_id' => $action_data['agent_id'] ?? 0,
  144. 'mem_id' => $action_data['mem_id'] ?? 0,
  145. 'app_id' => $action_data['app_id'] ?? 0,
  146. 'mg_mem_id' => $action_data['mg_mem_id'] ?? 0,
  147. 'server_id' => $action_data['server_id'] ?? '',
  148. 'role_id' => $action_data['role_id'] ?? '',
  149. 'advertiser_app_id' => $_advertiser_appid,
  150. 'source_id' => $_user_action_set_id,
  151. 'url' => $_action_data_url,
  152. 'action_type' => $action_data['action_type'],
  153. 'action_time' => $_action_time,
  154. 'wechat_app_id' => $_promoted_appid,
  155. 'wechat_openid' => $action_data['openid'],
  156. 'action_param_value' => $_action_param_value,
  157. 'action_param_source' => $_action_param_source,
  158. 'action_param_claim_type' => $_action_param_claim_type,
  159. ];
  160. Log::write(['广告本地start:', date('Y-m-d H:i:s'), $_add_data], 'info', true);
  161. (new MpAdReportLogModel())->addData($_add_data);
  162. $_code = CommonStatus::NO_ERROR;
  163. return $this->huoSuccess($_code, CommonStatus::getMsg($_code));
  164. }
  165. /**
  166. * 获取数据源报表
  167. *
  168. * @param $mp_conf_info
  169. * @param $agent_id
  170. * @param $start_date
  171. * @param $end_date
  172. *
  173. * @return array
  174. */
  175. public function getDataSourceReport($mp_conf_info, $agent_id, $start_date, $end_date) {
  176. $_promoted_conf_id = $mp_conf_info['id'];
  177. $_promoted_appid = $mp_conf_info['mp_id'];
  178. $_mp_conf_agent_model = new MpConfAgentModel();
  179. $_mp_conf_agent_info = $_mp_conf_agent_model->getInfoByConfAgent($_promoted_conf_id, $agent_id);
  180. if (empty($_mp_conf_agent_info)) {
  181. $_code = CommonStatus::INNER_ERROR;
  182. return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'1');
  183. }
  184. // 查找关联的广告账号
  185. $_advertiser_conf_id = $_mp_conf_agent_info['advertiser_conf_id'];
  186. if (empty($_advertiser_conf_id)) {
  187. $_code = CommonStatus::NO_ERROR;
  188. return $this->huoSuccess($_code, CommonStatus::getMsg($_code));
  189. }
  190. $_mp_conf_model = new MpConfModel();
  191. $_advertiser_conf_info = $_mp_conf_model->getDataById($_advertiser_conf_id);
  192. $_advertiser_appid = $_advertiser_conf_info['mp_id'];
  193. $_advertiser_appsecret = $_advertiser_conf_info['app_secret'];
  194. $_mp_source_info = (new MpAdSourceModel())->getInfoByConfType(
  195. $_promoted_conf_id, $agent_id, $_advertiser_conf_id
  196. );
  197. if (empty($_mp_source_info['source_id'])) {
  198. $_code = CommonStatus::INNER_ERROR;
  199. return $this->huoSuccess($_code, CommonStatus::getMsg($_code));
  200. }
  201. $_user_action_set_id = $_mp_source_info['source_id'];
  202. $_param = [
  203. 'user_action_set_id' => $_user_action_set_id,
  204. 'time_granularity' => 'HOURLY',
  205. 'aggregation' => 'ACTION_TYPE',
  206. 'date_range' => json_encode(
  207. [
  208. 'start_date' => $start_date,
  209. 'end_date' => $end_date,
  210. ], JSON_UNESCAPED_UNICODE
  211. ),
  212. ];
  213. $_rs = (new MpAdApi())->getDataSourceReport($_advertiser_appid, $_advertiser_appsecret, $_param);
  214. \think\Log::write(['rrrrr', $_advertiser_appid, $_advertiser_appsecret, $_param], 'error', true);
  215. if (CommonStatus::NO_ERROR != $_rs['code']) {
  216. $_code = CommonStatus::UNKNOWN_ERROR;
  217. Log::write(
  218. ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => $_param, 'result' => $_rs],
  219. LOG::ERROR, true
  220. );
  221. return $this->huoError($_code, CommonStatus::getMsg($_code));
  222. }
  223. $_code = CommonStatus::NO_ERROR;
  224. return $this->huoSuccess($_code, CommonStatus::getMsg($_code), $_rs['data']);
  225. }
  226. /**
  227. * 获取数据源消息
  228. *
  229. * @param $mp_conf_info
  230. * @param $agent_id
  231. *
  232. * @return array
  233. */
  234. public function getDataSourceInfo($mp_conf_info, $agent_id) {
  235. $_promoted_conf_id = $mp_conf_info['id'];
  236. $_promoted_appid = $mp_conf_info['mp_id'];
  237. $_mp_conf_agent_model = new MpConfAgentModel();
  238. $_mp_conf_agent_info = $_mp_conf_agent_model->getInfoByConfAgent($_promoted_conf_id, $agent_id);
  239. if (empty($_mp_conf_agent_info)) {
  240. $_code = CommonStatus::INNER_ERROR;
  241. return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'1');
  242. }
  243. // 查找关联的广告账号
  244. $_advertiser_conf_id = $_mp_conf_agent_info['advertiser_conf_id'];
  245. if (empty($_advertiser_conf_id)) {
  246. $_code = CommonStatus::NO_ERROR;
  247. return $this->huoSuccess($_code, CommonStatus::getMsg($_code));
  248. }
  249. $_mp_conf_model = new MpConfModel();
  250. $_advertiser_conf_info = $_mp_conf_model->getDataById($_advertiser_conf_id);
  251. $_advertiser_appid = $_advertiser_conf_info['mp_id'];
  252. $_advertiser_appsecret = $_advertiser_conf_info['app_secret'];
  253. $_mp_source_info = (new MpAdSourceModel())->getInfoByConfType(
  254. $_promoted_conf_id, $agent_id, $_advertiser_conf_id
  255. );
  256. if (empty($_mp_source_info['source_id'])) {
  257. $_code = CommonStatus::INNER_ERROR;
  258. return $this->huoSuccess($_code, CommonStatus::getMsg($_code));
  259. }
  260. $_user_action_set_id = $_mp_source_info['source_id'];
  261. $_param = [
  262. 'user_action_set_id' => $_user_action_set_id,
  263. ];
  264. $_rs = (new MpAdApi())->getDataSourceInfo($_advertiser_appid, $_advertiser_appsecret, $_param);
  265. \think\Log::write(['rrrrr', $_advertiser_appid, $_advertiser_appsecret, $_param], 'error', true);
  266. if (CommonStatus::NO_ERROR != $_rs['code']) {
  267. $_code = CommonStatus::UNKNOWN_ERROR;
  268. Log::write(
  269. ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => $_param, 'result' => $_rs],
  270. LOG::ERROR, true
  271. );
  272. return $this->huoError($_code, CommonStatus::getMsg($_code));
  273. }
  274. $_code = CommonStatus::NO_ERROR;
  275. return $this->huoSuccess($_code, CommonStatus::getMsg($_code), $_rs['data']);
  276. }
  277. }