feat: 添加阿里云短信服务支持并优化验证码逻辑

- 引入 alibabacloud/dysmsapi-20170525 依赖,集成阿里云短信服务
- 将短信验证码从6位改为4位,优化用户体验
- 添加聚水潭商品按时间范围同步功能,支持分页拉取
- 增强Cron任务异常处理,添加错误日志记录
- 修复系统附件服务中图片路径处理逻辑
- 更新阿里云SDK相关组件至最新版本
- 添加think-trace调试扩展,便于问题排查
- 优化跨域中间件,使用str_contains替代strpos
This commit is contained in:
2026-04-30 15:19:40 +08:00
parent 0334fef6c1
commit c7f85ffbda
565 changed files with 59742 additions and 3391 deletions

144
test_haichao_detail.php Normal file
View File

@@ -0,0 +1,144 @@
#!/usr/bin/env php
<?php
namespace think;
require __DIR__ . '/vendor/autoload.php';
$spu = $argv[1] ?? '';
echo "========================================\n";
echo "聚水潭商品拉取接口测试\n";
echo "========================================\n\n";
$app = new App();
$app->initialize();
echo "✅ 应用初始化成功!\n\n";
try {
echo "1️⃣ 测试HaichaoJstServices方法...\n\n";
$haichaoJst = \app\haichao\HaichaoJstServices::getServices();
if (empty($spu)) {
echo "用法: php test_haichao_detail.php SPU编码\n";
echo "示例: php test_haichao_detail.php test123\n\n";
echo "2️⃣ 尝试获取示例数据(getProductListStand)...\n\n";
try {
echo "正在调用聚水潭API...\n";
$result = $haichaoJst->getProductListStand();
echo "✅ API调用成功!\n\n";
if (empty($result)) {
echo "⚠️ 未获取到任何数据\n";
echo "可能原因:\n";
echo " 1. 聚水潭系统中没有商品\n";
echo " 2. 时间范围内没有修改过的商品\n\n";
} else {
echo "📦 获取到 " . count($result) . " 条商品数据\n\n";
$index = 1;
foreach ($result as $product) {
echo str_repeat("=", 60) . "\n";
echo "📋 商品 #" . $index . "\n";
echo str_repeat("-", 60) . "\n";
$index++;
echo " SPU ID: " . ($product['i_id'] ?? 'N/A') . "\n";
echo " 商品名称: " . ($product['name'] ?? 'N/A') . "\n";
echo " 售价: " . ($product['s_price'] ?? 'N/A') . "\n";
echo " 市场价: " . ($product['market_price'] ?? 'N/A') . "\n";
echo " 成本价: " . ($product['c_price'] ?? 'N/A') . "\n";
echo " 图片: " . ($product['pic'] ?? 'N/A') . "\n";
if (isset($product['skus']) && is_array($product['skus'])) {
echo " SKU数量: " . count($product['skus']) . "\n";
$skuIndex = 1;
foreach ($product['skus'] as $sku) {
echo " SKU #" . $skuIndex . ":\n";
$skuIndex++;
echo " - SKU ID: " . ($sku['sku_id'] ?? 'N/A') . "\n";
echo " - 规格: " . ($sku['properties_value'] ?? 'N/A') . "\n";
echo " - 售价: " . ($sku['sale_price'] ?? 'N/A') . "\n";
echo " - 市场价: " . ($sku['market_price'] ?? 'N/A') . "\n";
echo " - 成本价: " . ($sku['cost_price'] ?? 'N/A') . "\n";
}
}
echo "\n";
}
echo str_repeat("=", 60) . "\n";
echo "完整JSON数据:\n";
echo str_repeat("-", 60) . "\n";
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n";
}
} catch (\Throwable $e) {
echo "❌ getProductListStand失败: " . $e->getMessage() . "\n";
echo "错误文件: " . $e->getFile() . ":" . $e->getLine() . "\n\n";
}
exit(0);
}
echo "正在调用HaichaoJstServices::getProductListKuan...\n";
echo "SPU: " . $spu . "\n\n";
$result = $haichaoJst->getProductListKuan($spu);
echo "✅ API调用成功!\n\n";
if (empty($result)) {
echo "⚠️ 未获取到任何数据\n\n";
} else {
echo "📦 获取到的数据:\n\n";
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n\n";
if (isset($result['code'])) {
echo "响应码: " . $result['code'] . "\n";
}
if (isset($result['msg'])) {
echo "响应消息: " . $result['msg'] . "\n";
}
if (isset($result['datas'])) {
echo "商品数量: " . count($result['datas']) . "\n";
if (!empty($result['datas'])) {
echo "\n📋 第一个商品信息:\n";
$firstProduct = $result['datas'][0];
echo " - SPU ID: " . ($firstProduct['i_id'] ?? 'N/A') . "\n";
echo " - 商品名称: " . ($firstProduct['name'] ?? 'N/A') . "\n";
echo " - 售价: " . ($firstProduct['s_price'] ?? 'N/A') . "\n";
echo " - 市场价: " . ($firstProduct['market_price'] ?? 'N/A') . "\n";
echo " - 成本价: " . ($firstProduct['c_price'] ?? 'N/A') . "\n";
if (isset($firstProduct['skus']) && is_array($firstProduct['skus'])) {
echo " - SKU数量: " . count($firstProduct['skus']) . "\n";
if (!empty($firstProduct['skus'])) {
echo "\n 📋 第一个SKU:\n";
$firstSku = $firstProduct['skus'][0];
echo " - SKU ID: " . ($firstSku['sku_id'] ?? 'N/A') . "\n";
echo " - SKU名称: " . ($firstSku['properties_value'] ?? 'N/A') . "\n";
echo " - 售价: " . ($firstSku['sale_price'] ?? 'N/A') . "\n";
}
}
}
}
}
echo "\n========================================\n";
echo "测试完成\n";
echo "========================================\n";
} catch (\Throwable $e) {
echo "\n❌ 发生错误!\n";
echo "错误信息: " . $e->getMessage() . "\n";
echo "错误文件: " . $e->getFile() . ":" . $e->getLine() . "\n";
echo "\n堆栈跟踪:\n" . $e->getTraceAsString() . "\n";
exit(1);
}