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

2018-09-04 21:50:02 阅读 0评论 3

温馨提示:

最后更新时间2018-09-04 21:50:02,若内容或图片失效,请留言反馈!

第一步:获取小程序二维码
代码如下(采用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_token
            return 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代码如下:
 
 /**
     * 发送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;
    }
 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)
      }
    })
 
 
第三步:获取图片结果
 
 
php小程序二维码获取生成图片分享
 
 
转载:https://blog.csdn.net/qq_37375882/article/details/79419596
文章版权声明:除非注明,否则均为林羽凡原创文章,转载或复制请以超链接形式并注明出处。
林羽凡

林羽凡V

林羽凡博客,是一个记录自己生活、互联网技术的原创独立博客 Linyufan.Com

4259 文章
16545 评论
20844977 浏览

了解一下?

  • 了解一下?

优质服务器推荐

  • 软云_RuanCloud

活跃朋友

最新留言

    欢迎加入:heo-出家人:
    邹江 • 时间 9小时前
    WC,凡哥也整上软云了:heo-出家人:
    邹江 • 时间 9小时前
    我能坚持每天5公里,就不错了!
    八字123 • 时间 15小时前
    你是在保密局工作吗,家里嘴这么严,才让你知道。????
    jeffer.z的博客 • 时间 1天前
    欢迎加入!!!
    老张博客 • 时间 1天前
    @ 林羽凡还好,还好。问题不大,下雨什么的也没什么感觉
    obaby • 时间 2024年03月26日 20:27:24
    摔提挺严重呀。祝早日康复!:heo-感动:
    粽叶加米 • 时间 2024年03月26日 11:47:30
    这一看就好痛,本好奇宝宝曾经让汽修厂的升降机烟断过脚趾头。单腿蹦哒了三个月。:heo-泪奔:
    obaby • 时间 2024年03月26日 10:47:39
    @ 林羽凡开玩笑的,不会跑,我被cc,还是他给我解决的,当然备份还是必须的。数据安全第一,用谁的服务器都得备份。
    jeffer.z的博客 • 时间 2024年03月26日 09:12:10
    我也是软云????,一夜之间都在用,这要是jun跑路了,他就在博客圈火了,明天我也写一篇我和他的事情,很有意思。
    jeffer.z的博客 • 时间 2024年03月25日 23:30:05
    这得好好休息一段时间了
    dujun • 时间 2024年03月25日 21:29:29
    也是蛮厉害的人,完骑车才骑十多公里。
    惭愧呀,我得慢慢努力啦。
    争取早日摆脱菜腿称号。:heo-笑哭:
    Net • 时间 2024年03月25日 17:17:13

再了解一下?

  • 林羽凡待办
取消
支付宝二维码
支付宝二维码
微信二维码