PHP Thinkphp5.0实现抖音团购券码核销

上一篇文章我们说到项目里需要用到美团API接口来实现卡券核销的功能。
那么这篇文章就讲一下,如何实现抖音团购券码的核销功能。
近期项目需要,抖音团购的券码核销,话不多说,直接上代码吧!
凑合着用吧,反正能销,具体业务需要自己写

<?php/** 抖音店铺团购券核销* author: Mr. YuYang**/
class DouyinTest
{protected $Appid = '';//appidprotected $AppSecret = '';//秘钥protected $pro_id = ''; // 门店id/**  这里是核销的方法*/public function DouyinAfterVerification(){$encrypted_data = '100000000000000';   // code  格式 100000000000000$url = 'https://open.douyin.com/goodlife/v1/fulfilment/certificate/prepare/';$client_token = $this->getClientToken();if(!$client_token){die('token 获取失败');}$res = $this->prepareCertificate($client_token,'',$encrypted_data);$v = $res['data']['verify_token'];$code = $res['data']['certificates'][0]['encrypted_code'];$hexiao = $this->verifyCoupon($v,$client_token,$this->pro_id,[$code]);//核销成功后的所有信息都在这里 打印自己看就行//所有的逻辑根据自己项目需要来自己写。print_r($hexiao);}/*** @param $access_token* @param $encrypted_data* @param null $code* @return mixed* 通过code 核销券码准备*/public function prepareCertificate($access_token, $encrypted_data, $code = null) {$url = 'https://open.douyin.com/goodlife/v1/fulfilment/certificate/prepare/';$params = [];if (!empty($encrypted_data)) {$params['encrypted_data'] = urlencode($encrypted_data);} elseif (!empty($code)) {$params['code'] = $code;} else {throw new Exception("encrypted_data 和 code 参数不能同时为空");}$back = $this->douyinRequest($url,$params,$access_token,0);return $back;}/*** @param $verifyToken* @param $client_token* @param $poiId* @param $encryptedCodes* @param null $codes* @param null $orderId* @param null $codeWithTimeList* @param null $voucher* @return mixed*/public function verifyCoupon($verifyToken,$client_token, $poiId, $encryptedCodes, $codes = null, $orderId = null, $codeWithTimeList = null, $voucher = null) {$url = 'https://open.douyin.com/goodlife/v1/fulfilment/certificate/verify/';$data = array('verify_token' => $verifyToken,'poi_id' => $poiId,'encrypted_codes' => $encryptedCodes,'codes' => $codes,);$response = $this->douyinRequest($url,$data,$client_token);return $response;}/*** @return mixed* 获取token*/public function getClientToken(){//正式环境:https://open.douyin.com/oauth/client_token///沙盒环境:https://open-sandbox.douyin.com/oauth/client_token/$url = 'https://open.douyin.com/oauth/client_token/';$param = ['client_key' => $this->Appid,'client_secret' => $this->AppSecret,'grant_type' => 'client_credential'];$res = $this->requestUrl($url,$param);$back = json_decode($res,true);if($back['data']['error_code'] == 0){return $back['data']['access_token'];}}/** curl 提交*/public function requestUrl($url,$data=null,$https=true,$method='post'){//1.初始化url$ch = curl_init($url);//2.设置相关的参数//字符串不直接输出,进行一个变量的存储curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//判断是否为https请求if($https === true){curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);}//判断是否为post请求if($method == 'post'){curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);}curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:multipart/form-data'));//3.发送请求$str = curl_exec($ch);//4.关闭连接curl_close($ch);//6.返回请求到的结果return $str;}/*** 抖音请求方法* @param $url* @param $client_token* @param array $data* @param int $is_post* @return mixed*/public function douyinRequest($url,$data = [],$client_token = '',$is_post = 1){$headers = ['Content-Type: application/json','access-token: ' . $client_token,];$curl = curl_init();if($is_post){curl_setopt_array($curl, array(CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_ENCODING => '',CURLOPT_CUSTOMREQUEST => 'POST',CURLOPT_POSTFIELDS => json_encode($data),CURLOPT_HTTPHEADER => $headers,));}else{$data = http_build_query($data);curl_setopt_array($curl, [CURLOPT_URL => "$url?$data",CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => $headers,]);}$response = curl_exec($curl);curl_close($curl);return json_decode($response,true);}
}

以上的代码是抖音卡券核销的功能。有需要的小伙伴记得关注、收藏。

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

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

相关文章

pytorch的CrossEntropyLoss交叉熵损失函数默认是平均值

pytorch中使用nn.CrossEntropyLoss()创建出来的交叉熵损失函数计算损失默认是求平均值的&#xff0c;即多个样本输入后获取的是一个均值标量&#xff0c;而不是样本大小的向量。 net nn.Linear(4, 2) loss nn.CrossEntropyLoss() X torch.rand(10, 4) y torch.ones(10, dt…

MySQL表的内外连接

MySQL表的内外连接 一.内连接二.外连接1. 左外连接2. 右外连接 三.案例 表的连接分为内连和外连。 一.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询。而使…

DBA 职责及日常工作职责

DBA 职责及日常工作职责: 1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境. 2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案. 3.根据开发人员设计的应用系统需求创建数据库存储结构. 4.根据开发人员设计的应用系统需求创建数据库对象 5…

刷题DAY15

第一题 给定一个数组arr 求子数组最大累加和 最暴力的 枚举每一个子数组 出结果 优化解 用一个cur指针保存累加和 每次cur变大 就用它更新max 如果cur累加到0以下 回复成0 假设答案法 假设我们最大的子数组是i 到 j位置上的 那么这个i 到j 之间 必不存在一个k使i...k累加和…

网络面试题-UDPTCP

1 UDP 1.1 ⾯向报⽂ UDP 是⼀个⾯向报⽂&#xff08;报⽂可以理解为⼀段段的数据&#xff09;的协议。意思就是UDP 只是报⽂的搬运⼯&#xff0c;不会对报⽂进⾏任何拆分和拼接操作 具体来说 在发送端&#xff0c;应⽤层将数据传递给传输层的 UDP 协议&#xff0c; UDP 只会…

Aligning Large Language Models with Human: A Survey

本文也是LLM相关的综述文章&#xff0c;针对《Aligning Large Language Models with Human: A Survey》的翻译。 对齐人类与大语言模型&#xff1a;综述 摘要1 引言2 对齐数据收集2.1 来自人类的指令2.1.1 NLP基准2.1.2 人工构造指令 2.2 来自强大LLM的指令2.2.1 自指令2.2.2 …

sql分类 DDL、DML、DCL

DDL &#xff08;Data Definition Language 数据定义语言) 这些语句定了不同的数据库、表、视图、索引等数据库对象&#xff0c;还可以用来创建、删除、修改数据库和数据表的结构 如: CREATE \ DROP \ ALTER \ RENAME \ TRUNCATE 等 DML&#xff08;Data Manipulation Langua…

前端面试的性能优化部分(3)每天10个小知识点

31.请解释前端性能优化的重要性以及优化的目标是什么&#xff1f; 前端性能优化是指在网页或应用的前端部分&#xff08;通常是指用户界面&#xff09;进行改进&#xff0c;以提高其加载速度、响应性能和用户体验。在现代互联网应用中&#xff0c;前端性能优化至关重要&#x…

antDv table组件滚动截图方法的实现

在开发中经常遇到table内容过多产生滚动的场景&#xff0c;正常情况下不产生滚动进行截图就很好实现&#xff0c;一旦产生滚动就会变得有点棘手。 下面分两种场景阐述解决的方法过程 场景一&#xff1a;右侧不固定列的情况 场景二&#xff1a;右侧固定列的情况 场景一 打开…

汽车电子功能安全

功能安全考虑 分析方法&#xff1a;FMEA&#xff0c;DFMEA&#xff08;设计潜在失效模式和影响分析&#xff09; 严重度&#xff08;Severity&#xff09;&#xff0c;暴露率&#xff08;Exposure&#xff09;&#xff0c;可控性&#xff08;Controllability&#xff09;评估…

IDEA中maven项目失效,pom.xml文件橙色/橘色

IDEA中maven项目失效&#xff0c;pom.xml文件橙色/橘色 IDEA中Maven项目失效 IDEA中创建的maven项目中的文件夹都变成普通格式&#xff0c;pom.xml变成橙色 右键点击橙色的pom.xml文件&#xff0c;选择add as maven project maven项目开始重新导入相应依赖&#xff0c;恢复…

JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 &#x1f4da;正则表达式&#x1f4da;正则表达式字面量方式&#x1f4da;字符串&正则表达式&#x1f407;split()&#x1f407;search()&#x1f407;match()&#x1f407;replace()…

MyBatis-动态SQL-if and where

动态SQL 随着用户的输入或外部条件的变化而变化的SQL语句&#xff0c;我们称之为动态SQL语句 select *from empwhere name like concat(%, #{name}, %)and gender #{gender}and entrydate between #{begin} and #{end}order by update_time desc; 在上述的SQL语句…

如何实现 token 加密

介绍下如何实现 token 加密 以最常见的 token 格式 jwt 为例 token 分为三段&#xff0c;分别是 header、payload、signature 其中&#xff0c;header 标识签名算法和令牌类型&#xff1b;payload 标识主体信息&#xff0c;包含令牌过期时间、发布时间、发行者、主体内容等&…

科技引领,教育革新|EasyV助力数字孪生智慧教育建设!

数字孪生校园是以物联网、大数据、云计算、人工智能、三维可视化等新型数字化技术为基础&#xff0c;构建的数智校园的“大脑”。对校园的人、车、资产设施、各业务系统进行全联接&#xff0c;实现数据全融合、状态全可视、业务全可管、事件全可控&#xff0c;使校园更安全、更…

2023-08-04 LeetCode每日一题(不同路径 III)

2023-08-04每日一题 一、题目编号 980. 不同路径 III二、题目链接 点击跳转到题目位置 三、题目描述 在二维网格 grid 上&#xff0c;有 4 种类型的方格&#xff1a; 1 表示起始方格。且只有一个起始方格。2 表示结束方格&#xff0c;且只有一个结束方格。0 表示我们可以…

985/211/双一流大学名单

985大学“985工程”是在1998年5月北京大学百年校庆的致辞中提到的&#xff0c;因为日期在98年5月&#xff0c;所以称作“985”。该工程在1999年时正式启动&#xff0c;最初选定的院校包括清华大学&#xff0c;北京大学等九所院校。现包括我国39所院校。 211大学“211 工程”是…

Noah-MP陆面过程模型建模方法与站点、区域模拟教程

详情点击链接&#xff1a;Noah-MP陆面过程模型建模方法与站点、区域模拟教程 陆面过程的内容&#xff08;陆表能量平衡、水循环、碳循环等&#xff09;&#xff0c;陆面过程研究的重要性。 图 1 陆面过程主要研究内容 陆面过程模型的发展、基本原理、常用陆面过程模型等。 图…

yay无法更新问题解决

背景 更新yay后&#xff0c;yay安装软件捞出问题&#xff0c;查的github上的都不靠谱。因此需要把yay的版本固定下&#xff0c;正常的11版本是可用的 解决方案 sudo pacman -S --needed git base-devel git clone https://aur.archlinux.org/yay.git cd yay makepkg -si # 注…

Frida Error: getPackageInfoNoCheck(): has more than one overload的解决方法

使用frida绕过证书的时候执行代码&#xff1a; frida -U -f de.robv.android.xposed.installer --codeshare akabe1/frida-multiple-unpinning --no-pause遇到这样的错误 Error: getPackageInfoNoCheck(): has more than one overload, use .overload() to choose from: 网上查…