在请求 获取不限制的小程序码 接口时,可能响应:图片 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


近期评论