Chrome应用内支付问题:获取SKU时出现INVALID_RESPONSE_ERROR错误
排查Chrome扩展内购
INVALID_RESPONSE_ERROR的解决办法 我帮你梳理下调用google.payments.inapp.getSkuDetails时出现INVALID_RESPONSE_ERROR的常见原因和修复方案,结合Chrome内购的实践经验,大概率是以下某个环节出了问题:
SKU配置与扩展身份不匹配
- 先确认你在Chrome Web Store开发者后台配置的SKU已经正式发布(prod环境只认已发布的SKU,草稿状态完全不可见)。如果是测试阶段,建议先切换到沙箱环境
env: 'sandbox',同时后台要配置对应的测试SKU。 - 核对扩展ID:你本地开发用的扩展ID(在
chrome://extensions页面查看)必须和Web Store后台绑定内购的扩展ID完全一致。哪怕是私有测试扩展,也得先上传到Web Store并发布(可以设置为仅自己可见)。 - 检查SKU命名格式:确保SKU符合
sku_xxxx的规范,没有拼写错误或者特殊字符。
- 先确认你在Chrome Web Store开发者后台配置的SKU已经正式发布(prod环境只认已发布的SKU,草稿状态完全不可见)。如果是测试阶段,建议先切换到沙箱环境
buy.js加载方式错误
- 必须使用官方提供的CDN加载buy.js,不能本地托管或用第三方源:正式环境用
https://payments.google.com/inapp/buy.js,沙箱用https://sandbox.google.com/checkout/inapp/buy.js。 - 要等buy.js完全加载后再调用API,避免因脚本未就绪导致的错误。可以用动态加载的方式确保时机正确:
const loadBuyScript = () => { return new Promise((resolve) => { const script = document.createElement('script'); script.src = 'https://payments.google.com/inapp/buy.js'; script.onload = resolve; document.body.appendChild(script); }); }; // 加载完成后调用接口 loadBuyScript().then(() => { google.payments.inapp.getSkuDetails({ parameters: { env: 'prod' }, success: (r) => console.log(r), failure: (err) => console.error('Error:', err) }); });
- 必须使用官方提供的CDN加载buy.js,不能本地托管或用第三方源:正式环境用
权限与环境配置缺失
- 扩展的
manifest.json必须添加必要的权限:{ "permissions": [ "https://*.google.com/", "identity" ] } - 确保当前Chrome用户已登录Google账号,测试环境下还要把该账号添加到后台的测试用户列表中。
- 扩展的
深挖错误细节
- 在failure回调中打印更完整的错误信息,往往能找到具体原因:
failure: (err) => { console.log('Error Code:', err.errorCode); console.log('Error Message:', err.errorMessage); console.log('Error Details:', err.details); } - 如果是订阅类SKU,可以尝试在参数中明确指定
skuType: 'subscription',避免默认逻辑遗漏类型。
- 在failure回调中打印更完整的错误信息,往往能找到具体原因:
内容的提问来源于stack exchange,提问作者haberdasher
相关产品推荐
相关产品推荐

