php对接快手券码,扫码核销

快手本地生活-开放平台:https://open.kwailocallife.com/docs/dev
快手本地生活-商家中心:https://lbs.kuaishou.com/ll/merchant/login

实现功能:对接快手券码,实现在快手上购买券码,然后在自己开发的app上扫码核销,抵扣优惠券

<?php
namespace app\api\controller;use app\api\controller\Base;
use service\ApiReturn;
use think\Db;header('Content-Type: application/x-www-form-urlencoded');/*** 第三方接口【快手接口】* @package app\api\controller\v1*/
class Kwailocallife extends Base
{public $app_id = '' ;//开发者的appKeypublic $grant_type = 'code' ;//授权的类型 写死 "code"public $code = '' ;//临时授权票据public $app_secret = '' ;//开发者的appSecretpublic $access_token = '' ;public function __construct(){//获取快手配置$member_config = Db::name('member_config')->where('name','kwailocallife')->value('value');$member_config = json_decode($member_config,true) ;$this->app_id = $member_config['app_id'] ;$this->app_secret = $member_config['app_secret'] ;}/*** Notes:根据code获取access_token---api调用使用access_token* User: 任性不起来了* Date: 2024/5/14 15:20* @param $data* @param $user*/public function get_access_token($data,$user){$data = input() ;$code = $data['code'] ;error_log(date('Y-m-d H:i:s').' 授权'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/get_access_token.log');$url = 'https://lbs-open.kuaishou.com/oauth2/access_token';$param = ['app_id' => $this->app_id,'grant_type' => $this->grant_type,'code' => $code,'app_secret' => $this->app_secret,];$res = $this->http($url,$param,'GET');$res = json_decode($res,true);error_log(date('Y-m-d H:i:s').' 授权【$res】'.json_encode($res,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/get_access_token.log');if($res && $res['extra']['error_code'] == 0 ){//updateTime:2024-05-18 授权成功保存token信息$time = time();$expires_time = $time + $res['expires_in'] ;$refresh_expires_time = $time + $res['refresh_token_expires_in'] ;$update = ['access_token' => $res['access_token'] ,'open_id' => $res['open_id'] ,'expires_in' => $res['expires_in'] ,'token_type' => $res['token_type'] ,'refresh_token' => $res['refresh_token'] ,'refresh_token_expires_in' => $res['refresh_token_expires_in'] ,'expires_time' => $expires_time ,'refresh_expires_time' => $refresh_expires_time ,'update_time' => $time ,] ;Db::name('kuaishou_token')->where('aid',1)->update($update) ;return ApiReturn::r(1, ['access_token'=>$res['access_token']], '获取access_token成功');}else{return ApiReturn::r(0, [], '获取access_token失败');}}/*** Notes:获取保存的快手token* User: 任性不起来了* Date: 2024/5/18 10:23* @param $data* @param $user*/public function get_kuaishou_token($data,$user){//获取快手授权token$token = Db::name('kuaishou_token')->where('aid',1)->field('aid,access_token,refresh_token,open_id,expires_time,refresh_expires_time,update_time,poi_id')->find();//todo 授权到期前---再重新获取新的tokenreturn ApiReturn::r(1, $token, 'token');}/*** Notes:新版-门店信息查询接口* User: 任性不起来了* Date: 2024/5/16 9:40*/public function shop_query(){$data = input() ;error_log(date('Y-m-d H:i:s').' $data'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/shop_query.log');$url = 'https://lbs-open.kuaishou.com/goodlife/v1/shop/poi/query';$param = ['size' => 15,'page' => 1,
//            'third_id' => '11',//三方ID'account_id' => '210000510000******',//本地生活账户ID【需替换为自己的账号ID】
//            'poi_id' => '1',//快手门店POI_ID];$header = ['Content-Type: application/json','access-token: '.$data['access_token'],];$res = $this->http($url,$param,'GET',$header);$res = json_decode($res,true);error_log(date('Y-m-d H:i:s').' 授权【$res】'.json_encode($res,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/shop_query.log');if($res && $res['extra']['error_code'] == 0 ){$pois = $res['data'] ;return ApiReturn::r(1, $pois, '门店信息');}else{return ApiReturn::r(0, [], $res['extra']['sub_description'] );}}/*** Notes:验券准备* User: 任性不起来了* Date: 2024/5/16 14:43*/public function certificate_prepare(){$data = input() ;error_log(date('Y-m-d H:i:s').' $data'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_prepare.log');$url = 'https://lbs-open.kuaishou.com/goodlife/v1/fulfilment/certificate/prepare';
//        $encrypted_data = $data['encrypted_data'] ? urlencode($data['encrypted_data']) : '' ;$encrypted_data = $data['encrypted_data'] ? $data['encrypted_data'] : '' ;$param = ['encrypted_data' => $encrypted_data ,//从二维码解析出来的标识(传参前需要先进行URL编码) (encrypted_data/code必须二选一)
//            'code' => $data['code'],//原始的快手团购券码 (encrypted_data/code必须二选一)];error_log(date('Y-m-d H:i:s').' encrypted_data==='.$encrypted_data.' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_prepare.log');$header = ['Content-Type: application/json','access-token: '.$data['access_token'],];$res = $this->http($url,$param,'GET',$header);$res = json_decode($res,true);error_log(date('Y-m-d H:i:s').' 【$res】'.json_encode($res,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_prepare.log');if($res && $res['extra']['error_code'] == 0 ){return ApiReturn::r(1, $res['data'], '验券准备');}else{return ApiReturn::r(0, [], $res['extra']['sub_description'] );}}/*** Notes:验券核销接口* User: 任性不起来了* Date: 2024/5/16 14:43*/public function certificate_verify(){$data = input() ;error_log(date('Y-m-d H:i:s').' $data'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_verify.log');//校验快手券是否已使用$is_find = Db::name('order')->where('ks_order_id',$data['order_id'])->find();if($is_find){return ApiReturn::r(0, [], '该券码已使用,请勿重复核销' );}$url = 'https://lbs-open.kuaishou.com/goodlife/v1/fulfilment/certificate/verify';$param = ['verify_token' => $data['verify_token'],//一次验券的标识 (用于短时间内的幂等); 平台券的verify_token由验券准备接口返回; 三方券的verify_token由开发者自生成,多次验券verify_token的值要有变化'poi_id' => $data['poi_id'],//核销的快手门店id'order_id' => $data['order_id'],//快手订单号'encrypted_codes' => [$data['encrypted_code']],//验券准备接口返回的加密快手券码
//            'codes' => [$data['codes']],//快手核销券码];$param = json_encode($param);error_log(date('Y-m-d H:i:s').' 【$param】'.json_encode($param,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_verify.log');$header = ['Content-Type: application/json','access-token: '.$data['access_token'],];//调用curl请求,原来的post请求不好使---改为调用滴滴的post请求$res = $this->postCurl($url,$param,'POST',$header);error_log(date('Y-m-d H:i:s').' 【$res】'.json_encode($res,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_verify.log');if($res && $res['extra']['error_code'] == 0 ){//获取订单数据$order = $this->order_detail($data);error_log(date('Y-m-d H:i:s').' 【$order】'.json_encode($order,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_verify.log');$ks_coupon_money = $order['item_info']['market_price'] ;//金额单位为分$ks_coupon_money = bcdiv($ks_coupon_money,100,2) ;//修改订单数据$update = ['ks_order_id' => $data['order_id'] ,'ks_coupon_money' => $ks_coupon_money ,'update_time' => time() ,] ;Db::name('order')->where('order_sn',$data['order_sn'])->update($update);return ApiReturn::r(1, $res['data'], '核销成功');}else{return ApiReturn::r(0, [], $res['extra']['sub_description'] );}}/*** Notes:撤销核销* User: 任性不起来了* Date: 2024/5/16 14:43*/public function certificate_cancel(){$data = input() ;error_log(date('Y-m-d H:i:s').' $data'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_cancel.log');//校验快手券是否已使用$is_find = Db::name('order')->where('ks_order_id',$data['order_id'])->find();if($is_find){return ApiReturn::r(0, [], '该券码已使用,请勿重复核销' );}$url = 'https://lbs-open.kuaishou.com/goodlife/v1/fulfilment/certificate/cancel';$param = ['verify_id' => $data['verify_id'],//代表券码一次核销的唯一标识(验券时返回)'certificate_id' => $data['certificate_id'],//代表一张券码的标识(验券时返回)
//            'order_id' => $data['order_id'],//订单号 用code_with_biz_cancel_info撤销核销时,必传];$param = json_encode($param);error_log(date('Y-m-d H:i:s').' 【$param】'.json_encode($param,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_cancel.log');$header = ['Content-Type: application/json','access-token: '.$data['access_token'],];//调用curl请求,原来的post请求不好使---改为调用滴滴的post请求$res = $this->postCurl($url,$param,'POST',$header);error_log(date('Y-m-d H:i:s').' 【$res】'.json_encode($res,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_cancel.log');if($res && $res['extra']['error_code'] == 0 ){//获取订单数据$order = $this->order_detail($data);error_log(date('Y-m-d H:i:s').' 【$order】'.json_encode($order,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/certificate_cancel.log');//修改订单数据$update = ['ks_order_id' => 0 ,'ks_coupon_money' => 0 ,'update_time' => time() ,] ;Db::name('order')->where('order_sn',$data['order_sn'])->update($update);return ApiReturn::r(1, $res['data'], '撤销成功');}else{return ApiReturn::r(0, [], $res['extra']['sub_description'] );}}/*** Notes:前端使用扫码插件,通过短链获取长链* User: 任性不起来了* Date: 2024/5/21 14:06*/public function get_result(){$data = input() ;$url = $data['result'];//https://ksurl.cn/z5H2hjQ0$response = $this->restoreUrl($url);error_log(date('Y-m-d H:i:s').' 【$url】'.$url.' '.PHP_EOL,3,'../runtime/Kwailocallife/get_result.log');error_log(date('Y-m-d H:i:s').' 【$response===】'.json_encode($response,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/get_result.log');$res = explode('object_id=',$response);if($res){return ApiReturn::r(1, ['object_id'=>$res[1]], '长链');}else{return ApiReturn::r(0, [], 'url解析失败' );}}/*** 短链还原成长链* @param $shortUrl* @return mixed|string*/public function restoreUrl($shortUrl){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $shortUrl);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko / 20100101 Firefox / 70.0');curl_setopt($curl, CURLOPT_HEADER, true);curl_setopt($curl, CURLOPT_NOBODY, false);curl_setopt($curl, CURLOPT_TIMEOUT, 15);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);curl_setopt($curl, CURLOPT_ENCODING, 'gzip');$data = curl_exec($curl);$curlInfo = curl_getinfo($curl);curl_close($curl);if ($curlInfo['http_code'] == 301 || $curlInfo['http_code'] == 302) {return $curlInfo['redirect_url'];}return '';}/*** Notes:查询快手订单详情* User: 任性不起来了* Date: 2024/5/18 11:25* @param $data* @param $user*/public function order_detail($data,$user){error_log(date('Y-m-d H:i:s').' $data'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/order_detail.log');$url = 'https://lbs-open.kuaishou.com/goodlife/v2/trade/order/detail';$param = ['order_id' => $data['order_id'],//快手订单号];error_log(date('Y-m-d H:i:s').' 【$param】'.json_encode($param,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/order_detail.log');$header = ['Content-Type: application/json','access-token: '.$data['access_token'],];$res = $this->http($url,$param,'GET',$header);$res = json_decode($res,true);error_log(date('Y-m-d H:i:s').' 【$res】'.json_encode($res,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/order_detail.log');if($res && $res['extra']['error_code'] == 0 ){return  $res['data'] ;return ApiReturn::r(1, $res['data'], '订单详情');}else{return ApiReturn::r(0, [], $res['extra']['sub_description'] );}}/*** Notes: curl——》 get请求* User: 任性不起来了* Date: 2024/5/18 14:48* @param $url* @param $params*/public function http($url, $params, $method = 'GET', $header = array(), $multi = false){error_log(date('Y-m-d H:i:s').' 【$params】'.json_encode($params,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/http.log');if(empty($header)){$header = ['Accept: application/json','User-Agent: */*','Content-Type: application/json; charset=utf-8',];}$opts = array(CURLOPT_TIMEOUT => 30,CURLOPT_RETURNTRANSFER => 1,CURLOPT_SSL_VERIFYPEER => false,CURLOPT_SSL_VERIFYHOST => false,CURLOPT_HTTPHEADER => $header);/* 根据请求类型设置特定参数 */switch (strtoupper($method)) {case 'GET':$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);break;case 'POST'://判断是否传输文件$params = $multi ? $params : http_build_query($params);$opts[CURLOPT_URL] = $url;$opts[CURLOPT_POST] = 1;$opts[CURLOPT_POSTFIELDS] = $params;break;default:throw new Exception('不支持的请求方式!');}error_log(date('Y-m-d H:i:s').' 【$opts】'.json_encode($opts,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/http.log');/* 初始化并执行curl请求 */$ch = curl_init();curl_setopt_array($ch, $opts);$data = curl_exec($ch);$error = curl_error($ch);curl_close($ch);if ($error) throw new Exception('请求发生错误:' . $error);error_log(date('Y-m-d H:i:s').' 【$data】'.json_encode($data,320).' '.PHP_EOL,3,'../runtime/Kwailocallife/http.log');return $data;}/***$this->postCurl方法*/public function postCurl($url, $body,$type='POST',$header=[]){$headers = array("Content-type:application/x-www-form-urlencoded;charset=UTF-8");curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);//1.创建一个curl资源$ch = curl_init();//2.设置URL和相应的选项curl_setopt($ch, CURLOPT_URL, $url);//设置url//设置为false,只会获得响应的正文(true的话会连响应头一并获取到)curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 设置超时限制防止死循环//设置发起连接前的等待时间,如果设置为0,则无限等待。curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//2)设备请求体if (@count($body) > 0) {// $b=json_encode($body,true);curl_setopt($ch, CURLOPT_POSTFIELDS, $body);//全部数据使用HTTP协议中的"POST"操作来发送。}//设置请求头if (count($header) > 0) {curl_setopt($ch, CURLOPT_HTTPHEADER, $header);}//上传文件相关设置curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_MAXREDIRS, 3);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 对认证证书来源的检查curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算//3)设置提交方式switch ($type) {case "GET":curl_setopt($ch, CURLOPT_HTTPGET, true);break;case "POST":curl_setopt($ch, CURLOPT_POST, true);break;case "PUT"://使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请                                                      求。这对于执行"DELETE" 或者其他更隐蔽的HTTcurl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");break;case "DELETE":curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");break;}//4)在HTTP请求中包含一个"User-Agent: "头的字符串。-----必设curl_setopt($ch, CURLOPT_USERAGENT, 'SSTS Browser / 1.0');curl_setopt($ch, CURLOPT_ENCODING, 'gzip');curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla / 4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident / 4.0)'); // 模拟用户使用的浏览器//5)//3.抓取URL并把它传递给浏览器$res = curl_exec($ch);$result = json_decode($res, true);//4.关闭curl资源,并且释放系统资源curl_close($ch);if (empty($result))return $res;elsereturn $result;}}

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

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

相关文章

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

磁盘扩容,新增磁盘

磁盘扩容 1.点击设置-硬盘-添加-按推荐添加磁盘 2.查看磁盘使用情况&#xff0c;未扩容之前&#xff0c;查看分区使用情况 [rootnode1 ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 1.4G 0 1.4G …

干系人参与度矩阵

干系人参与度矩阵 干系人的定义干系人参与水平分类应用与策略总结 干系人参与度矩阵是用于评估项目干系人当前参与水平与期望参与水平之间差异的工具。以下是对干系人参与度矩阵的详细解释&#xff1a; 干系人的定义 在项目管理中&#xff0c;干系人指的是那些积极参与项目&am…

python中pip换源

目录 1. 背景2. Python 的 pip 换源2.1 临时换源&#xff08;命令行中使用参数&#xff09;2.2 永久换源&#xff08;修改配置文件&#xff09;2.2.1 Windows系统2.2.2 Linux/macOS系统 2.3 使用 pip-config 命令换源&#xff08;Linux/macOS 特定&#xff09; 3. 常用的 PyPI …

探索WebKit的革新之旅:HTML5新特性的卓越处理

标题&#xff1a;探索WebKit的革新之旅&#xff1a;HTML5新特性的卓越处理 摘要 WebKit作为许多流行浏览器的渲染引擎&#xff0c;包括Safari、Chrome和Epiphany&#xff0c;它在处理HTML5新特性方面扮演了重要角色。HTML5引入了一系列新特性&#xff0c;旨在改善网络应用的性…

Java IO: 使用 `FileInputStream` 和 `FileOutputStream` 进行文件操作

在 Java 中&#xff0c;文件 I/O 操作是常见的任务。FileInputStream 和 FileOutputStream 是用于读取和写入文件的基础类&#xff0c;适用于处理二进制数据。本文将介绍如何使用 FileInputStream 和 FileOutputStream&#xff0c;并提供具体的示例代码。 FileInputStream 类概…

深入分析 Android BroadcastReceiver (七)

文章目录 深入分析 Android BroadcastReceiver (七)1. 高级应用场景1.1 示例&#xff1a;动态权限请求1.2 示例&#xff1a;应用内通知更新 2. 安全性与性能优化2.1 示例&#xff1a;设置权限防止广播攻击2.2 示例&#xff1a;使用 LocalBroadcastManager2.3 示例&#xff1a;在…

三分钟给AI Agent应用对话增加人类情感!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

[算法]——堆排序(C语言实现)

简单的介绍一下用堆排序的算法对整形数据的数据进行排序。 一、堆的概念 堆是具有下列性质的完全二叉树&#xff1a;每个结点的值都大于或等于其左右孩子节点的值&#xff0c;称为大顶堆&#xff1b;或者每个结点的值都小于或等于其左右孩子结点的值&#xff0c;称为小顶堆。 …

GenAI 用于客户支持 — 第 1 部分:构建我们的概念验证

作者&#xff1a;来自 Elastic Chris Blaisure 欢迎来到 Inside Elastic 博客系列&#xff0c;我们将展示 Elastic 的内部运营如何解决实际业务挑战。本系列将揭示我们将生成式 AI&#xff08;gererative AI - GenAI&#xff09;集成到客户成功和支持运营中的历程&#xff0c;让…

ctfshow web入门 sqli-labs web517--web524

web517 注入点id ?id-1’union select 1,2,3– 确认是否能够注入 ?id-1union select 1,database(),3-- 爆出库名 security爆出表名 ?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3-- emails,refer…

使用辅助编程的一些思考

1 引子 最近使用辅助编程比较频繁&#xff0c;也在思考&#xff1a; 它的出现对程序员来说是利大于弊还是弊大于利。对非程序员来说&#xff0c;有了辅助编程是否就能达到程序员的水平&#xff1f;目前&#xff0c;辅助编程还不能解决哪些问题呢&#xff1f; 1.1 使用场景 …

CSS中 transform: scale , transform-origin 属性

scale() 函数 scale() 函数接受一个或两个参数&#xff0c;分别表示在 X 轴和 Y 轴上的缩放比例。如果只提供一个参数&#xff0c;那么 X 轴和 Y 轴都将按相同的比例缩放。 scale(sx, sy) sx 是 X 轴的缩放因子。sy 是 Y 轴的缩放因子。如果省略&#xff0c;则默认为 sx 的值…

分享一些面试经验

计算机类面试准备指南 目录 简介简历准备 个人信息教育背景工作经历项目经验技能清单证书与奖励 技术知识复习 编程语言数据结构与算法计算机基础知识系统设计 面试题型 行为面试技术面试在线编程测试系统设计面试 面试技巧 自我介绍回答技巧沟通技巧常见问题应对 模拟面试 单…

几个常见的FPGA问题之序列发生器、编码器、D触发器

几个常见的FPGA问题之序列发生器、编码器、D触发器 语言 :Verilg HDL 、VHDL EDA工具: Vivado 几个常见的FPGA问题之序列发生器、编码器、D触发器一、引言二、背景1、序列发生器(Sequence Generator)2、编码器(Encoder)3、D触发器(D Flip-Flop)二、问题及解决方案1. 序…

二进制方式部署consul单机版

1.consul的下载 mkdir -p /root/consul/data && cd /root/consul wget https://releases.hashicorp.com/consul/1.18.0/consul_1.18.0_linux_amd64.zip unzip consul_1.18.0_linux_amd64.zip mv consul /usr/local/bin/ 2.配置文件 // 配置文件路径&#xff1a; /roo…

将深度相机的实时三维坐标数据保存为excel文档

一、如何将数据保存为excel文档 1.excel文件库与相关使用 &#xff08;1&#xff09;导入相应的excel文件库&#xff0c;导入前先要进行pip安装&#xff0c;pip install xlwt import xlwt # 导入用于创建和写入Excel文件的库 (2) 建立一个excel文档&#xff0c;并在第0行写…

公司面试题总结(八)

43.Vue 组件之间的通信方式都有哪些 ⚫ 通过 props 传递&#xff1a;父组件传递数据给子组件 ◼ 子组件设置 props 属性&#xff0c;定义接收父组件传递过来的参数 ◼ 父组件在使用子组件标签中通过字面量来传递值 ⚫ 通过$emit 触发自定义事件&#xff1a;子组件传递数…

使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(1)

创建一个Java程序,建立与本机mysql服务器上student数据库的连接,实现在tb_student学生表上插入一条学生信息:学号21540118,姓名王五,性别男,出生日期2003-12-10,所在学院5。 使用JDBC连接数据库后实现数据库插入操作代码如下: import java.sql.Connection; import ja…

web安全渗透测试十大常规项(一):web渗透测试之Fastjson反序列化

渗透测试之Java反序列化 1. Fastjson反序列化1.1 FastJson反序列化链知识点1.2 FastJson反序列化链分析1.3.1 FastJson 1.2.24 利用链分析1.3.2 FastJson 1.2.25-1.2.47 CC链分析1.3.2.1、开启autoTypeSupport:1.2.25-1.2.411.3.2.2 fastjson-1.2.42 版本绕过1.3.2.3 fastjson…