You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:PHP Curl获取Bearer Token并调用SIM状态API

解决PHP获取Bearer Token并调用SIM卡状态API的问题

核心问题分析

你的第一个脚本仅发送了获取Token的请求,但未解析响应提取Token;第二个脚本的Bearer Token是硬编码占位符,因此需要将两个流程整合,先成功获取Token再传入查询接口。

完整修改后的代码

<?php
// 第一步:获取Bearer Token
$authCh = curl_init();
curl_setopt($authCh, CURLOPT_URL, 'https://console.monogoto.io/Auth');
curl_setopt($authCh, CURLOPT_RETURNTRANSFER, true);
curl_setopt($authCh, CURLOPT_POST, true);
curl_setopt($authCh, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
]);
// 替换成你的真实用户名和密码
$postData = json_encode([
    "UserName" => "你的用户名",
    "Password" => "你的密码"
]);
curl_setopt($authCh, CURLOPT_POSTFIELDS, $postData);

$authResponse = curl_exec($authCh);
$authError = curl_error($authCh);
curl_close($authCh);

// 处理Token获取的错误情况
if ($authError) {
    die("获取Token时请求错误: " . $authError);
}

// 解析JSON响应,提取Token(注意:请根据实际返回结构调整键名,比如可能是'Token'或'access_token')
$authData = json_decode($authResponse, true);
if (!$authData || empty($authData['access_token'])) {
    die("Token获取失败或响应格式错误: " . $authResponse);
}
$bearerToken = $authData['access_token'];

// 第二步:调用SIM卡状态查询API
$sim = $_POST['sim'] ?? '';
if (empty($sim)) {
    die("请提供有效的SIM ID");
}

echo "<br>Sim ID - " . $sim . "<br><br>";

$statusCh = curl_init();
curl_setopt($statusCh, CURLOPT_URL, 'https://console.monogoto.io/thing/' . urlencode($sim) . '/state/');
curl_setopt($statusCh, CURLOPT_RETURNTRANSFER, true);
curl_setopt($statusCh, CURLOPT_HTTPHEADER, [
    'accept: application/json',
    'authorization: Bearer ' . $bearerToken,
]);

$statusResponse = curl_exec($statusCh);
$statusError = curl_error($statusCh);
curl_close($statusCh);

// 处理状态查询的错误情况
if ($statusError) {
    die("查询SIM状态时请求错误: " . $statusError);
}

print "Status of Sim?: " . $statusResponse;
?>

关键修改说明

  • 将两个独立脚本整合为一个流程,确保Token获取后直接用于后续请求
  • 用json_encode构造POST数据,避免手动拼接JSON的语法错误
  • 添加多层错误处理:捕获curl请求错误、检查Token是否有效提取、验证SIM ID是否存在
  • 对SIM ID使用urlencode处理,防止特殊字符导致URL无效
  • 提示你根据Auth接口的真实返回结构调整Token提取的键名(比如如果接口返回"Token": "xxx",就把$authData['access_token']改成$authData['Token'])

额外建议

  • 可以将Token缓存到会话($_SESSION)或文件中,避免每次请求重复调用Auth接口,减少API请求次数、提升效率
  • 测试时可先单独打印$authResponse,确认返回的JSON结构,确保Token提取的键名正确

内容的提问来源于stack exchange,提问作者David Rowland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:34:50