精华内容
下载资源
问答
  • 话不多说,直接上代码: //这里单独拿出来了 就是通过appId和appSecret来获取accessToken public String getAccessToken() { Constant constant = ... // 小程序的 app secret (在微信小程序管理后台获取)

    话不多说,直接上代码:

    //这里单独拿出来了 就是通过appId和appSecret来获取accessToken
     public String getAccessToken() {
            Constant constant = constantService.selectConstantById(1);
            String appId = constant.getConstant2();
            // 小程序的 app secret (在微信小程序管理后台获取)
            String secret = constant.getConstant3();
            String grant_type = "client_credential";
            //封装请求数据
            String params = "grant_type=" + grant_type + "&secret=" + secret + "&appid=" + appId;
            //发送GET请求
            String sendGet = HttpClientUtils.doGet("https://api.weixin.qq.com/cgi-bin/token?" + params);
            JSONObject jsonObject = JSONObject.parseObject(sendGet);
            String accessToken = (String) jsonObject.get("access_token");
            return accessToken;
        }
    
        /**
         * 生成带参数的小程序二维码
         * 并且存到用户信息中
         * 如果已存在则直接返回
         *
         * @return
         */
        @GetMapping("/getCodeUrl")
        public Object getCodeUrl(Integer userId) {
            try {
                User user = userService.selectUserById(userId);
                if (user == null) {
                    return AjaxResult.error("需要生成二维码的用户不存在");
                }
                if (!StringUtils.isEmpty(user.getCodeUrl())) {
                    return AjaxResult.success(user.getCodeUrl());
                }
                String accessToken = getAccessToken();
                URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");// 提交模式
                // 发送POST请求必须设置如下两行
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
                // 发送请求参数
                JSONObject paramJson = new JSONObject();
                //二维码携带的参数
                paramJson.put("scene", userId);
    //            paramJson.put("page", "pages/home/home?userId=" + userId);
    			//二维码跳转的路径
                paramJson.put("page", "pages/index/index");
                //二维码的尺寸
                paramJson.put("width", 430);
                paramJson.put("auto_color", true);
                printWriter.write(paramJson.toString());
                // flush输出流的缓冲
                printWriter.flush();
                //开始获取数据
                BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
    
    			//给文件重新命名
                String newFileName = System.currentTimeMillis() + ".png";
                //本地存放文件的路径
                String nativePath = Global.getWebUploadPath() + File.separator
                        + "thumbnail" + File.separator + "codeImg";
                File nativeDir = new File(nativePath);
                if (!nativeDir.exists()) {
                    nativeDir.mkdirs();
                }
                //网络访问路径
                String webPath = Global.getWebURl() + "/thumbnail/" + "codeImg" + "/" + newFileName;
                //保存到用户信息中
                user.setCodeUrl(webPath);
                userService.updateUser(user);
                OutputStream os = new FileOutputStream(new File(nativePath + File.separator + newFileName));
                int len;
                byte[] arr = new byte[1024];
                while ((len = bis.read(arr)) != -1) {
                    os.write(arr, 0, len);
                    os.flush();
                }
                os.close();
                return AjaxResult.success(webPath);
            } catch (Exception e) {
                log.error("生成微信小程序二维码出现错误:" + e.getMessage());
                return AjaxResult.error("生成微信小程序二维码出现错误" + e.getMessage());
            }
        }
    
    大致讲一下流程,就是首先通过小程序的appId和appSecret来获取accessToken,然后通过这个accessToken就可以去生成小程序的二维码了。上面的例子生成的是带有参数的二维码,参数主要通过 paramJson.put("scene", userId)来实现,这里存放的是用户的id,因为每个用户id生成的二维码是相同的,所以生成以后我们存到用户信息里,下次使用就不需要再次生成,直接返回用户表里的二维码地址就可以。这里说一下碰到的两个小坑:
    1、请求成功,生成了图片但是打不开,这种情况可以用notepad++以文本的形式打开,会提示错误码,然后根据这个错误码去查找问题。第一次错误的code码忘记记录了,百度一查告诉我没有传递参数,我就在paramJson.put("scene", 1);这里加了个1,然后再次生成,二维码就能以图片的形式打开了。
    2、将图片存储到用户表后又测试了一遍,图片又打不开了,然后去网上查错误码,说是小程序没有正式上线导致无法正确的生成二维码。然后我把回调地址 从paramJson.put("page", "pages/home/home?userId=" + userId)改为paramJson.put("page", "pages/index/index")就又好了。
    哪里写的不对,希望大神能够指正。大家一起进步。
    
    展开全文
  • 微信小程序生成自定义参数二维码

    千次阅读 2019-09-03 21:16:03
    微信小程序生成二维码前言实现尾巴 前言 最近项目中要用到二维码分享功能,需要封装一些自定义的参数通过二维码分享。查看官方文档,发现系统提供了生成二维码的功能,但是细看才发现官方提供的接口其实是生成小程序...

    微信小程序生成自定义参数二维码

    前言

    最近项目中要用到二维码分享功能,需要封装一些自定义的参数通过二维码分享。查看官方文档,发现系统提供了生成二维码的功能,但是细看才发现官方提供的接口其实是生成小程序二维码,通过扫描二维码可以进入小程序指定的页面。显然官方的API无法满足我们的要求,接下来就将项目中离线生成带自定义参数的二维码的方法分享给大家。

    实现

    老规矩,先上图镇楼
    在这里插入图片描述
    有人可能会说,你会不会放的是一张二维码图片?
    在这里插入图片描述
    接下来我们就不卖关子了,其实核心的就是一个js类库。然后里面封装好了生成二维码、导出二维码等方法。类库中通过canvas相关的API最终将二维码绘制在canvas上面。当然小程序里面本来是没有这个类库的,是从html生产二维码的一个库(qrcodejs)移植修改过来的,接下来我们就直接上代码了。

    // wxml文件
    <view class="page">
      <canvas style="width:{{qrcodeWidth}}px; height:{{qrcodeWidth}}px;margin-top:60px;" canvas-id='canvas' bindlongtap='save'></canvas>
      <button type="primary" style="margin-top:100rpx;" bindtap="goscan">扫描相册二维码</button>
    </view>
    
    //js文件
    var QRCode = require('../../utils/qr-core.js')
    var qrcode = null;
    var that;
    Page({
      data: {
        qrcodeWidth: 0
      },
      onLoad: function () {
        that = this
        //获取canvas对象
        const ctx = wx.createCanvasContext('canvas')
        const rate = wx.getSystemInfoSync().windowWidth / 750
        //二维码宽高
        var qrcodeWidth = rate * 400
        that.setData({
          qrcodeWidth: qrcodeWidth
        })
    
        qrcode = new QRCode('canvas', {
          usingIn: that,
          width: qrcodeWidth,
          height: qrcodeWidth,
          colorDark: "#000000",//前景颜色
          colorLight: "white",//背景颜色
          correctLevel: QRCode.CorrectLevel.H,
        })
    
        qrcode.makeCode('hello world!')
      },
      savereal() {
        //授权成功之后,保存二维码到相册
        console.log('savereal')
        qrcode.exportImage(function (path) {
          console.log('path : ' + path)
          wx.saveImageToPhotosAlbum({
            filePath: path,
            success: function (data) {
              wx.showToast({
                title: '保存成功,请去手机相册查看',
                icon: 'none'
              })
            },
            fail: function (err) {
              wx.showToast({
                title: '保存失败',
                icon: 'none'
              })
            }
          })
        }, this)
      },
      // 长按保存
      save: function () {
        console.log('save')
        wx.showActionSheet({
          itemList: ['保存图片'],
          success: function (res) {
            console.log(res.tapIndex)
            if (res.tapIndex == 0) {
              that.getAlbumScope()
            }
          }
        })
      },
      //获取访问相册授权信息
      getAlbumScope() {
        wx.getSetting({
          success(res) {
            if (!res.authSetting['scope.writePhotosAlbum']) {
              wx.authorize({
                scope: 'scope.writePhotosAlbum',
                success() {
                  // 用户已经同意权限
                  that.savereal()
                  console.log('用户同意授权')
                },
                fail() {
                  console.log('用户拒绝授权')
                  wx.showModal({
                    title: '提示',
                    content: '需要访问您的相册将图片保存',
                    showCancel: false,
                    success: function (res) {
                      if (res.confirm) {
                        wx.openSetting({
                          success: function (data) {
                            if (data.authSetting["scope.writePhotosAlbum"] === true) {
                              that.savereal()
                            } else {
                              wx.showToast({
                                title: '获取授权失败',
                                icon: 'none',
                                duration: 1000
                              })
                            }
                          }
                        })
                      }
                    }
                  })
                }
              })
            } else {
              that.savereal()
            }
          }
        })
      },
      //调用微信二维码扫描功能并将返回结果弹出
      goscan(){
        wx.scanCode({
          success: (res) => {
            console.log(res)
            wx.showToast({
              title: res.result,
              icon: 'none',
              duration: 3000
            })
          },
          fail: (res) => {
            console.log(res)
          }
        })
      }
    })
    
    

    代码的逻辑很简单,js中已经做好了注释,如果需要生成二维码可以参考我文中的方法

    由于生成二维码的js文件较大,就不在这里贴出代码了,直接放百度网盘 百度网盘链接 提取码: tphe

    在这里插入图片描述

    尾巴

    如果你喜欢我的文章,欢迎给我点赞,评论,谢谢!

    展开全文
  • 微信小程序生成带参数二维码

    万次阅读 2018-09-19 15:23:27
    微信小程序生成带参数二维码微信官方说明PHP代码实现重要的也是最坑的 微信官方说明 先查看文档,共有三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口C ...

    微信官方说明

    1. 先查看文档,共有三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口C
      https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
      https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html

    2. 详细的三个接口地址请大家执行查看
      A:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/createWXAQRCode.html
      B:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/getWXACode.html
      C:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/createWXAQRCode.html
      在这里插入图片描述

    PHP代码实现

    需要调用的公共函数

    function https_request($url,$data = null){
        if(function_exists('curl_init')){
          $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl);
            curl_close($curl);
            return $output;
        }else{
          return false;
        }
    }
    

    封装了两个方法

    // 发送access_token
    public function getAccessToken($appid,$secret,$grant_type){
    	if (empty($appid)||empty($secret)||empty($grant_type)) {
    		return '参数错误';
    	}
    		 // https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type={$grant_type}&appid={$appid}&secret={$secret}";
        if (S('wx_token')) {
        	$token = S('wx_token');
        	return 'success';
        }
        $json = https_request($url);
        $data=json_decode($json,true);
        if (empty($data['access_token'])) {
        	return $data;
        }
        S('wx_token',$data,3600);
        return 'success';
    }
    // 获取带参数的二维码
    // 获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。
    public function getWXACodeUnlimit($access_token,$path='',$width=430){
    	if (empty($access_token)||empty($path)) {
    		return 'error';
    	}
    		 // https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
        $url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token={$access_token}";
        $data = array();
        $data['path'] = $path;
        //最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
        $data['width'] = $width;
        //二维码的宽度,默认为 430px
        $json = https_request($url,json_encode($data));
        return $json;
    }
    

    这里是核心的代码逻辑

    public function qrcode(){
            $wechat = C('wechat');
            $SupermarketModel = D('Supermarket');
            $superId = I('request.id','','intval');
            $w = array();
            $w['id'] = $superId;
            $superDefault = $SupermarketModel->where($w)->find();
            if (empty($superDefault)) {
            	ajax_return(false,'未找到相关信息');
            }
            $res = $SupermarketModel->getAccessToken($wechat['appId'],$wechat['appSecret'],'client_credential');
            if ($res == 'success') {
            	$token = S('wx_token');
            	$access_token = $token['access_token'];
            }else{
            	ajax_return(false,$res);
            }
            if (empty($access_token)) {
            	ajax_return(false,'access_token为空,无法获取二维码');
            }
            $path = 'pages/index/index?super='.$superId;
            $width = 430;
            $res2 = $SupermarketModel->getWXACodeUnlimit($access_token,$path,$width);
            // var_dump($res2);
            //将生成的二维码保存到本地
            // $file ="/Uploads/".substr($path,strripos($path,"?")+1).".jpg";
            $file ="Uploads/".$superId.".jpg";
            file_put_contents('./'.$file,$res2);
            if (file_exists($file)) {
            	ajax_return(true,'','/'.$file);
            }else{
            	ajax_return(false);
            }
        }
    

    重要的也是最坑的

    1.在获取二维码时,需要post向接口提交数据,只是说返回的是object。没有直接在文件中说明提交的post数据也需要是json对象。发送的既然不是数组,那么在curl请求就不能写成

    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post))
    

    必须写成

    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    

    在这里插入图片描述

    2.最坑的就是二维码获取成功后的处理。只要逻辑没有问题,获取参数二维码成功后,接口地址会直接返回如下字符串。
    在这里插入图片描述
    这表明你已经获取成功了。该如何把它变为一张图片呢,百度了好多,大家都没仔细描述这一步,还有同样的做到这里不会做了,后期更新。自己来吧:就是利用php自带的文件写入函数,把这些字符写入到图片格式的文件中就成功了。

    $file ="Uploads/qrcode.jpg";
    file_put_contents('./'.$file,$res2);
    

    源码下载(调查问卷微信小程序带tp后台)

    https://download.csdn.net/download/weixin_42799222/10958116

    展开全文
  • 主要介绍了微信小程序 PHP生成带参数二维码的相关资料,需要的朋友可以参考下
  • 微信小程序生成带参数二维码 官方共给了三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口B和接口C。 官方文档地址 业务需求: 扫描二维码进入指定商品页面,需要的参数为商品id(goods_id)。...

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

    官方共给了三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口B和接口C。
    官方文档地址

    业务需求:
    扫描二维码进入指定商品页面,需要的参数为商品id(goods_id)。

    一、先看效果图:

    在这里插入图片描述在这里插入图片描述

    二、PHP代码实现

    public function pathImg(){
    	$goods_id = '20'; //商品id
    	//配置APPID、APPSECRET
    	$APPID = "填写你的小程序appid"; 
    	$APPSECRET =  "填写你的小程序APPSECRET"; 
    	//获取access_token
    	$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";
    	$json = $this->httpRequest($access_token);
       	$json = json_decode($json,true); 
       	$ACCESS_TOKEN = $json['access_token'];
       	//如果要获取小程序码,请求这个接口
    	$qcode ="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=$ACCESS_TOKEN";
    	$param = json_encode(array("page"=>"pages/comm_details/comm_details","scene"=>$goods_id));
    	//如果要获取二维码,请求这个接口
    	// $qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";
    	// $param = json_encode(array("path"=>"pages/comm_details/comm_details?goods_id=19","width"=> 150));
    	//POST参数
    	$result = $this->httpRequest($qcode, $param, "POST");
    	//生成二维码
    	file_put_contents("qrcode.png", $result); 
    	//qrcode.png这个就是你生成的二维码图片,可以存到你指定的路径,例如:/update/img/qrcode.png
    	$base64_image ="data:image/jpeg;base64,".base64_encode($result);
    	echo $base64_image;
    }
    
    //curl请求
    public function httpRequest($url, $data='', $method='GET'){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        if($method=='POST'){
            curl_setopt($curl, CURLOPT_POST, 1);
            if ($data != ''){
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
       	}
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        curl_close($curl);
        return $result;
     }
    

    注:微信小程序js文件中接收scene所带的参数方法(小程序码需要这么接收)

        Page({
          onLoad: function(options) {
            // options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
            var scene = decodeURIComponent(options.scene)
            console.log(scene)
          }
        })
    

    备注

    1、前端接收scene值解析:
    你在php代码中scene传的什么,接收到的就是上面,我这里scene传的20,打印出来就是20,如果scene传的goods_id=20, 那么前端打印出来就是goods_id=20

    2、微信开发者工具里面有一个通过二维码编译选项,也可以用这个测试你的生成的码,见下图:
    在这里插入图片描述
    3、手机扫描二维码或者小程序码默认进入线上版本,具体能不能设置为访问开发版本或者体验版本,我也不知道。

    展开全文
  • 微信小程序生成带二维码中遇到的坑 欢迎大家关注我的微信公众号,会分享自己在Web开发领域和生活工作中的一些所思所悟,希望能给你带来帮助! ...
  • 老板最近有点飘了,他要在PC端的网站放一个微信小程序二维码,并且扫描这个二维码以后要跳到小程序对应的房源详情页。 这是微信官方给出的文档,连接地址:...
  • 微信小程序生成带logo二维码

    千次阅读 2019-05-20 11:30:17
    先上图,看看是不是你想要的!!! 引入js直接用 页面就一个画布就行,标上id,宽高 ...提取码:f4bu ...模拟器完全ok的,到了手机上就不显示了,可能是我手机配置低吧渲染失败...刚开始写小程序,路子还长,慢慢积累~ ...
  • 小程序二维码生成官方文档链接 https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html 接口地址:https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN getQCoder: function() {...
  • 微信小游戏 生成 带参数二维码

    千次阅读 2019-01-14 16:25:43
    微信小程序目前总共提供了3中二维码 : 接口 A: 适用于需要的码数量较少的业务场景 生成小程序码,可接受 path 参数较长,生成个数受限,数量限制见 注意事项,请谨慎使用。 接口 B:适用于需要的码数量极多...
  • 注意:保证当前小程序要有线上版本 ...要转换的这个url必须要在微信公众平台配置了扫普通链接二维码打开小程序,如下图: 测试连接是开发人员测试用的,跳转至测试版本的小程序,如果,转换的url不是...
  • 微信小程序如何生成参数二维码

    千次阅读 2018-05-24 10:05:57
    参数二维码在很多小程序中都会用到。比方说,如果是一款简历制作的小程序,很可能需要给用户提供这样的功能:上传自己的简历,生成属于自己的二维码。又比如说,一款在线相册制作的小程序,在用户结束制作之后需要...
  • 微信小程序生成小程序二维码流程

    万次阅读 2018-04-02 20:14:57
    微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文: 小程序需要先上线才能生成二维码 一:获取access_token 接口调用请求说明 https请求方式: GET ...appid=APPI...
  • 主要介绍了微信小程序 生成携带参数二维码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
  • 调用将微信小程序生成小程序二维码图片接口时,在前端无法显示的问题 下面是接口的地址以及开发文档: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/getWXACode.html 接口请求的地址为:...
  • 微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 小程序需要先上线才能生成二维码 HTTP请求的效果图: 小程序展示的效果图: 小程序展示二维码源码: 请求二维码图片base64路径,...
  • 1.微信小程序开发工具界面,点击云图标上传(如果报statusCode=407的话需要把代理关闭),待上传成功。 2.在微信公众号平台登录,选择需要生成二维码的小程序。 3.选择版本管理,选择刚才自己上传的版本,提交审核...
  • 生成海报分享至</text> <view class='imgBox'> <button open-type="share" class='zfbtn'><image src="{{wechat}}" class='img'></image></button> <button class='zfbtn...
  • 微信小程序生成多张二维码以及支持async await需求来了原生小程序实现支持async awaitqrcode.js中引入runtime.js使用本次改造关键点:1.引入runtime.js包,让原生小程序支持async await2.修改qrcode.js里面的draw...
  • 微信小程序生成二维码,微信小程序生成带参数二维码demo,后台用PHP的
  • 1.小程序生成只对已上线,已存在的页面有效,否则会抛出如下错误。stdClass Object ( [errcode] =&gt; 41030 [errmsg] =&gt; invalid page hint: [bv8Yha08468927] ) ,即不可用的页面。即已经上线的页面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,616
精华内容 6,646
关键字:

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

微信小程序 订阅