There is no problem not worth solving, and no technology not worth learning!

When requesting to obtain unlimited applet code interface, it is possible to respond: picture buffer . Possible response: JSON string. The response format is set to: raw-urlencoded . How to determine whether the interface request is a success or a failure?

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

1. The PHP code is implemented as follows


    /**
     * 获取不限制的小程序码
     * @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. When the response is a non-picture buffer, the data written in the picture file is incorrect. Image cannot be opened. The final decision is made to distinguish through the response header content-type. as shown in Figure 1

当响应为非 图片 Buffer 时,写入图片文件中的数据有误。图片无法打开。最终决定通过 响应头 Content-Type 来进行区分
Figure 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. When the response is a non-picture buffer, yii\web\serverErrorHttpException: Failed to obtain unlimited applet code, error code: 40001, error message: invalid Credential. as shown in Figure 2

当响应为非 图片 Buffer 时,yii\web\ServerErrorHttpException: 获取不限制的小程序码失败,错误码:40001,错误信息:invalid credential
Figure 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 


Need long-term technical maintenance or remote troubleshooting?

I am a PHP / Go backend engineer with 15+ years of experience, focused on existing system maintenance, bug fixing, performance optimization, server troubleshooting, WordPress maintenance, and small feature iterations.

If your project is facing any of the following issues, we can start with a small troubleshooting task first:

  • ✅ PHP / Laravel / Yii2 legacy systems without active maintenance
  • ✅ Go / Gin backend APIs that need troubleshooting or optimization
  • ✅ Slow, broken, or unstable WordPress websites
  • ✅ Nginx / MySQL / Redis / Linux server issues
  • ✅ CDN / Cloudflare / DNS / HTTPS configuration problems
  • ✅ Long-term remote technical support or part-time maintenance

More details: About Me & Collaboration

WeChat: 13980074657
Email: shuijingwanwq@gmail.com
Telegram: @shuijingwan
GitHub: https://github.com/shuijingwan

评论

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.