php学习笔记:获取小程序二维码

前几天同事小游戏项目要生成一个二维码展示,返回的二维码需要展示在客户端那里。但这个返回二维码的文档却是带一点小坑。小程序提供二维码的获取接口,一共有三个(实验以其中一个为主)。但返回的格式是二进制文件流,所以返回的文件想显示在客户端需要做一个转码。而转换方案采取base64编码。

在返回给客户端展示的时候,php 在base64_encode 的时候返回前端需要对编码一个前缀。例如

data:image/jpeg;base64 //输出jpg
或者 data:image/png;base64  //输出png

这样就可以实现转换过程。小程序并不能直接生成。需要借助后端,这里是有一些限制。限制小程序主动去请求接口返回。微信做了一些限制,即使加了白名单依旧是不推荐这种方式。

还有需要注意到的事情,小程序获取二维码三个接口都有不一样。前提还是需要发布后才能生成和调用。 获取access_token 的有效时长是7200秒,也就是说一般情况下2个小时后就会过期,需要重新生成。还有一种做法是在一个小时内,提前刷新请求此接口让access_token 保持最新。

下面记录一下实验的内容写一个小工具。需要填写自己的小程序APPID和密钥。

<?php
header('content-type:text/html;charset=utf-8');

$APPID = "填写小程序APPID"; 
$APPSECRET =  "填写小程序密钥"; 
$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";

 session_start();
 $_SESSION['access_token'] = "";
 $_SESSION['expires_in'] = 0;

 $ACCESS_TOKEN = "";
 if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in']))
 {

     $json = httpRequest( $access_token );
     $json = json_decode($json,true); 
     var_dump($json);
     $_SESSION['access_token'] = $json['access_token'];
     $_SESSION['expires_in'] = time()+7200;
     $ACCESS_TOKEN = $json["access_token"]; 
 } 
 else{

     $ACCESS_TOKEN =  $_SESSION["access_token"]; 
 }


$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";

 $param = json_encode(array("path"=>"pages/index/index","width"=> 430));

 $result = httpRequest( $qcode, $param,"POST");
 file_put_contents("qrcode.png", $result);

 $base64_image ="data:image/jpeg;base64,".base64_encode( $result );


  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;
  } 


//https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

?>


 <img src="<?php echo $base64_image;?>"/>

将结果输出到网页端。这样就对小程序的二维码获取到了。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值