php小程序二维码获取生成图片分享

第一步:获取小程序二维码

    代码如下(采用tp5框架):

namespace app\api\controller;
use think\Controller;
use think\Db;
use think\Config;
use app\api\controller\Common;class Code extends Common{/*** [getXcxCode 获取微信小程序二维码]* @return [type] [小程序二维码图片]*/public function getXcxCode(){//获取参数值$moduleid=$this->request->get('moduleid');$itemid=$this->request->get('itemid');$url="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$this->_getAccessToken();$data=['scene'=>'1001',           'width'=>430,'auto_color'=>false,];$data=json_encode($data);$result = $this->_requestPost($url,$data);if (!$result) {return false;} $fileName=$moduleid."-".$itemid;       if ($fileName) {//判断file文件中是否存在数据库当中$isfile=Db::name('xcxcode')->where('fileName=:fileName',['fileName'=>$fileName])->select();if(!$isfile){file_put_contents("static/xcxcode/".$fileName.".jpeg", $result);$datafile=['fileName'=>$fileName];Db::name('xcxcode')->insert($datafile);}return "static/xcxcode/".$fileName.".jpeg";       }}/*** 获取 access_tonken* @param string $token_file 用来存储token的临时文件*/private function _getAccessToken($token_file='./access_token') {// 考虑过期问题,将获取的access_token存储到某个文件中$life_time = 7200;if (file_exists($token_file) && time()-filemtime($token_file)<$life_time) {// 存在有效的access_tokenreturn file_get_contents($token_file);}// 目标URL:        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".Config::get('appid')."&secret=".Config::get('appsecret');//向该URL,发送GET请求$result = $this->_requestGet($url);if (!$result) {return false;}// 存在返回响应结果$result_obj = json_decode($result);// 写入file_put_contents($token_file, $result_obj->access_token);return $result_obj->access_token;}}

Common含有GET,POST请求函数,其代码如下:

 /*** 发送GET请求的方法* @param string $url URL* @param bool $ssl 是否为https协议* @return string 响应主体Content*/protected function _requestGet($url, $ssl=true) {// curl完成$curl = curl_init();//设置curl选项curl_setopt($curl, CURLOPT_URL, $url);//URL$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间//SSL相关if ($ssl) {curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。}curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果// 发出请求$response = curl_exec($curl);if (false === $response) {echo '<br>', curl_error($curl), '<br>';return false;}curl_close($curl);return $response;}/*** 发送GET请求的方法* @param string $url URL* @param bool $ssl 是否为https协议* @return string 响应主体Content*/protected function _requestPost($url, $data, $ssl=true) {//curl完成$curl = curl_init();//设置curl选项curl_setopt($curl, CURLOPT_URL, $url);//URL$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间//SSL相关if ($ssl) {curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。}// 处理post相关选项curl_setopt($curl, CURLOPT_POST, true);// 是否为POST请求curl_setopt($curl, CURLOPT_POSTFIELDS, $data);// 处理请求数据// 处理响应结果curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果// 发出请求$response = curl_exec($curl);if (false === $response) {echo '<br>', curl_error($curl), '<br>';return false;}curl_close($curl);return $response;}

第二步:前台小程序

    使用小程序画布js代码如下:

 onLoad: function (options) {var that = this;//1. 请求后端API生成小程序码//that.getQr();//2. canvas绘制文字和图片const ctx = wx.createCanvasContext('myCanvas');var imgPath = '../../../image/intro.jpg';var bgImgPath = '../../../image/bgImgPath.jpg';var basicprofile ='../../../image/basicprofile.png';var xcxcode ="http://localhost/mining120/public/static/xcxcode/29-5.jpeg";//填充背景ctx.setFillStyle('#cccccc');ctx.fillRect(0, 0, 240, 360);ctx.setFillStyle('#ffffff');ctx.fillRect(1, 1, 238, 358);//绘制产品图ctx.drawImage(imgPath, 2, 2, 236, 200);//绘制标题ctx.setFontSize(16);ctx.setFillStyle('#000000');ctx.fillText('圆通删掉贷方金额', 10, 225);//绘制介绍产品ctx.setFontSize(12);ctx.setFillStyle('#6F6F6F');ctx.fillText('宠友们快来围观萌宠靓照我在萌爪幼稚园', 10, 250);ctx.fillText('我在萌爪幼稚园', 10, 270);//绘制一条虚线ctx.strokeStyle = 'blue';ctx.beginPath();ctx.setLineWidth(1);ctx.setLineDash([2, 4]);ctx.moveTo(10, 287);ctx.lineTo(230, 287);ctx.stroke();//绘制矿业人图标ctx.drawImage(basicprofile, 10, 310, 30, 30);//绘制介绍ctx.setFontSize(11);ctx.setFillStyle('#aaaaaa');ctx.fillText('长按扫码查看详情', 47, 318);ctx.fillText('分享自矿业人小程序', 47, 338); ctx.drawImage(xcxcode, 165, 295, 60, 60);ctx.draw();},
    wxml代码如下:
<canvas style="margin:0 auto;margin-bottom:30px;width: 240px; height: 360px;box-shadow:1px 2px 2px #ccc;border-raidus:1px;" canvas-id="myCanvas"></canvas><view class='ft'>保存图片到手机相册,分享到朋友圈</view>
<view style="text-align:center;padding-bottom:20px"><button  bindtap='savetup' type="primary" size='mini'>保存到相册</button></view>
</view>

保存图片代码:

savetup:function(){var that = this;wx.canvasToTempFilePath({x: 0,y: 0,width: 240,height: 360,destWidth: 240,destHeight: 360,canvasId: 'myCanvas',success: function (res) {//调取小程序当中获取图片console.log(res.tempFilePath);wx.saveImageToPhotosAlbum({filePath: res.tempFilePath,success(res) {wx.showModal({title: '存图成功',content: '图片成功保存到相册了,去发圈噻~',showCancel: false,confirmText: '好哒',confirmColor: '#72B9C3',success: function (res) {if (res1.confirm) {console.log('用户点击确定');}}})}})        },fail: function (res) {console.log(res)}})

第三步:获取图片结果

如果有问题可以加我微信:jskwjg99999






   




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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序后台php实现数据get传递

1&#xff1a;利用phpstudy搭建本地服务器&#xff0c;端口设置为88 2&#xff1a;访问http://localhost:88/phpmyadmin/&#xff0c;在test数据库中新建一个表li&#xff0c;表中添加一个字段name&#xff0c;增加两行数据来进行测试 3&#xff1a;网站www根目录下新建一个wxa…

PHP 管理小程序审核发布

目录 前言一、申请小程序、开发平台账号二、使用步骤 1.获取token2.发布小程序总结 前言 随着微信文档功能越来越多 &#xff0c;大多数数据越来越容易便捷&#xff0c;本文就介绍小程序在后台的操作管理 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考…

php实现微信小程序消息通知

接入消息通知指引地址&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/callback_help.html 文档地址&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#%E6%A8%A1%E7%89%88%E6%B6%88%E6%81%AF%E7%AE%A1%E7%90%86 看完这两个地址…

crmeb 多商户小程序配置

一、小程序下载并提交审核 下载微信小程序代码 位置&#xff1a;平台后台>应用>小程序 1 首先需要填写这里的小程序信息 然后在这里就可以下载&#xff0c;如果未开启直播要选择&#xff0c;否则会无法使用 2、下载编译后的小程序代码 没有配置小程序的需要先配置小程序…

微信小程序中国标准时间注册错误

在运行微信小程序的时候出现下图错误&#xff1a; 解决办法&#xff0c;在控制台当中输入openVendor() 会打开文件。如下图&#xff1a;删除圈中的文件&#xff0c;重启工具即可&#xff1a;

微信公众号支付报错:当前页面的url未注册

问题描述 公众号支付报错&#xff1a;“当前页面的URL未注册” 原因分析 用户实际的支付目录必须和在微信支付商户平台设置的一致&#xff0c;否则会报错"当前页面的URL未注册" 支付授权目录: 商户最后请求拉起微信支付收银台的页面地址 解决方案&#xff1a; 登…

基于原生微信小程序的时间组件

作者的絮叨 在开发原生微信小程序的时候&#xff0c;发现很少有基于原生微信小程序开发的相关插件或组件&#xff0c;不知道是不是我的孤陋寡闻&#xff0c;还是真的很少&#xff0c;暂且不管~下面我介绍一下我当时开发的一个时间组件&#xff0c;比较简陋&#xff0c;希望可以…

java后端微信小程序登录与注册

java后端微信小程序登录与注册&微信登录授权 分析: 微信小程序用户表 的字段来源于微信服务器 , 必须想办法去获取到对应的用户信息 找到微信开放平台: 微信开放平台 以下是微信开放平台给出的登录流程图: 微信给出的字段值: {"nickName": "Band",&…

微信OAuth2.0授权登录

微信OAuth2.0授权登录 OAuth2.0简介OAuth2的应用微服务安全社交登录 网页微信登录前期准备授权流程 服务器端开发需求网页显示二维码返回微信登录参数添加配置添加配置类controller 前端显示登录二维码封装api请求 处理微信回调添加httpclient工具类添加回调接口获取access_tok…

springboot微信登陆

微信登录的优势 目前微信用户数量巨大&#xff0c;用户更希望通过更快更便捷的方式进行登录&#xff0c;而不是传统的账号密码登录。 springboot 接入微信登陆 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登…

微信小程序注册/登录接口开发

文章目录 后端有关说明前端有关说明接口设计小程序注册/登录接口APP 注册/登录接口PC Web 端的注册/登录接口 小程序注册/登录序列图校验 token 后端有关说明 登录和注册的逻辑要独立抽取写成2个接口&#xff1a;注册接口、登录接口 小程序、APP、PC端的登录接口和注册接口要分…

服务器 微信报警平台,Zabbix实现微信报警

zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 下文讲述了如何通过微信实现…

java微信二维码登录

1、注册 微信开放平台&#xff1a;https://open.weixin.qq.com 2、邮箱激活 3、完善开发者资料 4、开发者资质认证 准备营业执照&#xff0c;1-2个工作日审批、300元 5、创建网站应用 提交审核&#xff0c;7个工作日审批 6、内网穿透 ngrok的使用 2.2 授权流程 参考…

工作笔记——微信支付开发相关知识整理

在最近的工作中&#xff0c;引入了微信小程序支付&#xff0c;在开发过程中积累和整理了一些技术知识&#xff0c;现将其整理如下 目录 一、概念认识 &#xff08;一&#xff09;术语介绍 &#xff08;二&#xff09;名词解释 &#xff08;四&#xff09;对接微信支付接口规…

微信小程序——如何实现账号的注册、登录?

用到的数据库表&#xff1a; 用户表&#xff1a;chat-user&#xff0c;用于存放用户的基本信息&#xff0c;比如账号、密码、头像等等 用户的注册 1.先获取用户信息 使用wx.getUserProfile接口&#xff0c;获取用户的基本信息 功能描述获取用户信息。页面产生点击事件&…

java对接企业微信

java对接企业微信 一、注册企业微信 1.1 简介 企业微信与微信具有一样的体验&#xff0c;通过企业内部与外部客户的管理&#xff0c;构建出社群生态。企业微信提供丰富的api进行调用获取数据管理&#xff0c;也提供各种回调事件。 1.2 注册 登录官网&#xff0c;一键注册即可…

微信 JSAPI 支付流程

微信支付&#xff0c;开发文档地址&#xff1a; https://pay.weixin.qq.com/wiki/doc/api/index.html JSAPI支付文档地址&#xff1a; https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter9_2 微信支付分为5种&#xff1a; Jsapi支付&#xff0c;二维码支付&#xf…

android 仿微信demo————注册功能完善添加头像功能(移动端)

android 仿微信demo————微信启动界面实现 android 仿微信demo————注册功能实现&#xff08;移动端&#xff09; android 仿微信demo————注册功能实现&#xff08;服务端&#xff09; android 仿微信demo————登录功能实现&#xff08;移动端&#xff09; an…

微信支付APIv3

文章目录 微信支付之前我的密钥啥的都是放到配置文件里面以后可以再写一个文件基础支付APIv3介绍获取验签和HttpClientAPIv3证书与密钥使用说明 微信支付的SDK工具Native支付流程我们程序运行时的日志也可以使用log.debug在方法堆栈里面查看我们程序执行的方法调用顺序内网穿透…

在线支付系列【8】微信支付之注册商户号

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录 前言注册商户号1. 微信扫码登录2. 创建申请单2.1 基本信息2.2 主体身份2.3 法人信息及受益人信息2.4 经营与行业信息2.5 结算账户2.6 补充信息2.7 查看申请单 签约方式一&#xff1a;手机签约方…