没有不值得去解决的问题,也没有不值得去学习的技术!

在请求 获取不限制的小程序码 接口时,可能响应:图片 Buffer 。可能响应:JSON 字符串。设置了响应格式为:raw-urlencoded 。如何判断接口请求是成功还是失败?

当响应为非 图片 Buffer 时,写入图片文件中的数据有误。图片无法打开。最终决定通过 响应头 Content-Type 来进行区分
1、PHP 代码实现如下


    /**
     * 获取不限制的小程序码
     * @param $accessToken
     * @param $scene
     * @param $page
     * @param $width
     * @return mixed
     * @throws ServerErrorHttpException
     */
    public function getUnlimitedQRCode($accessToken, $scene, $page = null, $width = 430)
    {
        $response = $this->httpClient->createRequest()
            ->setMethod('POST')
            ->setUrl('wxa/getwxacodeunlimit?access_token=' . $accessToken)
            ->setFormat(Client::FORMAT_JSON)
            ->setData([
                'scene' => $scene,
                'page' => $page,
                'width' => $width,
                'check_path' => false,
                'env_version' => 'trial'
            ])
            ->send();

        // 设置响应格式为 raw-urlencoded(二进制数据)
        $response->format = Client::FORMAT_RAW_URLENCODED;

        // 检查响应状态码是否等于20x
        if ($response->isOk) {
            // 检查业务逻辑是否成功
            if (isset($response->data['errcode']) && isset($response->data['errcode'])) {
                throw new ServerErrorHttpException('获取不限制的小程序码失败,errcode:' . $response->data['errcode'] . ',errmsg:' . $response->data['errmsg'], 20021);
            }
        } else {
            throw new ServerErrorHttpException('获取不限制的小程序码失败,status_code:' . $response->statusCode, 20022);
        }

        return $response->content;
    }


2、当响应为非 图片 Buffer 时,写入图片文件中的数据有误。图片无法打开。最终决定通过 响应头 Content-Type 来进行区分。如图1
当响应为非 图片 Buffer 时,写入图片文件中的数据有误。图片无法打开。最终决定通过 响应头 Content-Type 来进行区分
图1


application/json; encoding=utf-8
image/jpeg




    /**
     * 获取不限制的小程序码
     * @param $accessToken
     * @param $scene
     * @param $page
     * @param $width
     * @return mixed
     * @throws ServerErrorHttpException
     */
    public function getUnlimitedQRCode($accessToken, $scene, $page = null, $width = 430)
    {
        $response = $this->httpClient->createRequest()
            ->setMethod('POST')
            ->setUrl('wxa/getwxacodeunlimit?access_token=' . $accessToken)
            ->setFormat(Client::FORMAT_JSON)
            ->setData([
                'scene' => $scene,
                'page' => $page,
                'width' => $width,
                'check_path' => false,
                'env_version' => 'trial'
            ])
            ->send();

        // 检查响应状态码是否等于20x
        if ($response->isOk) {
            $contentType = $response->getHeaders()->get('Content-Type');
            if (strpos($contentType, 'image/') !== false) {
                return $response->content;
            } elseif (strpos($contentType, 'application/json') !== false && isset($response->data['errcode']) && isset($response->data['errcode'])) {
                throw new ServerErrorHttpException('获取不限制的小程序码失败,错误码:' . $response->data['errcode'] . ',错误信息:' . $response->data['errmsg'], 20021);
            } else {
                // 未知响应类型
                throw new ServerErrorHttpException('获取不限制的小程序码失败,未知响应类型:' . $contentType, 20023);
            }
        } else {
            throw new ServerErrorHttpException('获取不限制的小程序码失败,HTTP 状态码:' . $response->statusCode, 20022);
        }
    }


3、当响应为非 图片 Buffer 时,yii\web\ServerErrorHttpException: 获取不限制的小程序码失败,错误码:40001,错误信息:invalid credential。如图2
当响应为非 图片 Buffer 时,yii\web\ServerErrorHttpException: 获取不限制的小程序码失败,错误码:40001,错误信息:invalid credential
图2


{
    "code": 10000,
    "message": "生成微信小程序二维码成功",
    "data": {
        "url": "/mini-program-qr-codes/644d4a4c0fff836ec9ac17d86d0911aa.png"
    }
}


yii\web\ServerErrorHttpException: 获取不限制的小程序码失败,错误码:40001,错误信息:invalid credential, access_token is invalid or not latest, could get access_token by getStableAccessToken, more details at https://mmbizurl.cn/s/JtxxFh33r rid: 67d90e17-47a89f95-26c1c8de 


需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理