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广告收益接口代码,欢迎大家交流学习,希望能对你有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法---二分查找练习-2(寻找旋转排序数组中的最小值)

寻找旋转排序数组中的最小值 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;检查数组的最后一个元素是否大于第一个元素。如果是&#xff0c;说明数组没有进行旋转&#xff0c;直接返回第一个元素作为最小值…

稀碎从零算法笔记Day22-LeetCode:

题型&#xff1a;链表 链接&#xff1a;2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;Leet 题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 …

vue项目:使用xlsx导出Excel数据

文章目录 一、安装xlsx二、报错及解决三、编写公共方法四、方法使用 一、安装xlsx 执行命令&#xff1a;npm i xlsx file-saver --save 二、报错及解决 使用时&#xff1a;import XLSX from "xlsx"; 发现如下报错信息 报错原因&#xff1a;xlsx版本不兼容。 解…

Java项目基于SpringBoot和Vue的时装购物系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的时装购物系统。 &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f495;个人简介&#xff1a;混迹在java圈十年有余&#xff0c;擅长Java、微信小程序、Python、Android等&#xff0c;大家有这一块的问题可…

web前端之不一样的下拉菜单、不选中第一个元素的样式效果、伪类排除第一个元素、符号选择器、hover、not、first、child

MENU 效果图htmlcssJShtmlcss 效果图 htmlcssJS html <nav><ul><li class"navli"><h4>HTML5</h4><ul class"ulson"><li class"lison">HTML5</li></ul></li><li class"na…

Django单表数据库操作

单表操作 测试脚本 当你只想测试django某一个py文件的内容,可以不用书写前后端的交互,直接写一个测试脚本即可 单表删除 数据库操作方法: 1.all():查询所有的数据 2.filter():带有过滤条件的查询 3.get():直接拿数据对象,不存在则报错 4.first():拿queryset里面的第一个元素…

天童知识课堂|“春分”

春色正中分&#xff0c;人间恰良辰。春分&#xff0c;也称升分&#xff0c;是二十四节气之一。春分的到来&#xff0c;意味着春天已经过去一半了&#xff0c;气候也逐渐温暖&#xff0c;阳光更加明媚。而关于春分的知识&#xff0c;你知道多少呢&#xff1f;来和天童美语一起了…

鸿蒙开发实战:【系统服务管理部件】

简介 samgr组件是OpenHarmony的核心组件&#xff0c;提供OpenHarmony系统服务启动、注册、查询等功能。 系统架构 图 1 系统服务管理系统架构图 目录 /foundation/systemabilitymgr ├── samgr │ ├── bundle.json # 部件描述及编译文件 │ ├── frameworks …

vue+elementui中table实现单选行功能

el-table插件可以选择行&#xff0c;但是只能多选&#xff0c;而项目中有单选的需求。 效果如下图所示&#xff0c;点击行或者点击复选框都可以选中行&#xff08;高亮&#xff0c;复选框选中&#xff09;&#xff0c;并且每次只选中当前行&#xff0c;之前选中的行清空。点击标…

Elasticsearch:让你的 Elasticsearch 索引与 Python 和 Google Cloud Platform 功能保持同步

作者&#xff1a;来自 Elastic Garson Elasticsearch 内的索引 (index) 是你可以将数据存储在文档中的位置。 在使用索引时&#xff0c;如果你使用的是动态数据集&#xff0c;数据可能会很快变旧。 为了避免此问题&#xff0c;你可以创建一个 Python 脚本来更新索引&#xff0…

端口如何映射到外网?

在现代信息化社会中&#xff0c;远程访问已经成为人们工作和生活中不可或缺的一部分。复杂的网络环境和网络限制可能会给远程连接带来不便。在这种情况下&#xff0c;端口映射到外网的技术应运而生。本文将介绍端口映射到外网的概念、应用场景以及一种优秀的解决方案——【天联…

Docker-安装

Docker ⛅Docker-安装&#x1f320;各平台支持情况&#x1f320;Server 版本安装☃️Ubuntu☃️Centos &#x1f320;Docker 镜像源修改&#x1f320;Docker 目录修改 ⛅Docker-安装 &#x1f320;各平台支持情况 &#x1f320;Server 版本安装 ☃️Ubuntu &#x1f342;安装…

LiveGBS流媒体平台GB/T28181功能-HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书

LiveGBS功能支持HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 LiveCMS 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、HTTPS测试证书3、验证HTTPS服务4、为什么要…

Visual Studio 2013 - 清理

Visual Studio 2013 - 清理 1. 清理1.1. 工程清理1.2. 解决方案清理 References 1. 清理 Debug Release 1.1. 工程清理 (right mouse click on the project) -> 清理 1.2. 解决方案清理 (right mouse click on the solution) -> 清理解决方案 References [1] Yongq…

Vue技能树总结01

Vue vs React 相似之处: 它们都有使用 Virtual DOM&#xff1b;提供了响应式&#xff08;Reactive&#xff09;和组件化&#xff08;Composable&#xff09;的视图组件。将注意力集中保持在核心库&#xff0c;而将其他功能如路由和全局状态管理交给相关的库。React 比 Vue 有更…

记录C++中,子类同名属性并不能完全覆盖父类属性的问题

问题代码&#xff1a; 首先看一段代码&#xff1a;很简单&#xff0c;就是BBB继承自AAA&#xff0c;然后BBB重写定义了同名属性&#xff0c;然后调用父类AAA的打印函数&#xff1a; #include <iostream> using namespace std;class AAA { public:AAA() {}~AAA() {}void …

网络货运平台有哪些

网络货运平台有运满满、货拉拉、快狗打车、滴滴货运、货运宝、G7、货骑士、云鸟配送、积微物联、中储智运等。 运满满 运满满创立于2013年&#xff0c;是国内首家基于云计算、大数据、移动互联网和人工智能技术开发的货运调度平台&#xff0c;是公路物流领域高新技术综合应用…

线性代数基础概念和在AI中的应用

基本概念 线性代数是数学的一个分支&#xff0c;专注于向量、向量空间&#xff08;也称为线性空间&#xff09;、线性变换和矩阵的研究。这些概念在数据科学、人工智能、工程学和物理学等多个领域都有广泛应用。以下是这些基本概念的详细解释和它们在数据处理和AI中的应用。 …

开发微信小程序被鹅厂背刺

最近在开发微信小程序&#xff0c;没来得及更文。等开发完成后&#xff0c;给大家写保姆帖系列。刚刚看到一张动图&#xff0c;忍不住分享给大家。属实反映了鹅厂风格了。

PX4|基于FAST-LIO mid360的无人机室内自主定位及定点悬停

目录 前言环境配置运行fast-lio修改px4位置信息融合方式编写位置坐标转换及传输节点 前言 在配置mid360运行环境后&#xff0c;可使用mid360进行室内的精准定位。 环境配置 在livox_ros_driver2的上级目录src下保存fast-lio的工程 git clone https://github.com/hku-mars/F…