通用Google Wallet凭证无法显示自定义文本字段问题求助
问题解决方法
1. 修正Class中fieldPath的语法错误
你在cardTemplateOverride里的fieldPath写法不符合Google Wallet的语法规范,无法正确定位到textModulesData中指定id的元素。需要用过滤表达式匹配数组元素,再提取目标字段。
修改后的createPassClass代码:
async function createPassClass(req, res) { let genericClass = { 'id': `${classId}`, 'classTemplateInfo': { 'cardTemplateOverride': { 'cardRowTemplateInfos': [ { 'twoItems': { 'startItem': { 'firstValue': { 'fields': [ { // 匹配id为points的textModule,提取body内容 'fieldPath': 'object.textModulesData.(id == "points").body' } ] } }, 'endItem': { 'firstValue': { 'fields': [ { // 匹配id为contacts的textModule,提取body内容 'fieldPath': 'object.textModulesData.(id == "contacts").body' } ] } } } } ] }, }, }; // 补充调用Google Wallet API创建Class的逻辑,如wallet.genericClasses.create }
2. 确保Pass Object关联到对应Class
你的createPassObject代码未指定classId,导致凭证对象无法绑定到自定义模板类,配置的模板自然不会生效。需要在genericObject中添加关联字段:
修改后的createPassObject代码:
async function createPassObject(req, res) { let objectSuffix = `${req.body.email.replace(/[^\w.-]/g, '_')}`; let objectId = `${issuerId}.${objectSuffix}`; let genericObject = { 'id': objectId, // 必须指定对象ID 'classId': `${classId}`, // 关联到已创建的Class 'cardTitle': { 'defaultValue': { 'language': 'en', 'value': 'Google I/O \'22' } }, 'textModulesData': [ { 'header': 'POINTS', 'body': '1234', 'id': 'points' }, { 'header': 'CONTACTS', 'body': '20', 'id': 'contacts' } ] }; // 补充调用Google Wallet API创建Object的逻辑,如wallet.genericObjects.create }
3. 验证API调用完整性
确认两个函数中都完成了完整的API调用流程:
- 创建Class时,调用
wallet.genericClasses.create接口并传入genericClass - 创建Object时,调用
wallet.genericObjects.create接口并传入genericObject - 检查OAuth 2.0令牌、服务账号权限等配置是否正确
内容的提问来源于stack exchange,提问作者Rooshan Ali Khan
相关产品推荐
相关产品推荐

