如何通过GraphQL获取Shopify商品数字ID以调用Admin API
解决Shopify GraphQL节点ID转REST数字ID的问题
这确实是Shopify API里常见的小坑——GraphQL返回的全局节点ID和REST API需要的数字资源ID格式不一样,不过有两种简单的方法可以拿到你需要的数字ID:
方法1:查询Product时直接请求legacyResourceId字段
Shopify的GraphQL API里,Product节点本身就提供了legacyResourceId字段,它就是对应REST API的数字ID。你只需要在查询Product的时候把这个字段加进去就行。
比如你的GraphQL查询可以写成这样:
query FetchProduct($productId: ID!) { product(id: $productId) { id # 原来的全局节点ID legacyResourceId # 这里就是你需要的数字格式ID title # 其他你需要的字段 } }
用Buy SDK执行这个查询后,从返回的Product对象里直接取legacyResourceId的值,就能拿到像6243834538这样的数字ID,直接用它调用Admin REST API的元字段接口就不会报400错误了。
方法2:解析已有的全局节点ID
如果你已经拿到了全局节点ID(比如Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzEwMDcyMDgwOTc1),也可以通过解码来提取数字ID。这个全局ID是Base64编码的字符串,解码后格式是gid://shopify/Product/10072080975,最后一段就是数字ID。
在Android里你可以这样写代码解析:
import android.util.Base64 fun getLegacyProductId(globalId: String): String { // 解码Base64字符串 val decodedString = String(Base64.decode(globalId, Base64.DEFAULT)) // 分割字符串取最后一段 return decodedString.split("/").last() }
调用这个方法传入你的全局节点ID,就能得到对应的数字ID了。
两种方法都能解决问题,个人更推荐第一种方法——直接查询字段更可靠,也不用自己处理解码逻辑,避免因为Shopify编码规则变化出问题。
内容的提问来源于stack exchange,提问作者Maxim Alov
相关产品推荐
相关产品推荐

