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

背景

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

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

实现步骤

①. 分析步骤

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

②. 代码实例

    /**
     * @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 进行权限赋值

附录

参考文章

使用技巧

  • 转换成base64编码
$imgUrl = 'data:image/jpg;base64,'.base64_encode($output1);
  • 直接在页面显示为图片
header("Content-type: image/jpg;charset=gb2312");
echo $output1;
  • 保存为图片
$url = "test.jpg";
file_put_contents($url, $output1, true);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值