• PHP 生成微信小程序码,并存储图片


    背景

    • 当前鄙人接手的项目,需要在设备机器上展示 小程序二维码
      为了记录扫码用户从哪台机器注册的
      那么,实现方案就是:在小程序码中,绑定设备编号参数
      在此,记录一番实现步骤 …

    小程序开发文档 - 【 获取不限制的小程序码 】

    实现步骤

    ①. 分析步骤

    1. 获取 Access Token
       注意:access_token 在获取时,要根据自己的业务需求,可以考虑存储到 redis、mysql (7200秒内)
    2. 根据小程序 APPID、APPSECRET - 获取不限制的小程序码
       主要请求参数:  page、scene、width
    3. 将获得的小程序码,进行位置存储,方便后期查看使用
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ②. 代码实例

        /**
         * @Notes:获取 access_token
         * @return bool|string
         * @User: zhanghj
         * @DateTime: 2023-10-16 16:21
         */
        public function getAccessToken(){
            $appid = 'XXXXXXXXXX'; //APPID
            $secret = 'XXXXXXXXXXXXXXXXXXXXXXX'; //APPSECRET
            $urlss = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $urlss);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($ch);
            curl_close($ch);
            return $output??'';
        }
    
        /**
         * @Notes:生成 小程序码
         * @param $mini_page_link
         * @param int $img_tag
         * @return string
         * @User: zhanghj
         * @DateTime: 2023-10-16 16:48
         */
        public function generateToMiniCode($mini_page_link,$img_tag = 0){
            $mini_code_img = dirname(\Yii::$app->basePath) . '/backend/web/upload/mini_code/' . $img_tag . '.png';
    
            $access_token = $this->getAccessToken();
            $tk = json_decode($access_token)->access_token;
    
            $urlss = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$tk;
            $ch = curl_init();
            $_pageData = [
                "page"=> $mini_page_link, //例如:pages/home/index
                "scene"=>"device_id={$img_tag}", //参数绑定
                "width" => 120 //宽度
            ];
            $datass = json_encode($_pageData);
            curl_setopt($ch, CURLOPT_URL, $urlss);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
            curl_setopt($ch, CURLOPT_POSTFIELDS, $datass);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, false);
            $output1 = curl_exec($ch);
            curl_close($ch);
            file_put_contents($mini_code_img, $output1, true);
            return $this->imgHost . '/mini_code/' . $img_tag . '.png';
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    ③. 实现结果

    • 所得小程序码,截图如下:

    • 提示:
      小程序端,开发人员通过对所配置页的初始化加载,
      提取参数 "scene",以方便后期的业务处理 …

      对于Linux 系统,使用 file_put_content() 有时会有操作权限的影响,可以使用 chmod 777 -R 进行权限赋值

    附录

    参考文章

    使用技巧

    • 转换成base64编码
    $imgUrl = 'data:image/jpg;base64,'.base64_encode($output1);
    
    • 1
    • 直接在页面显示为图片
    header("Content-type: image/jpg;charset=gb2312");
    echo $output1;
    
    • 1
    • 2
    • 保存为图片
    $url = "test.jpg";
    file_put_contents($url, $output1, true);
    
    • 1
    • 2
  • 相关阅读:
    Weblogic+Oracle11g设置开机自启动
    3.5 C++高级编程_类模板
    计算二叉树的最大宽度
    去中心化金融的无常损失
    java计算机毕业设计基于springboot 医院急诊挂号系统
    STM学习记录(四)———中断及NVIC
    vue3+ts+threejs 1.创建场景
    计算机组成原理学习笔记:进位计数制
    逻辑回归的原理
    mmdetection最新版食用教程(一):安装并运行demo及开始训练coco
  • 原文地址:https://blog.csdn.net/u011415782/article/details/133862426