在请求 获取不限制的小程序码 接口时,可能响应:图片 Buffer 。可能响应:JSON 字符串。设置了响应格式为:raw-urlencoded 。如何判断接口请求是成功还是失败?
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
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
{ "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
近期评论