集成Visa Click to Pay按钮时遇API Key无效错误求助
Visa Click to Pay SDK初始化提示“API Key无效”错误排查
我正在网站上集成Visa Click to Pay按钮,但初始化SDK时一直收到“api key invalid”错误。
已完成的集成步骤:
- 引入官方JS SDK脚本:
<script type="text/javascript" src="https://sandbox.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js"></script>
- SDK初始化代码:
V.init({ apikey: '从Visa开发者中心凭证区获取的“API Key”', encryptionKey: '对“Shared Secret”先做base64解码再用私钥解密后的值', settings: { locale: 'en_US', countryCode: 'US', displayName: 'Your Merchant Name' } });
- 绑定支付相关事件:
V.on('payment.success', function (response) { console.log('Payment successful:', response); // 处理支付成功逻辑 }); V.on('payment.error', function (error) { console.error('Payment error:', error); // 处理支付错误逻辑 }); V.on('payment.cancel', function () { console.log('Payment cancelled'); // 处理支付取消逻辑 });
页面加载后,SDK发起的GET https://sandbox.secure.checkout.visa.com/wallet-services-web/merchant请求返回401 Unauthorized,响应体如下:
{ "responseStatus": { "status": 401, "code": "9005", "severity": "ERROR", "message": "Invalid ApiKey", "info": "http://api.visa.com/docs/errors/9005" } }
已尝试的操作:
- 更换Visa开发门户凭证区的不同值作为encryptionKey,结果一致
- 按照以下步骤解密Shared Secret:
# cat encrypted_shared_secret.txt | base64 --decode > decoded_data.bin # openssl pkeyutl -decrypt -in decoded_data.bin -inkey private_key.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 > decrypted_shared_secret.txt
API Key来源确认:已从Visa开发者中心凭证区复制(截图展示复制位置)
请帮忙排查集成方式是否有误或代码存在遗漏。
可能的排查方向
- 确认API Key环境匹配:确保使用的API Key是沙箱(sandbox)环境的,不要和生产环境的凭证混淆,Visa开发者中心会区分沙箱和生产凭证,检查凭证区的环境标签。
- API Key复制完整性:检查复制的API Key是否包含多余空格、换行符,或者遗漏了部分字符,建议手动重新复制一次,避免复制时的格式问题。
- 加密密钥生成正确性:验证解密Shared Secret的步骤是否完全符合Visa文档要求:
- 确认使用的私钥是在Visa开发者中心创建凭证时生成的对应私钥,不要使用其他项目的私钥
- 检查openssl命令的参数是否正确,特别是
rsa_padding_mode:oaep和rsa_oaep_md:sha256这两个参数,确保和Visa要求的填充模式、哈希算法匹配
- 初始化参数名称检查:确认初始化时的参数名是
apikey(全小写),避免拼写错误(比如写成apiKey),Visa SDK对参数名大小写可能有严格要求。 - 域名白名单配置:检查Visa开发者中心是否配置了当前网站的域名白名单,沙箱环境下如果没有配置允许的域名,也可能导致API Key验证失败。
内容的提问来源于stack exchange,提问作者Anton-Ivanov
相关产品推荐
相关产品推荐

