MENU

微信小程序『带参数小程序码』

前言

在做『星邀请』小程序后台,遇到一个场景,需要分享朋友圈,但是微信小程序官方都是没有这个接口的。突发奇想,像朋友圈一群人发火车票好友支援,确实就是需要像这样。

思路

在微信小程序官方给出三种接口

  • 接口A: 适用于需要的码数量较少的业务场景(通过该接口生成的小程序码,永久有效,数量限制)
  • 接口B:适用于需要的码数量极多的业务场景(通过该接口生成的小程序码,永久有效,数量暂无限制)
  • 接口C:适用于需要的码数量较少的业务场景(通过该接口生成的小程序二维码,永久有效,数量限制)

显然,接口B适合业务场景,毕竟需要考虑用户的数量,采用接口B

实现方法

  • 首先,在请求接口的时候需要全局票据(access_token),获取这个就像微信公众号开发那样咯,有个两个小时的有效期,所以这里想进行存储一下,以免每次请求都去请求access_token

    /**
     * @param $url
     * @param null $data
     * @return bool|mixed
     * 请求小程序api
     */
    function CURL($url,$data = null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        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);
        if($output === FALSE ){
            return false;
        }
        curl_close($curl);
        return $output;
    }
    
    /**
     * @return bool|mixed
     * 请求Token值
     * todo 建议采用Redis方式存储Token值(过期时间7200s)
     */
    public function GetAccessToken($wxtokenurl,$wxappid,$wxsecret)
    {
        //如果access_token没有过期,直接return
        if (session('access_token') && session('expire_time') > time()) {
            return session('access_token');
        } else {
            //重新获取access_token
            $token_url = sprintf($wxtokenurl,$wxappid,$wxsecret);
            $TokenInfo = json_decode($this->CURL($token_url),true);
            session(['access_token' => $TokenInfo['access_token']]);
            session(['expire_time' => (time() + 7000)]);
            return session('access_token');
        }
    }
    
    
  • 请求接口生成图片

    /**
       * @return mixed
       * @param $scene string 场景值
       * @param $page string 具体页面
       * @param $token string access_token
       */
      public function GetpicUrl($scene,$page,$token)
      {
          $url = sprintf($this->wxpicurl,$token);
          $data = array(
              "scene" => $scene,
              "page" => $page, 
              "width" => 430, 
              "auto_color" => true
          );
          $data = json_encode($data);
          $imgstream = $this->CURL($url,$data);
          $realpath = '/public/qrcode/'
          Storage::put($realpath, $imgstream);
          return Storage::url('qrcode/' . $filename);     //返回保存路径url
      }
    
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码
添加新评论