Commerce.js客户端报错Invalid public key,已选用公钥仍无法解决
报错原因分析
- 环境变量未正确加载:React 运行时未成功读取到.env文件内配置的公钥值
- 环境变量配置不符合规范:非Create React App脚手架创建的项目(如Vite、自定义Webpack项目)默认不会自动暴露
REACT_APP_前缀的环境变量到前端运行时 - 公钥存在冗余字符:复制粘贴密钥时带入了空格、换行符、额外引号等隐形冗余字符,导致实际传入SDK的密钥和正确值不符
- SDK版本不兼容:旧版
@chec/commerce.js对新格式的公钥识别存在兼容问题 - 密钥类型混淆:误将私钥(sk开头)当做公钥传入,不过你当前使用的是
pk_test开头的测试公钥,该概率较低
排查解决步骤
- 先验证环境变量是否读取成功,在commerce.js中增加打印逻辑确认实际读取到的公钥值:
import Commerce from '@chec/commerce.js'; // 新增打印逻辑,启动项目后在浏览器控制台查看输出 console.log('读取到的公钥值:', process.env.REACT_APP_CHEC_PUBLIC_KEY); export const commerce = new Commerce(process.env.REACT_APP_CHEC_PUBLIC_KEY, true);
如果控制台输出为undefined,说明环境变量未加载成功,继续往下排查。
- 检查环境变量文件配置
- 确认
.env文件存放在项目根目录(和package.json同级,不要放在src文件夹内) - 修改
.env文件配置后,必须重启React开发服务,新的环境变量才会生效 - 如果你使用的是Vite脚手架,需要将环境变量前缀修改为
VITE_,读取方式调整为import.meta.env.VITE_CHEC_PUBLIC_KEY - 不要给环境变量值加额外引号,引号会被识别为值的一部分,直接写
REACT_APP_CHEC_PUBLIC_KEY=pk_test_xxxx即可
- 排除环境变量问题
临时用硬编码的方式传入公钥测试,如果不报错就可以确定是环境变量加载的问题:
// 临时硬编码测试,验证密钥本身是否有效 export const commerce = new Commerce('pk_test_32015299720e5050ac997c8e08a77c1a0e24bf21215b7', true);
- 升级SDK版本
如果硬编码密钥仍然报错,升级Commerce.js到最新版本即可解决兼容问题:npm install @chec/commerce.js@latest
或使用yarn:yarn add @chec/commerce.js@latest
内容的提问来源于stack exchange,提问作者suga sunshie
相关产品推荐
相关产品推荐

