PHP接入美团联盟推广

美团给的文档没有PHP的示例代码,下面是以Javascript示例更改的PHP代码,并且已经跑通

一、计算签名

签名类,因为接口不多,所以这里只写了获取请求头

class Meituan
{private $APP_KEY = '你的APP_KEY';private $APP_SECRET = '你的APP_SECRET';/*** 获取签名头部字段* */public function getSignHeaders($config): array{// 获取当前时间的微秒数(浮点数,包含秒和小数部分的秒,小数部分代表微秒)$microtime = microtime(true);// 将微秒数转换为毫秒数$milliseconds = sprintf('%d', $microtime * 1000);$signHeaders = ['Content-Type:application/json','S-Ca-App:' . $this->APP_KEY,'S-Ca-Timestamp:' . $milliseconds,'S-Ca-Signature-Headers:S-Ca-Timestamp,S-Ca-App','Content-MD5:' . $this->contentMD5($config),];$newSignHeaders = "S-Ca-App:" . $this->APP_KEY  . "\n" . 'S-Ca-Timestamp:' . $milliseconds . "\n";$signHeaders[] = 'S-Ca-Signature:' . $this->sign($config, $newSignHeaders);return $signHeaders;}public function sign($config, $signHeaders): string{$httpMethod = $config['method'];$contentMD5 = $this->contentMD5($config);$headers = $signHeaders;$url = $this->url($config);// 构建待签名的字符串$stringToSign = $httpMethod . "\n" . $contentMD5 . "\n" . $headers . $url;// 对HMAC签名进行Base64编码return base64_encode(hash_hmac('sha256', $stringToSign, $this->APP_SECRET, true));}public function contentMD5($config): string{// 检查是否为 POST 请求并且配置中包含数据if (isset($config['method']) && strtolower($config['method']) === 'post' && isset($config['data'])) {// 将数据转换为JSON字符串$jsonString = json_encode($config['data']);// 计算MD5哈希值(注意:md5函数默认返回哈希值的十六进制表示)$md5Hash = md5($jsonString, true); // 第二个参数true表示返回原始二进制数据// 对MD5哈希值进行Base64编码return base64_encode($md5Hash);} else {return '';}}public function url($config): string{// 提取 URL 路径部分$url = $config['url'];$path = '/' . implode('/', array_slice(explode('/', $url), 3));// 检查是否为 GET 请求并且配置中包含请求数据if (isset($config['method']) && strtolower($config['method']) === 'get' && isset($config['params'])) {// 对请求数据对象进行排序ksort($config['params']);$reqData = $config['params'];// 构建查询字符串$query = http_build_query($reqData);// 返回完整的 URL,包括查询字符串return $path . '?' . $query;} else {// 返回仅包含路径的 URLreturn $path;}}}

二、调用接口

登录美团联盟后台,查询是否有这几个接口

请求示例

// 调用接口
$data = [];
$mt = new Meituan();
// 商品查询接口
$url = 'https://media.meituan.com/cps_open/common/api/v1/query_coupon';
$config = ['method' => 'POST','data' => $data,'url' => $url
];
$header = $mt->getSignHeaders($config);
$res = $this->curlPost($url, $data, 5, $header,'json');
$res = json_decode($res, true);

curlPost方法

function curlPost($url, $post_data = array(), $timeout = 5, $header = "", $data_type = "")
{$header = empty($header) ? '' : $header;//支持json数据数据提交if($data_type == 'json'){$post_string = json_encode($post_data);}elseif($data_type == 'array') {$post_string = $post_data;}elseif(is_array($post_data)){$post_string = http_build_query($post_data, '', '&');}$ch = curl_init();    // 启动一个CURL会话curl_setopt($ch, CURLOPT_URL, $url);     // 要访问的地址curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // 对认证证书来源的检查   // https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);     // Post提交的数据包curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);     // 设置超时限制防止死循环curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // 获取的信息以文件流的形式返回curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头$result = curl_exec($ch);curl_close($ch);return $result;
}

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

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

相关文章

ChatGPT重大更新:新增实时搜索和高级语音

12月17日消息,据报道,OpenAI开启了第八天技术分享直播,对ChatGPT搜索功能进行了大量更新。 此次ChatGPT新增的功能亮点纷呈。其中,实时搜索功能尤为引人注目。OpenAI对搜索算法进行了深度优化,使得用户提出问题后&…

Vue3组件封装技巧与心得

摘要: 日常开发中,用Vue组件进行业务拆分,代码解耦是一个很好的选择; 今天就来分享一下我在使用Vue3进行组件封装的一些技巧和心得,希望能够帮助到大家; 1. 组件特性: 在Vue中组件是一个独立的…

数据分析实战—鸢尾花数据分类

1.实战内容 (1) 加载鸢尾花数据集(iris.txt)并存到iris_df中,使用seaborn.lmplot寻找class(种类)项中的异常值,其他异常值也同时处理 。 import pandas as pd from sklearn.datasets import load_iris pd.set_option(display.max_columns, N…

【自用】通信内网部署rzgxxt项目_01,后端pipeDemo部署(使用nssm.exe仿照nohup)

做完这些工作之后,不要忘记打开 Windows Server 的防火墙端口,8181、8081、8080、22、443、1521 做完这些工作之后,不要忘记打开 Windows Server 的防火墙端口,8181、8081、8080、22、443、1521 做完这些工作之后,不要…

【Apache Doris】周FAQ集锦:第 26 期

SQL问题 Q1 doris 3.0存算分离模式下,建表的时是否需要指定表的副本数 不需要,指定了也会忽略;存算分离模式下,数据副本由远端存储去管控。 Q2 doris 通过dbeaver查询时报错:[SXXXX]… doris的错误码通常都是EXXXX&…

OpenSSL 心脏滴血漏洞(CVE-2014-0160)

OpenSSL 心脏滴血漏洞(CVE-2014-0160) Openssl简介: 该漏洞在国内被译为"OpenSSL心脏出血漏洞”,因其破坏性之大和影响的范围之广,堪称网络安全里程碑事件。 OpenSSL心脏滴血漏洞的大概原理是OpenSSL在2年前引入了心跳(hearbea0机制来维特TS链接的…

Git实用指南(精简版)

目录 读者须知 Git是什么 Git的原理 文件在Git中的几种状态 快速上手 结尾 读者须知 本文章适合从未接触过git,或者需要深度学习Git的用户进行阅读. 文末有详细的文档,读者可以前往Github下载阅读!!三克油 Git是什么 简单来说,Git是一个代码备份工具,你可以使用指令对…

YOLOv8目标检测(七)_AB压力测试

YOLOv8目标检测(一)_检测流程梳理:YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集:YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型:YOLOv8目标检测(三)_训…

在 Spring Boot 3 中实现基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种有价值的访问控制模型,可增强安全性、简化访问管理并提高效率。它在管理资源访问对安全和运营至关重要的复杂环境中尤其有益。 我们将做什么 我们有一个包含公共路由和受限路由的 Web API。受限路由需要数据库中用户的有效 JWT。 现在用户…

线程知识总结(一)

1、概述 1.1 进程与线程 进程是程序运行时,操作系统进行资源分配的最小单位,包括 CPU、内存空间、磁盘 IO 等。从另一个角度讲,进程是程序在设备(计算机、手机等)上的一次执行活动,或者说是正在运行中的程…

OpenCV圆形标定板检测算法findGrid原理详解

OpenCV的findGrid函数检测圆形标定板的流程如下: class CirclesGridClusterFinder {CirclesGridClusterFinder(const CirclesGridClusterFinder&); public:CirclesGridClusterFinder

基于SpringBoot+Vue实现的个人备忘录系统

🎄 写在前面 最近学习vue,所以抽时间就用SpringBootVue做了一个个人备忘录,本意是想打造一个轻量级的、自托管的备忘录中心,可能是老了(haha),很多时候都觉得好记性不如烂笔头,所以就有了这个小…

docker简单命令

docker images 查看镜像文件 docker ps -a 查看容器文件 docker rm 0b2 删除容器文件,id取前三位即可 docker rmi e64 删除镜像文件(先删容器才能删镜像),id取前三位即可 在包含Dockerfile文件的目录…

【前端】vue数组去重的3种方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数组去重说明二、Vue数组去重的3种方法 前言 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发工具,本…

BPMN与一般的流程图区别在那里?

1. 语义和标准性 BPMN(业务流程建模符号) 基于标准语义:BPMN是一种标准化的业务流程建模语言,拥有一套严谨的语义规范。它由国际对象管理组织(OMG)维护,定义了事件、活动、网关和流向等元素的确…

《薄世宁医学通识50讲》以医学通识为主题,涵盖了医学的多个方面,包括医学哲学、疾病认知、治疗过程、医患关系、公共卫生等

《薄世宁医学通识50讲》是一门由薄世宁医生主讲的医学通识课程,该课程旨在通过深入浅出的方式,向广大听众普及医学知识,提升公众对医学的认知和理解。 晓北斗推荐-薄世宁医学通识 以下是对该课程的详细介绍: 一、课程概述 《薄世…

二八(vue2-04)、scoped、data函数、父子通信、props校验、非父子通信(EventBus、provideinject)、v-model进阶

1. 组件的三大组成部分(结构/样式/逻辑) 1.1 scoped 样式冲突 App.vue <template><!-- template 只能有一个根元素 --><div id"app"><BaseOne></BaseOne><BaseTwo></BaseTwo></div> </template><script…

操作系统文件管理

一、文件系统 1. 文件的概念 &#xff08;1&#xff09;文件的概念与文件系统 文件是操作系统中的重要概念&#xff0c;是存储在计算机硬盘上的信息集合&#xff0c;如文本文档、图片、程序等。在系统运行时&#xff0c;资源调度和分配以进程为基本单位&#xff0c;而用户的…

【论文研读】U-DiTs:在U型扩散Transformer中引入下采样Token,以更低计算成本超越DiT-XL/2

推荐理由 这篇论文提出了一种新的U型扩散Transformer模型&#xff08;U-DiT&#xff09;&#xff0c;该模型通过对自注意力机制中的查询、键和值进行下采样&#xff0c;有效减少了计算冗余&#xff0c;同时提高了性能。论文中的研究不仅包含理论分析和实验验证&#xff0c;还展…

清远榉之乡托养机构为你深度分析:特殊碳水化合物饮食对自闭症的作用

在探索自闭症干预方法的道路上&#xff0c;各种尝试不断涌现。其中&#xff0c;特殊碳水化合物饮食引起了不少家长的关注。那么&#xff0c;特殊碳水化合物饮食对自闭症究竟有怎样的作用呢&#xff1f;今天&#xff0c;清远榉之乡托养机构为你深度分析。 榉之乡大龄自闭症托养机…