-<毫秒时间戳>-<四位随机数> * 示例:1234-1730835123456-4821 * * 注意:Moneris 对 orderId 的长度是有限制的(通常不超过 50 字符)。本实现控制在合理长度范围内。 * 如需自定义格式,可在此函数中调整。 * * @param int|string $order_id WooCommerce 订单 ID * @return string 唯一订单 ID 字符串 */ function yoone_moneris_unique_order_id( $order_id ) { // 毫秒级时间戳 $ms = (int) floor( microtime( true ) * 1000 ); // 四位随机数 $rand = mt_rand( 1000, 9999 ); // 仅保留数字和字母,避免特殊字符 $base = preg_replace( '/[^a-zA-Z0-9_-]/', '', (string) $order_id ); // 拼接唯一后缀 $unique = $base . '-' . $ms . '-' . $rand; // 限长保护(最多 50 字符) if ( strlen( $unique ) > 50 ) { // 若过长,截断前半部分(保留后缀) $unique = substr( $base, 0, max( 1, 50 - ( 1 + strlen( (string) $ms ) + 1 + 4 ) ) ) . '-' . $ms . '-' . $rand; } return $unique; }