收藏
评论

PHP生成微信小程序二维码,可生成带参数二维码。

微信小程序官方开放了3个创建二维码的接口,其中有一个是生成二维码的,还有一个是葵花状的小程序码,我这里就用php生成二维码。

首先要获取Access_token

这个请求起来也是很容易的,微信开发文档有请求接口:
要把自己的小程序的APPID和APPSECRET获取到

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET


access_token只有2小时有效期,所以要缓存最好,避免重复请求




可以构建一个数组,然后转成json数据赋给一个变量

$param = json_encode(array("path"=>"pages/index/index?id=123","width"=> 150));


然后POST数据发送到微信服务器换取二维码

完整代码



<?php
header('content-type:text/html;charset=utf-8');
//配置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";
 
//缓存access_token
 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"];
 }
 
//构建请求二维码参数
//path是扫描二维码跳转的小程序路径,可以带参数?id=xxx
//width是二维码宽度
$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";
$param = json_encode(array("path"=>"pages/index/index?id=123","width"=> 150));
 
//POST参数
$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;
  }
 
?>


使用方法:

1、新建qrcode.php
2、拷贝上面代码进去
3、修改APPID和APPSECRET
4、访问qrcode.php

即可生成一个带参数的小程序二维码


收藏

7 个评论

  • 艾克 akram.arkin
    艾克 akram.arkin
    2020-10-22

    葵花状的小程序码 的二维码 怎么弄

    2020-10-22
    赞同 2
    回复 2
  • 新
    2021-03-10

    获取菊花码怎么搞?

    https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;

    这个好像不行

    2021-03-10
    赞同
    回复
  • 什么จุ๊บ
    什么จุ๊บ
    2019-01-30

    已经执行到了

    //POST参数

    $result = httpRequest( $qcode$param,"POST");这一步

    没有失败提示,按道理应该是成功了,但是我将得到的数据存入数据库,却是一片空白,这是什么问题呢?

    需要先处理一下?还是直接存数据库就空白?

    (如下图,前面是错误的,后面调试后,没报错了。但是得到的确实一片空白)??


    2019-01-30
    赞同
    回复
  • こフ|
    こフ|
    2018-07-27

    我自己搭建了一个小程序码生成平台(支持abc接口)

    只需要填写一丁点的参数就可以直接调用。。


    https://dev.vcode.cloud

    2018-07-27
    赞同
    回复
  • 天涯旅人
    天涯旅人
    2018-07-18

    请教个问题哦,未发布的小程序,能够通过这三个接口获取小程序的二维码或小程序码?

    2018-07-18
    赞同
    回复
  • 苍山岳
    苍山岳
    2018-07-18

    这个参数拿不到是什么问题

    if(options.scene){
        var scene = decodeURIComponent(options.scene);
        console.log(scene);
    }


    2018-07-18
    赞同
    回复
  • stumpx
    stumpx
    2018-07-17

    EasyWechat了解下

    2018-07-17
    赞同
    回复
登录 后发表内容