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

2023-10-22 09:09:52 浏览数 (2)

背景

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

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

实现步骤

①. 分析步骤

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

②. 代码实例

代码语言:javascript复制
    /**
     * @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';
    }

③. 实现结果

  • 所得小程序码,截图如下:
  • 提示: 小程序端,开发人员通过对所配置页的初始化加载, 提取参数 "scene",以方便后期的业务处理 … 对于Linux 系统,使用 file_put_content() 有时会有操作权限的影响,可以使用 chmod 777 -R 进行权限赋值

附录

参考文章

  • PHP生成带参数的小程序码
  • PHP生成带参数的微信小程序的二维码

使用技巧

  • 转换成base64编码
代码语言:javascript复制
$imgUrl = 'data:image/jpg;base64,'.base64_encode($output1);
  • 直接在页面显示为图片
代码语言:javascript复制
header("Content-type: image/jpg;charset=gb2312");
echo $output1;
  • 保存为图片
代码语言:javascript复制
$url = "test.jpg";
file_put_contents($url, $output1, true);

0 人点赞