1. 通过API提取海外手机号码的短信需要先获取一个手机号
比如注册光年号 (https://gnhao.com
),然后获取一个英国手机号。这家都是实体手机sim卡,不是虚拟卡,所以是比较推荐的。
获取到手机号之后,使用下面的api文档进行配置api收取短信SMS内容。
2. 获取短信内容的API文档
简要描述
- 获取短信内容,返回该号码最新的一条短信内容,建议5-30秒请求一次
请求URL
https://gnhao.com/index/api/get_sms_v1
请求方式
- post
参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
app_key | 是 | 字符串 | API密钥 |
phone | 否 | 字符串 | 手机号码 |
返回参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
code | 是 | 数值 | 返回状态码 |
message | 是 | 字符串 | 返回结果说明 |
data | 否 | 数组 | 返回的短信内容数组 |
返回示例
{
"code": 200,
"message": "请求成功",
"data": Array
}
data内容示例
[data] => Array
(
[phone] => 收信号码
[sender] => 发信人
[sender_name] => 发信人名称
[content] => 短信内容
[send_time] => 短信发送时间
)
code返回值对照
值 | 文本 | 说明 |
---|---|---|
200 | 请求成功 | |
40001 | API密钥不能为空 | |
40002 | 认证失败 | API密钥错误 |
40003 | phone不能为空 | |
40004 | phone错误 | . |
如果对代码不熟悉,可以直接让deepseek帮忙写一个php或者python代码,非常简单。
3.参考代码片段分享
<?php
/**
* 获取短信内容的API调用示例
*/
class SmsApiClient {
private $apiKey;
private $apiUrl = 'https://gnhao.com/index/api/get_sms_v1';
/**
* 构造函数
* @param string $apiKey API密钥
*/
public function __construct($apiKey) {
$this->apiKey = $apiKey;
}
/**
* 获取最新短信内容
* @param string|null $phone 手机号码(可选)
* @return array 返回解析后的API响应数据
* @throws Exception 当API请求失败时抛出异常
*/
public function getLatestSms($phone = null) {
// 准备请求参数
$params = [
'app_key' => $this->apiKey
];
if ($phone !== null) {
$params['phone'] = $phone;
}
// 初始化cURL
$ch = curl_init();
// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $this->apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 如果是生产环境,建议设为true并配置证书
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// 执行请求
$response = curl_exec($ch);
// 检查错误
if (curl_errno($ch)) {
throw new Exception('cURL请求错误: ' . curl_error($ch));
}
// 关闭cURL资源
curl_close($ch);
// 解析JSON响应
$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('解析JSON响应失败: ' . json_last_error_msg());
}
// 检查API返回的状态码
if (!isset($result['code'])) {
throw new Exception('API响应格式异常: 缺少状态码');
}
// 根据状态码处理不同情况
switch ($result['code']) {
case 200:
// 请求成功
return $result;
case 40001:
throw new Exception('API密钥不能为空');
case 40002:
throw new Exception('API密钥错误,认证失败');
case 40003:
throw new Exception('phone参数不能为空');
case 40004:
throw new Exception('phone参数错误');
default:
throw new Exception('未知错误: ' . ($result['message'] ?? '无错误信息'));
}
}
}
// 使用示例
try {
// 替换为你的API密钥
$apiKey = 'your_api_key_here';
// 创建API客户端实例
$smsClient = new SmsApiClient($apiKey);
// 可选: 指定要查询的手机号码
// $phone = '13800138000';
$phone = null;
// 获取最新短信
$result = $smsClient->getLatestSms($phone);
// 处理结果
if (!empty($result['data'])) {
echo "最新短信内容:\n";
echo "收信号码: " . $result['data']['phone'] . "\n";
echo "发信人: " . $result['data']['sender'] . "\n";
echo "发信人名称: " . $result['data']['sender_name'] . "\n";
echo "短信内容: " . $result['data']['content'] . "\n";
echo "发送时间: " . $result['data']['send_time'] . "\n";
} else {
echo "没有获取到短信内容\n";
}
} catch (Exception $e) {
echo "发生错误: " . $e->getMessage() . "\n";
}
// 如果需要定时请求,可以使用循环
/*
$interval = 10; // 10秒请求一次
do {
try {
$result = $smsClient->getLatestSms($phone);
// 处理结果...
} catch (Exception $e) {
// 错误处理...
}
sleep($interval);
} while (true);
*/
?>