微信公众平台开发 批量生成及下载带参二维码图片

微信公众平台开发 批量生成及下载带参二维码图片

最近在做微信二次开发时经常会使用到场景二维码,所以就把相关的批量生成并保存二维码图片的代码整理了一下。
文章的主要内容:

  1. 提供批量生成及下载二维码图片的php代码(对accessToken做了本地保存处理,不会出现请求次数饱和的现象)
  2. 制作二维码过程中需要注意的小细节

在微信公众平台上如何使用高级接口开发生成带参数二维码的功能,网上有很多相关教程。可以参考微信官方文档_生成带参数的二维码 和方倍老师的博客 微信公众平台开发(83) 生成带参数二维码 来了解制作的原理和流程。
获取ticket流程图

Talk is cheap , show you the code now:
  1. 执行方法:
    /**
     * 参数说明:
     * type:二维码类型  1:永久 2:临时
     * from:二维码所带参数开始值
     * to :二维码所带参数结束值
     */
    public function creat_qrcode_image() {
        $scene_type = $_REQUEST ['type'];
        switch($scene_type)
        {
            case '1': //永久
                $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
                break;
            case '2': //临时
                $data = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
                break;
            default:
                $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
                break;
        }
        $access_token = $this->getAccessToken();
        for($scene_id = 101; $scene_id <= 120; $scene_id ++) {
            $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $access_token;
            $res = $this->https_request ( $url, $data );
            $result = json_decode ( $res, true );
            $ret [$scene_id] = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode ( $result ["ticket"] );
            $imageInfo = $this->downloadQrImage ( $ret [$scene_id] );
            // 写入,生成图片
            $filename = ROOT . "/Files/Wechat/qrcode_".$scene_id.".jpg";
            $local_file = fopen ( $filename, 'w' );
            if (false !== $local_file) {
                if (false !== fwrite ( $local_file, $imageInfo ["body"] )) {
                    fclose ( $local_file );
                }
            }
        }
    }

2 . 获取accessToken (需填入你的appId 和 appSecret)

public function getAccessToken() {
        $appId='等你来填';
        $appSecret='等你来填';
        $filename='access_token.json';
        $data = json_decode(file_get_contents(ROOT ."/Files/Wechat/".$filename));
        if ($data->expire_time < time()) {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
            $res = json_decode($this->https_request($url));
            $access_token = $res->access_token;
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                $fp = fopen(ROOT ."/Files/Wechat/".$filename, "w");
                fwrite($fp, json_encode($data));
                fclose($fp);
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }

使用说明:

1.在getAccessToken()方法中填入你的appId 和 appSecret。

2.执行creat_qrcode_image()方法。

eg. 地址栏输入 http://www.abcd.com/creat_qrcode_image?type=1&from=100&to=120
二维码图片会自动保存在你设置的目录下。

    值得注意的是,scene_id不能改成其他键名,如m_id等,否则生成的二维码被扫描后,得到$object->EventKey就是qrscene_0
    scene_id只能为**数字**,出现字母则结果为0
    "scene_id":0001  ,得到的结果为qrscene_1

这里提供一个实用的封装过的echo()方法:

function e(){
        echo "<pre>";
        $objs = func_get_args();
        foreach($objs as $obj) {print_r($obj);echo "<br>";}
        echo "</pre>";
    }

function _e(){
    echo "<pre>";
    $objs = func_get_args();
    foreach($objs as $obj) {print_r($obj);echo "<br>";}
    echo "</pre>";
    exit;
}

使用方法:e ($ret); _e($ret);
这两个对象输出方法可以自动按格式输出string、array、object等类型的对象。
e()方法只做打印输出操作。_e()方法的在打印输出操作后停止执行该方法。


在Java中生成微信小程序带参二维码图片,你可以使用第三方库如`qrcode-generator`。首先,你需要在你的项目中添加依赖。以下是一个简单的示例代码: ```java import com.github.sankalp.java.qrcode.QRCode; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; public class WechatQrcodeGenerator { public static void main(String[] args) { // 微信小程序参数 String wxAppId = "your_app_id"; String wxSecret = "your_secret"; String url = "https://your-url.com?param1=value1&param2=value2"; try { // 创建QRCode对象并设置参数 QRCode qrCode = new QRCode(); qrCode.addData(url); qrCode.setSize(400); // 设置二维码大小 // 生成二维码 BufferedImage image = qrCode.getImage(); // 转换为字节数组 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", baos); byte[] qrBytes = baos.toByteArray(); // 保存到文件或者返回给前端 File file = new File("wechat_qrcode.jpg"); ImageIO.write(image, "jpg", file); System.out.println("QR code saved to " + file.getAbsolutePath()); // 或者直接返回字节流 // return qrBytes; // 这部分需要前端处理图片显示 } catch (IOException e) { e.printStackTrace(); } } } ``` **注意**: 这里使用的是JDK自的`ImageIO`处理图像,并没有涉及微信小程序的具体环境。在实际应用中,你可能需要一个支持微信小程序的服务器环境来处理生成二维码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值