Shopify函数日志与GraphQL查询中元字段不一致问题
问题描述
通过Admin GraphQL API为旗下某店铺添加paymentCustomizations元字段,GraphQL查询可正常获取提交的变更数据,但Shopify函数日志中这些元字段却显示为null:
- 该店铺的支付定制函数已添加并激活,函数日志无报错信息
- 仅该单个店铺出现此问题,其余所有店铺运行正常
- 疑问:是否存在其他应用或脚本修改了扩展函数
run.js中接收的元字段?
设置元字段的Mutation
metafieldsSet(metafields: [ { ownerId: "${ownerId}" namespace: "${namespace}" key: "${key}" value: ${JSON.stringify(JSON.stringify(value))} type: "json" } ]) { metafields { id } userErrors { message } }
查询元字段的Query
query { paymentCustomizations(first: 10) { edges { node { id functionId title enabled metafields(first: 10) { edges { node { id key namespace value } } } } } } }
run.graphql
.. ... paymentCustomization { conditionsMetafield: metafield( namespace: "paymentCustomizations" key: "customConditionsPaymentMapping" ) { value } } .. ...
run.js
export function run(input) { // 在此input中获取到的元字段为null,该input会被记录在Shopify函数日志中 let configuration = JSON.parse( input?.paymentCustomization?.conditionsMetafield?.value?? "{}" ); const rules = configuration?.paymentCustomizationConfig || []; }
排查方向
元字段关联ID不匹配
检查Mutation中的ownerId是否准确指向当前激活的支付定制函数ID。即便查询能返回数据,若ownerId对应错误的paymentCustomization实例,函数运行时就无法读取到正确的元字段。命名空间/键名大小写不一致
确认run.graphql中的namespace和key与Mutation中设置的完全一致(包括大小写)。Shopify元字段的命名空间和键名是区分大小写的,细微差异都会导致读取失败。第三方应用/脚本干扰
- 检查该店铺是否安装了其他操作支付定制元字段的应用,部分应用可能在后台修改或移除元字段数据;
- 查看店铺脚本编辑器中是否有自定义脚本,这类脚本可能在函数执行前修改元字段的读取逻辑。
数据序列化问题
Mutation中使用了JSON.stringify(JSON.stringify(value))进行双重序列化,虽然查询能返回数据,但函数解析时可能出现隐性异常。尝试改为单次序列化:value: ${JSON.stringify(value)},重新设置元字段后测试。函数版本缓存
确认该店铺的支付定制函数为最新版本,旧版本的run.graphql可能存在元字段读取逻辑错误,重新部署函数到该店铺验证。
内容的提问来源于stack exchange,提问作者Raghu Chahar
相关产品推荐
相关产品推荐

