当前位置: 首页 > news >正文

php 对接Pangle海外广告平台收益接口Reporting API

今天对接的是Pangle广告reporting api接口,拉取广告收益回来自己做统计。记录分享给大家
首先是文档地址,进入到Pangle后台就能看到文档地址以及参数:
文档地址:https://www.pangleglobal.com/zh/integration/reporting-api-v2
在这里插入图片描述

在这里插入图片描述

接入这些第三方广告平台,流程基本上一样,拿好参数之后可以直接开始对接了,我直接贴代码出来:

$params = array("currency" => "usd","date" => $date,"time_zone" => 0,"timestamp" => time());$url = pangle::get_media_rt_income_url('MD5', $params);$client = new Client();$response = $client->request('GET', $url);$result = json_decode($response->getBody()->getContents(), true);......下面是自己的逻辑代码

params 组装好参数,一个就是收益的计量单位,我们使用的是美元,还有就是时区

<?phpnamespace App\Services\ThirdApi\lib;final class pangle
{private static $user_id = 2222;                # Replace with your user_idprivate static $role_id = 11111;               # Replace with your role_idprivate static $secure_key = "-11111;    # Replace with your Secutiry Keyprivate static $version = "2.0";const PANGLE_HOST = "https://open-api.pangleglobal.com";const KEY_SIGN_TYPE = "sign_type";const KEY_SIGN = "sign";const KEY_ROLE_ID = "role_id";const KEY_USER_ID = "user_id";const KEY_VERSION = "version";// Supported sign methodprivate static $sign_array = array('MD5' => 'sign_md5',);// md5 sign methodprivate static function sign_md5($str, $key){$sign_str = $str . $key;$sign = md5($sign_str);#printf("md5 [sign string without key:%s] => [%s]", $sign_str,$sign);return $sign;}// Examine sign methodprivate static function valid_sign_method($method){if (empty(self::$sign_array[$method])) {printf("unexpected sign method %s", $method);return false;}return true;}// Sign the stringprivate static function sign($method, $str, $key){if (!self::valid_sign_method($method)) {return false;}return call_user_func(array('self', self::$sign_array[$method]), $str, $key);}// Sign the arrayprivate static function make_sign($method, $arr_input, $sign_key){// Config array to be signed$sign_str = '';foreach ($arr_input as $key => $val) {$sign_str .= '&' . strval($key) . '=' . strval($val);}$sign_str = substr($sign_str, 1);// Sign$ret = self::sign($method, $sign_str, $sign_key);return $ret;}// Create signed query stringprivate static function make_signed_querystring($method, $arr_input, $key, $key_sign = self::KEY_SIGN, $key_sign_method = self::KEY_SIGN_TYPE){// Sign$sign = self::make_signed_array_utf8($method, $arr_input, $key, $key_sign, $key_sign_method);if (!$sign) {return false;}// Create querystring$query_string = http_build_query($arr_input);return sprintf("%s&%s=%s", $query_string, $key_sign, $sign);}/*** to retuen data in json,convert the sign result  into utf-8* @param sign_method, array to sign, secure_key, array key of sign and sign_method* @return result of sign when success while false if not.*/private static function make_signed_array_utf8($method, &$arr_input, $key, $key_sign = self::KEY_SIGN, $key_sign_method = self::KEY_SIGN_TYPE){// add the sign method into the array to be signed$arr_input[$key_sign_method] = $method;$arr_input[self::KEY_VERSION] = self::$version;if (self::$role_id != "") {$arr_input[self::KEY_ROLE_ID] = self::$role_id;}if (self::$user_id != "") {$arr_input[self::KEY_USER_ID] = self::$user_id;}// Sort Arrayif (!ksort($arr_input)) {printf("make_signed_array_utf8::sort arr_input failed, arr: %s", printf($arr_input, true));return false;}// create string to be signed$signStr = '';foreach ($arr_input as $inputKey => $inputVal) {$signStr .= '&' . $inputKey . '=' . $inputVal;}$signStr = substr($signStr, 1);// convert the string to utf-8$signStr = mb_convert_encoding($signStr, 'UTF-8', 'GBK');// Sign$ret = self::sign($method, $signStr, $key);if (!$ret) {printf("make sign_utf8 failed, method:%s, str:%s", $method, print_r($arr_input, true));return false;}return $ret;}static function get_media_rt_income_url($method, $arr_input, $key_sign = self::KEY_SIGN, $key_sign_method = self::KEY_SIGN_TYPE){try {$needDelArr = array();foreach ($arr_input as $key => $value) {if ($value === "") {array_push($needDelArr, $key);}}foreach ($needDelArr as $key => $value) {unset($arr_input[$value]);}return self::PANGLE_HOST . "/union_pangle/open/api/rt/income?" . self::make_signed_querystring($method, $arr_input, self::$secure_key, $key_sign, $key_sign_method);} catch (Exception $e) {printf($e->getMessage());return "";}}static function set_secure_key($secure_key){self::$secure_key = $secure_key;}static function set_user_id($user_id){self::$user_id = $user_id;}static function set_role_id($role_id){self::$role_id = $role_id;}}

这个是Pangle封装的类,我们直接使用即可
Pangle基本上参数组装之后,再用它的方法生成一个请求地址,然后GET请求就能拿到相应的数据,
请求参数有这些,大家根据自己的需求添加

下面是请求参数,有些是必选的,有些是过滤指标,相关参数,大家根据自己需要选择
支持的参数有下面这些

在这里插入图片描述

$model_type = ['android' => 1,'ios' => 2,];

然后就是返回设备类型,安卓返回的是android,苹果返回的是ios,大家根据自己的需要存储
以上是我对接Pangle广告收益接口代码,欢迎大家交流学习,希望能对你有帮助。

相关文章:

  • mysql之基本概念与安装
  • maven手动上传的第三方包 打包项目报错 Could not find xxx in central 解决办法
  • 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像
  • 【C语言】指针基础知识(一)
  • Excel使用VLOOKUP函数
  • C# 使用OpenCvSharp4将Bitmap合成为MP4视频的环境
  • Android和IOS Flutter应用开发使用 Provider.of 时,可以使用 listen: false 来避免不必要的重建
  • 算法---二分查找练习-2(寻找旋转排序数组中的最小值)
  • 稀碎从零算法笔记Day22-LeetCode:
  • 【类脑智能】脑网络通信模型分类及量化指标(附思维导图)
  • Spark-Scala语言实战(3)
  • Spring Boot:筑基
  • 【滑动窗口】长度最小的子数组|无重复字符的最长子串|最大连续1的个数 III|将 x 减到 0 的最小操作数
  • EPSON XV4001BC陀螺仪传感器汽车导航系统的应用
  • LabVIEW NV色心频率扫描
  • 【391天】每日项目总结系列128(2018.03.03)
  • HTTP--网络协议分层,http历史(二)
  • jdbc就是这么简单
  • Python - 闭包Closure
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpriteKit 技巧之添加背景图片
  • SQL 难点解决:记录的引用
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 规范化安全开发 KOA 手脚架
  • 近期前端发展计划
  • 区块链将重新定义世界
  • 推荐一个React的管理后台框架
  • 写给高年级小学生看的《Bash 指南》
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (万字长文)Spring的核心知识尽揽其中
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .Net 8.0 新的变化
  • .net core Swagger 过滤部分Api
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net中ListT 泛型转成DataTable、DataSet
  • .so文件(linux系统)
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AIGC] Spring Interceptor 拦截器详解
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [CF482B]Interesting Array
  • [docker] Docker的私有仓库部署——Harbor
  • [ES-5.6.12] x-pack ssl
  • [exgcd] Jzoj P1158 荒岛野人
  • [ffmpeg] av_opt_set 解析