@@ -565,7 +565,7 @@ private static function resolveCommandArgumentsWithCodec(array $command, int $in
565565 /**
566566 * @param array<string, mixed> $command
567567 * @param array<string, list<string>> $errors
568- * @return array{payload: mixed , codec: string|null}
568+ * @return array{payload: string|null , codec: string|null}
569569 */
570570 private static function resolveCommandPayloadWithCodec (
571571 array $ command ,
@@ -589,10 +589,31 @@ private static function resolveCommandPayloadWithCodec(
589589
590590 if (is_array ($ command [$ field ])) {
591591 try {
592- return PayloadEnvelopeResolver::resolveCommandPayloadWithCodec (
592+ $ resolved = PayloadEnvelopeResolver::resolveCommandPayloadWithCodec (
593593 $ command [$ field ],
594594 "commands. {$ index }. {$ field }" ,
595595 );
596+
597+ $ payload = $ resolved ['payload ' ];
598+
599+ if ($ payload === null || is_string ($ payload )) {
600+ return [
601+ 'payload ' => $ payload ,
602+ 'codec ' => $ resolved ['codec ' ],
603+ ];
604+ }
605+
606+ $ errors ["commands. {$ index }. {$ field }" ] = [
607+ sprintf (
608+ 'Workflow task command field [%s] must be a string or a payload envelope when provided. ' ,
609+ $ field ,
610+ ),
611+ ];
612+
613+ return [
614+ 'payload ' => null ,
615+ 'codec ' => null ,
616+ ];
596617 } catch (ValidationException $ e ) {
597618 foreach ($ e ->errors () as $ errorField => $ messages ) {
598619 $ errors [$ errorField ] = $ messages ;
@@ -605,15 +626,22 @@ private static function resolveCommandPayloadWithCodec(
605626 }
606627 }
607628
629+ $ errors ["commands. {$ index }. {$ field }" ] = [
630+ sprintf (
631+ 'Workflow task command field [%s] must be a string or a payload envelope when provided. ' ,
632+ $ field ,
633+ ),
634+ ];
635+
608636 return [
609- 'payload ' => $ command [ $ field ] ,
637+ 'payload ' => null ,
610638 'codec ' => null ,
611639 ];
612640 }
613641
614642 /**
615643 * @param array<string, mixed> $command
616- * @param array{payload: mixed , codec: string|null} $resolved
644+ * @param array{payload: string|null , codec: string|null} $resolved
617645 * @param array<string, list<string>> $errors
618646 */
619647 private static function payloadCodecForResolvedPayload (
0 commit comments