微信小程序二维码图片上传OSS

本文介绍如何使用微信接口获取小程序二维码的二进制流,并直接上传至阿里云OSS存储。涵盖选择合适接口、获取access_token、构建POST参数、获取二维码及上传OSS等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tags: 微信小程序
小程序二维码的接口返回的是二进制流,如果我们是想把小程序二维码图片存入OSS中,则不需要把二进制流转为图片保存再上传OSS,直接将获取的二进制流通过字符串上传的方式写入OSS的文件中。

微信小程序开发文档
阿里云OSS开发文档

一、选取合适的接口(此文选取接口B为例)
接口A: 适用于需要的码数量较少的业务场景
https://api.weixin.qq.com/wxa/getwxacode

接口B:适用于需要的码数量极多,或仅临时使用的业务场景
https://api.weixin.qq.com/wxa/getwxacodeunlimit

接口C:适用于需要的码数量较少的业务场景
https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode
二、获取access_token
  • 别忘了把access_token(两个小时内有效)存入缓存哦~
$url = "https://api.weixin.qq.com/cgi-bin/token";
$params = [
            'grant_type' => 'client_credential',
            'appid' => 'appid',
            'secret' => 'secret',
        ];
$data = HttpClient::get($url, $params);
$access_token = $data['access_token'];
public static function get($url, $params) {
    $url = $url . '?' . http_build_query($params);
    return self::http($url, 'GET');
}
三、构建POST参数
$data = [
    "scene" => $scene, 
    "width" => 430, //图片长宽
    "page" => "", //小程序页面地址,不要带参数,需要的参数放入scene的值中
    "line_color" => [
        "r" => "0",
        "g" => "0",
        "b" => "0"
    ]
];
四、获取微信小程序二维码
$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $access_token;
$imgData = HttpClient::post($url, $data);
 public static function post($url, $params) {
    $headers = array();
    $body = http_build_query($params);
    return self::http($url, 'POST', $body, $headers);
}
private static function http($url, $method, $postfields = NULL, $headers = array()){
    $ci = curl_init();
    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ci, CURLOPT_USERAGENT, 'X-YZ-Client 2.0.0 - PHP');
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ci, CURLOPT_TIMEOUT, 30);
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ci, CURLOPT_ENCODING, "");
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 1);
    curl_setopt($ci, CURLOPT_HEADER, FALSE);

    switch ($method) {
        case 'POST':
        curl_setopt($ci, CURLOPT_POST, TRUE);
        if (!empty($postfields)) {
            curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
        }
            break;
    }

    curl_setopt($ci, CURLOPT_URL, $url);
    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE);

    $response = curl_exec($ci);
    $httpCode = curl_getinfo($ci, CURLINFO_HTTP_CODE);
    $httpInfo = curl_getinfo($ci);

    curl_close($ci);
    return $response;
}
五、把图片二进制流写入OSS
$filename =  rand(1, 100) . time() . $scene . ".jpg";
$result = $this->ossClient->putObject($this->_bucket, $filename, $imgData);
if ($result) {
    if (isset($result['info'])) {
        $imgUrl = $this->host . $filename;
    }
}
public function putObject($bucket, $object, $content, $options = NULL) {
    $this->precheckCommon($bucket, $object, $options);

    $options[self::OSS_CONTENT] = $content;
    $options[self::OSS_BUCKET] = $bucket;
    $options[self::OSS_METHOD] = self::OSS_HTTP_PUT;
    $options[self::OSS_OBJECT] = $object;

    if (!isset($options[self::OSS_LENGTH])) {
        $options[self::OSS_CONTENT_LENGTH] = strlen($options[self::OSS_CONTENT]);
    } else {
        $options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH];
    }

    $is_check_md5 = $this->isCheckMD5($options);
    if ($is_check_md5) {
        $content_md5 = base64_encode(md5($content, true));
        $options[self::OSS_CONTENT_MD5] = $content_md5;
    }

    if (!isset($options[self::OSS_CONTENT_TYPE])) {
        $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object);
    }
    $response = $this->auth($options);

    if (isset($options[self::OSS_CALLBACK]) && !empty($options[self::OSS_CALLBACK])) {
        $result = new CallbackResult($response);
    } else {
        $result = new PutSetDeleteResult($response);
    }
    return $result->getData();
}

ps:文章私人所有,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值