Files
MiraviaConnector/platform-middleware-master/src/helper.php
Miravia Connector Bot 752600f337 Fix image upload structure for Miravia API compliance
🔧 Bug Fixes:
- Fixed product image structure to match Miravia API requirements
- Updated MiraviaProduct.php getData() method to wrap images in {"Image": [...]} format
- Updated MiraviaCombination.php getData() method to wrap SKU images properly
- Resolved error "[4224] The Main image of the product is required"

📋 Changes:
- Modified getData() methods to transform flat image arrays to nested structure
- Product images: images[] → Images: {"Image": [...]}
- SKU images: images[] → Images: {"Image": [...]}
- Maintains backward compatibility for empty image arrays

🎯 Impact:
- Product uploads will now pass Miravia's image validation
- Both product-level and SKU-level images properly formatted
- Complies with official Miravia API documentation structure

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-21 11:34:59 +02:00

199 lines
6.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Created by Sweeper PhpStorm.
* Author: Sweeper <wili.lixiang@gmail.com>
* DateTime: 2024/2/26 10:50
*/
namespace Sweeper\PlatformMiddleware;
/** 定义包根目录路径 */
define("SWEEPER_PLATFORM_MIDDLEWARE_PACKAGE_ROOT_PATH", dirname(__DIR__));
if (!function_exists('camelize')) {
/**
* 下划线转驼峰
* 思路:
* step1.原字符串转小写,原字符串中的分隔符用空格替换,在字符串开头加上分隔符
* step2.将字符串中每个单词的首字母转换为大写,再去空格,去字符串首部附加的分隔符.
*/
function camelize($uncamelized_words, $separator = '_'): string
{
return ltrim(str_replace(' ', '', ucwords($separator . str_replace($separator, ' ', strtolower($uncamelized_words)))), $separator);
}
}
if (!function_exists('un_camelize')) {
/**
* 驼峰命名转下划线命名
* 思路:
* 小写和大写紧挨一起的地方,加上分隔符,然后全部转小写
*/
function un_camelize($camelCaps, $separator = '_'): string
{
return strtolower(preg_replace('/([a-z])([A-Z])/', '$1' . $separator . '$2', $camelCaps));
}
}
if (!function_exists('json_last_error_msg')) {
/**
* JSON 最后一个错误消息
* User: Sweeper
* Time: 2023/2/24 12:31
* json_last_error_msg(): string 成功则返回错误信息,如果没有错误产生则返回 "No error" 。
* @return string
*/
function json_last_error_msg(): string
{
static $ERRORS = [
JSON_ERROR_NONE => '',// No error
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)',
JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
JSON_ERROR_SYNTAX => 'Syntax error',
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded'
];
$error = json_last_error();
return $ERRORS[$error] ?? 'Unknown error';
}
}
if (!function_exists('get_json_last_error')) {
/**
* 返回 JSON 编码解码时最后发生的错误。
* User: Sweeper
* Time: 2023/2/24 13:44
* @return string
*/
function get_json_last_error(): string
{
switch (json_last_error()) {
case JSON_ERROR_NONE:
$error = '';// No error
break;
case JSON_ERROR_DEPTH:
$error = ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
$error = ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
$error = ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
$error = ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
$error = ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
$error = ' - Unknown error';
break;
}
return $error;
}
}
if (!function_exists('generate_random_string')) {
/**
* 生成随机字符串
* User: Sweeper
* Time: 2023/3/21 16:08
* @param int $length
* @return string
*/
function generate_random_string(int $length = 5): string
{
$arr = array_merge(range('a', 'b'), range('A', 'B'), range('0', '9'));
shuffle($arr);
$arr = array_flip($arr);
$arr = array_rand($arr, $length);
return implode('', $arr);
}
}
if (!function_exists('get_microtime')) {
/**
* 获取毫秒时间戳
* User: Sweeper
* Time: 2023/3/21 16:10
* @return float
*/
function get_microtime(): float
{
[$msec, $sec] = explode(' ', microtime());
return (float)sprintf('%.0f', ((float)$msec + (float)$sec) * 1000);
}
}
if (!function_exists('mb_detect_convert_encoding')) {
/**
* 将 string 类型 str 的字符编码从可选的 $fromEncoding 转换到 $toEncoding
* Author: Sweeper <wili.lixiang@gmail.com>
* DateTime: 2023/10/25 17:32
* @param string $str 要编码的 string。
* @param string $toEncoding 要转换成的编码类型。
* @param string|array|null $fromEncoding 在转换前通过字符代码名称来指定。它可以是一个 array 也可以是逗号分隔的枚举列表。 如果没有提供 from_encoding则会使用内部internal编码。
* @return string
*/
function mb_detect_convert_encoding(string $str, string $toEncoding = 'UTF-8', $fromEncoding = null): string
{
return mb_convert_encoding($str, $toEncoding, $fromEncoding ?: mb_detect_encoding($str));
}
}
if (!function_exists('vendor_path')) {
/**
* vendor 目录路径
* Author: Sweeper <wili.lixiang@gmail.com>
* DateTime: 2024/2/27 13:32
* @return string
*/
function vendor_path(): string
{
$vendorPath = dirname(__DIR__, 4) . '/vendor';
return is_dir($vendorPath) ? $vendorPath : SWEEPER_PLATFORM_MIDDLEWARE_PACKAGE_ROOT_PATH . '/vendor';
}
}
if (!function_exists('package_path')) {
/**
* package 目录路径
* Author: Sweeper <wili.lixiang@gmail.com>
* DateTime: 2024/2/27 13:32
* @param string $packageName
* @return string
*/
function package_path(string $packageName = 'sweeper/platform-middleware'): string
{
$packagePath = vendor_path() . '/' . trim($packageName, '/\\');
if (empty($packageName)) {
return SWEEPER_PLATFORM_MIDDLEWARE_PACKAGE_ROOT_PATH;
}
return is_dir($packagePath) ? $packagePath : SWEEPER_PLATFORM_MIDDLEWARE_PACKAGE_ROOT_PATH;
}
}
if (!function_exists('root_path')) {
/**
* 根目录路径
* Author: Sweeper <wili.lixiang@gmail.com>
* DateTime: 2024/2/27 13:32
* @return string
*/
function root_path(): string
{
return dirname(vendor_path());
}
}