PHP获取小程序码并返回前端显示图片

小程序的二维码分为小程序码和二维码;
生成小程序二维码文档中说后端来生成。
参考 小程序开发文档资料:https://developers.weixin.qq.com/miniprogram/dev/api/getWXACodeUnlimit.html
文档的参数介绍还是蛮详细的,但是没有具体的demo,对于请求的接口的返回值是进制流(也就是在浏览器显示一堆乱码)也是很令人懊恼,这里贴一下我的代码:

    //获取小程序码,这里调用的是小程序码的A接口类型
      public function getQRCodeAction()
    {
        $data['scene'] = $this->_req->getQuery('shareId',11);  //scence、page的使用要参考文档
        $data['width'] = $this->_req->getQuery('width',220);
        $data['auto_color'] = $this->_req->getQuery('auto_color');
        $data['line_color'] = $this->_req->getQuery('line_color');
        $data['is_hyaline'] = $this->_req->getQuery('is_hyaline',true);
        $data['page'] = $this->_req->getQuery('page',"");   //由这行以上代码是二维码的样式等由前端传值的形式,也可以直接在后端设置
        $wxModel = new WxAuthModel();
        $token = $wxModel->getAccessToken();
        $res_url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=$token";  //请求微信提供的接口
        header('content-type:image/png');
        $data = json_encode($data);
        $Qr_code = $wxModel->http_request($res_url,$data); //到这里就已经返回微信提供的返回数据了,这个时候的数据是二进制流,要处理下再返回给前端
        file_put_contents('/tmp/qr_code.png', $Qr_code);  //将获得的数据读到一个临时文件里
        $img_string = $this->fileToBase64('/tmp/qr_code.png');  //将图片文件转化为base64
        response::result($img_string);
    }

    //本地文件转base64
    private function fileToBase64($file){
        $base64_file = '';
        if(file_exists($file)){
            $mime_type= mime_content_type($file);
            $base64_data = base64_encode(file_get_contents($file));
            $base64_file = 'data:'.$mime_type.';base64,'.$base64_data;
        }
        return $base64_file;
    }

 /*获取access_token,不需要code参数,不能用于获取用户信息的token*/
    public function getAccessToken()
    {
        $token_file = '/dev/shm/heka2_token.json';  //由于获取token的次数存在限制,所以将一段时间内的token缓存到一个文件(注意缓存路径服务器支持可写可读),过期后再重新获取
        $data = json_decode(file_get_contents($token_file));
        if ($data->expire_time < time()) {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
            $res = json_decode($this->http_request($url));
            $access_token = $res->access_token;
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                file_put_contents($token_file, json_encode($data));
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }

感觉一个完整的PHP实现的代码目前我还没找到,这个也还蛮常用的。如有不恰当的地方,欢迎指出~ ^_^

原文地址:https://www.cnblogs.com/xinxinmifan/p/wxCode.html

时间: 2024-10-07 21:47:19

PHP获取小程序码并返回前端显示图片的相关文章

小程序结合云开发获取小程序码

最近开发小程序遇到一个生成小程序码的功能,常规操作是通过以下接口请求: POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN 但是今天突然不想走寻常路,决定用一用云开发玩一玩. 话不多说,码它! wxml: <button bindstap="creatCode">点击获取</button> 云函数,我定义了一个getcode函数,首先往函数下的config.json文件配

小程序生成小程序码

getUnlimited 获取小程序码,适用于需要的码数量极多的业务场景.通过该接口生成的小程序码,永久有效,数量暂无限制. 小程序官方文档 wxacode.getUnlimited /// <summary> /// 获取小店小程序码 /// </summary> /// <returns>返回的图片 Buffer</returns> public object GetWxacode(string pagePath, int width, string I

c#后台生成指定页面带参数的小程序码

出于安全考虑,小程序禁用了直接在小程序端调用api.weixin.qq.com的功能,只能通过后台来调用,以下是实现的过程. 这是官方的文档https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html: 1.首先获取accesstoken public string GetAccessToken(string strAPPID, string strS

php实现小程序码自定义中间icon

小程序码生成的时候是默认使用小程序后台设置的小程序icon图片的,但是在有些场景我们可能要替换成我们自己想要的icon. 下面先放代码: public function makeNewQrCodeAction() { //获取用户头像并转string $avatarUrl = $this->_req->getQuery('avatarUrl', ""); if (!$avatarUrl) { response::err_lack_param(); } $avatar_fil

借助云开发10行代码生成小程序码,可以微信扫码快速进入指定小程序页

最近老有同学问我,如何生成小程序二维码,让用户扫码后能快速进入指定页面.经过一番研究,发现用云开发的云调用来实现特别方便,基本上10行代码就可以快速的生成指定页面的二维码.这样我们在做一些线下业务时就能让用户方便快速的进入到指定页面了,比如我们的点餐小程序,我们可以在二维码里绑定桌号,这样用户用微信扫码二维码,就可以快速的进入点餐页面了,并且可以识别到用户当前所在的桌号. 注意事项 我们生成的小程序码指定的页面,必须是你小程序已经发布,如果小程序还没有发布,获取小程序码绑定的页面不存在,扫码后就

nodejs获取带参数的小程序码

打开项目目录 ,新建一个app.js文件 使用cnpm init命令初始化项目文件 安装express和superagent 并将安装信息保存到package文件中 安装完了 写一个接口看看有木有问题 OK 接口是可以的 接下来就要干正事了. 在app.js文件同级路径建一个config.js文件 用于保存小程序的appid和secret ,使用module.exports导出 在app.js里引用 同时使用superagent发起请求 把参数放到请求的网址里 在浏览器里调用一下 看看打印的内容

反编译获取小程序源码,怎么找回微信小程序源码?

看了很多反编译.找回微信小程序源码很多教程,各种问题导致都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 下面内容(8月6日版本)仅作学习使用. 微信小程序反编译截图1 微信小程序反编译截图2 ------ 常见的微信小程序反编译失败问题 ----- 1 获取不到Wxss     2 遇见分包,无法反编译.   3 apkg反编译报错. ( 目前都已解决) 一 准备工具 1 node.js  运行环

关于.NET HttpClient方式获取微信小程序码(二维码)

随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来.近来分析了一项生成有关生成微信小程序码的需求——要求扫码跳转到小程序指定页面(带参数):看了下小程序官方文档,以及网上的例子,未看到多少有价值的采用C#调用小程序接口生成小程序码的例子,于是拾起多年前的代码,略作分析尝试,在此分享给有需要的人,并以此抛砖引玉. 此文以HttpClient方式示例,当然采用老旧的HttpWebRequest也可以,在此不作分析.生成微信小程序码(二维码)的接口主要有三个: https://develo

生成微信小程序码java实现

@Override public ModelAndView onSubmit(HttpServletRequest req, HttpServletResponse res, WxQrCodeForm cmd, BindException err) throws Exception { SimpleResult<Object> result = SimpleResult.create(false); Locale locale = new Locale("en", &quo