Google Wallet API集成问题:仅显示最后一行模板内容排查
PHP数组键名重复覆盖
把JSON转PHP数组时,若重复给同一键名赋值,会覆盖之前的字段内容。比如构造eventTicket对象时,多次给header键赋值,会导致早先的title等字段被最后一次赋值的dateTime覆盖,最终只剩dateTime.start和ticketNumber。示例错误写法:$eventTicket = []; $eventTicket['header'] = ['title' => '摇滚音乐节门票']; $eventTicket['header'] = ['dateTime' => ['start' => '2024-06-15T20:00:00']]; $eventTicket['ticketNumber'] = 'TK-67890';正确做法是一次性构造完整的子数组,或者通过数组合并来添加字段。
JWT payload结构不符合API规范
Google Wallet对Event Ticket的JWT payload有严格的层级要求,比如eventTicket必须包含在objects数组内,且每个对象需要id、classId等必填字段。如果你的PHP代码生成的payload结构缺失这些关键层级或必填项,API会忽略无法识别的字段,仅保留能匹配的dateTime.start和ticketNumber。调试/输出时的局部查看问题
你可能在查看结果时只输出了数组的最后部分,比如用echo打印数组只会显示Array,或者调试代码里仅打印了最后赋值的字段。要确认完整的JWT结构,建议用json_encode()将PHP数组转为JSON字符串,再查看完整内容;或用print_r()/var_dump()输出整个数组。字段命名大小写不匹配
Google Wallet API的字段区分大小写,比如dateTime.start是正确的命名,但如果写成datetime.start或DateTime.Start,API会无法识别这些错误命名的字段,最终仅保留命名正确的ticketNumber和dateTime.start。
内容的提问来源于stack exchange,提问作者Oliver Witt

