fastadmin添加活动二维码图片,扫码可以直接跳转到该活动

一,在controll重写add方法

/*** 添加*/
public function add()
{if ($this->request->isPost()) {$params = $this->request->post("row/a");if ($params) {$params = $this->preExcludeFields($params);if ($this->dataLimit && $this->dataLimitFieldAutoFill) {$params[$this->dataLimitField] = $this->auth->id;}$result = false;Db::startTrans();try {//是否采用模型验证if ($this->modelValidate) {$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;$this->model->validateFailException(true)->validate($validate);}$result = $this->model->allowField(true)->save($params);Db::commit();  //添加方法 if($result){//通过save后获取自增的ID,传进获取二维码方法,生成跳转指定小程序页面的二维码,保存到数据表中$this->getEwm($this->model->getData('id'));}} catch (ValidateException $e) {Db::rollback();$this->error($e->getMessage());} catch (PDOException $e) {Db::rollback();$this->error($e->getMessage());} catch (Exception $e) {Db::rollback();$this->error($e->getMessage());}if ($result !== false) {$this->success();} else {$this->error(__('No rows were inserted'));}}$this->error(__('Parameter %s can not be empty', ''));}return $this->view->fetch();
}

2、自定义getEwm方法

   public function getEwm($id){$access_token = $this->getWxAccessToken();
//        p($access_token);die;//构建请求二维码参数//path是扫描二维码跳转的小程序路径,可以带参数?id=xxx//width是二维码宽度$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=".$access_token;$data = array();$data['scene'] =  'type=qrcode';$data['path'] = "pages/actDetails/actDetails?id=".$id;$data = json_encode($data);
//     $data = json_encode(array("path"=>"pages/index/index?aOpenid=".$openid,"width"=> 150));$jpg = $this->get_http_array($qcode,$data);$imgDir = 'uploads/zshd/';
//        $filename="ewm.jpg";///要生成的图片名字$filename = 'zshdact'.$id.'.jpg';$file = fopen("./".$imgDir.$filename,"w");//打开文件准备写入fwrite($file,$jpg);//写入fclose($file);//关闭$imgUrl = constant("URL").'/uploads/zshd/'.$filename;//更新二维码图片到活动表中ZshdActivityModel::where('id',$id)->update(['ewmImage'=>$imgUrl]);
//        return json($imgUrl);}public function get_http_array($url,$post_data) {$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //没有这个会自动输出,不用print_r();也会在后面多个1curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);return $output;}/*** 获取小程序access_token*/public function getWxAccessToken(){$appId = constant('appidZshd');$appSecret = constant('secretZshd');$access_token = Cache::get('wx_access_token:'.$appId);if($access_token){return $access_token;}else{//1.请求url地址$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;$res = $this->curl($url);if(isset($res['errcode']) && $res['errcode']!=0){return ('获取access_token出错');}$access_token = $res['access_token'];Cache::set('wx_access_token:'.$appId,$access_token,5400);return $access_token;}}public function curl($url,$data = null){
//        p($data);die;$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_TIMEOUT, 500);// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($curl, CURLOPT_URL, $url);if (!empty($data)){curl_setopt($curl, CURLOPT_POST, 1);
//            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}$res = curl_exec($curl);curl_close($curl);$json_obj = json_decode($res,true);
//        p($json_obj);die;return $json_obj;}

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

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

相关文章

Kotlin 协程1:深入理解withContext

Kotlin 协程1:深入理解withContext 引言 在现代编程中,异步编程已经变得非常重要。在 Kotlin 中,协程提供了一种优雅和高效的方式来处理异步编程和并发。在这篇文章中,我们将深入探讨 Kotlin 协程中的一个重要函数:wi…

实习记录——第十天

今天啥也不想说了,ctf里面还有道题目还没做,这里就不写了,把日报奉上,懂得都懂: 2.2日总结: 早上对xx银行的招聘网站做了渗透测试,对招聘网点赞处做重放看是否会多次点赞,对收藏处考…

关于sql关键字及敏感数据脱敏

数据脱敏相关 数据脱敏数字类型数据脱敏sql关键字脱敏 数据脱敏 数据脱敏是经常会遇到的需求,很常见。 尤其是一些客户数据,如身份证号、手机号码等。 脱敏规则也不尽相同,这里列举两种,作为参考吧。 数字类型数据脱敏 近期刚好…

【JAVA】守护线程是什么?

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 正文 我的其他博客 正文 在计算机编程中,守护线程(daemon thread)是一种在程序运行时在后台提供服务的线程…

2024021期传足14场胜负前瞻

2024021期赛事由亚洲杯2场、英超5场,德甲6场、非洲杯1场组成。售止时间为2月3日(周六)19点00分,敬请留意: 本期1.5以下赔率3场,1.5-2.0赔率3场,其他场次基本皆是平半盘、平盘。本期14场整体难度…

【详细教程】Kubernetes集群部署:使用kubeadm创建集群

文章目录 一、虚拟机准备(一)主机基本配置(二)安装docker(三)配置cri-docker环境(四)安装kubeadm、kubelet、kubectl(五)克隆主机 二、环境配置工作&#xff…

Python 3 中,使用 Memcached

在 Python 3 中,使用 Memcached,一个高性能的分布式内存对象缓存系统,可以通过多个第三方库来实现。这些库允许 Python 应用程序与 Memcached 服务器进行通信,从而缓存数据以加快应用程序的响应速度和提高效率。最常用的库之一是 …

CDN高防IP:技术解析与相关问题解答

在使用CDN高防IP技术的过程中,可能会遇到一些问题。下面是一些常见问题和相应的解答,希望能帮助读者更好地了解和使用CDN高防IP技术。 问题一:什么是CDN高防IP技术? 解答:CDN高防IP技术是一种通过将网站流量分散到多…

LeetCode:138. 随机链表的复制之如何有效copy

自己复制的话,很容易写出来一个时间复杂度O(n ^ 2) 空O(n)的做法 我们可以参考基因的复制, 目录 题目: 实现思路(基因复制式的copy): 官方快慢指针解法&…

R语言学习case6:ggplot基础画图(Scatter散点图)

step1: 导入ggplot2库文件 library(ggplot2)step2&#xff1a;带入自带的iris数据集 iris <- datasets::irisstep3&#xff1a;查看数据信息 dim(iris)维度为 [150,5] head(iris)查看数据前6行的信息 step4&#xff1a;利用ggplot工具包绘图 plot1 <- ggplot(iris…

解决WARNING: IPv4 forwarding is disabled. Networking will not work的具体操作步骤

IPv4转发禁用警告&#xff1a;网络无法正常工作 在使用网络连接的过程中&#xff0c;我们可能遇到警告消息“WARNING: IPv4 forwarding is disabled. Networking will not work”&#xff08;警告&#xff1a;IPv4转发已禁用&#xff0c;网络将无法正常工作&#xff09;。这个…

【sentinel流量卫兵搭建与微服务整合】

sentinel流量卫兵搭建与微服务整合 搭建sentinel dashboard控制台微服务整合 搭建sentinel dashboard控制台 1、下载 官网链接 由于官网github网络原因&#xff0c;导致长时间下载失败。 网盘链接 网盘提取码&#xff1a;dwgj 2、运行 将下载jar包放在任意非中文、不包含特殊…

Mac如何设置一位数密码?

一、问题 Mac如何设置一位数密码&#xff1f; 二、解答 1、打开终端 2、清除全局账户策略 sudo pwpolicy -clearaccountpolicies 输入开机密码&#xff0c;这里是看不见的&#xff0c;输入完回车即可 3、重新设置密码 &#xff08;1&#xff09;打开设置-->用户和群组…

Next.js初识

Next.js初识 Next.js&#xff1a;这是一个用于生产环境的React 框架&#xff08;国外用的比较多&#xff09;。 Next.js 为您提供生产环境所需的所有功能以及最佳的开发体验&#xff1a;包括静态及服务器端融合渲染、 支持 TypeScript、智能化打包、 路由预取等功能 无需任何配…

Android平台如何实现RTSP转GB28181

为什么要做GB28181设备接入侧&#xff1f; 实际上&#xff0c;在做Android平台GB28181设备接入模块的时候&#xff0c;我们已经有了非常好的技术积累&#xff0c;比如RTMP推送、轻量级RTSP服务、一对一互动模块、业内几乎最好的RTMP|RTSP低延迟播放器。 Android平台GB28181接…

爱、自由与创造——教育改革的三大基石

爱、自由与创造——教育改革的三大基石 Love, Freedom, and Creativity: The Three Pillars of Educational Reform 在当今社会快速发展的背景下&#xff0c;创造性思维的重要性日益凸显。然而&#xff0c;我们必须认识到&#xff0c;创造性并非凭空产生&#xff0c;而是深深植…

常见消息队列:ActiveMQ、RabbitMQ、RocketMQ、Kafka的区别总结

目录 前言 1、常见消息队列 1.ActiveMQ 2.RabbitMQ 3.RocketMQ 4.Kafka 2、区别 1.消息传递模型 2.消息持久化 3.消息顺序性 4.可靠性 5.生态系统和社区支持 6.表格对比 前言 消息队列可以实现应用程序之间的异步通信&#xff0c;能够实现异步消息的发送和接收&am…

MySQL | 一定会走索引却没有走的原因,日志报conversion相关错误

TL;DR&#xff1a;函数作用于表字段时&#xff0c;索引会失效。 具体情况 Indexes如下&#xff1a; SQL如下&#xff1a; explain select *from accounting_status_flow_tab_00000000WHERE ( client_no 6848134000 and loan_no 0119324345936016261000 )order by modif…

【python接口自动化】- PyMySQL数据连接

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

前端工程化基础(三):Webpack基础

Webpack和打包过程 学习webpack主要是为了了解目前前端开发的整体流程&#xff0c;实际开发中&#xff0c;我们并不需要去手动配置&#xff0c;因为框架的脚手架都已经帮助我们完成了配置 内置模块path 该模块在Webpack中会经常使用 从路径中获取信息 const path require(&qu…