如何修改Stripe临时密钥提供者API版本及覆盖EphemeralKeyListener
解决Stripe Ephemeral Key API版本修改问题
我刚好踩过类似的坑,给你一步步拆解解决方案,完全不需要修改Stripe库的源码,官方推荐的方式是从后端配置和客户端适配入手:
1. 核心破局点:后端生成密钥时显式指定API版本
你的控制台默认API版本是2019-03-14,但Android SDK仍用旧版本的根本原因是:如果后端生成临时密钥时没有明确指定API版本,Stripe会默认使用你首次创建账号时的旧版本(或SDK内置的默认版本)。所以第一步要在后端代码里强制锁定API版本:
举个Node.js后端的示例(其他语言逻辑完全一致):
// 初始化Stripe客户端时就指定目标API版本 const stripe = require('stripe')('你的秘钥', { apiVersion: '2019-03-14', }); // 创建临时密钥的接口 app.post('/create-ephemeral-key', async (req, res) => { const customerId = req.body.customerId; // 这里再次显式指定版本,避免全局配置意外失效 const ephemeralKey = await stripe.ephemeralKeys.create( { customer: customerId }, { apiVersion: '2019-03-14' } ); res.json(ephemeralKey); });
这样后端返回的临时密钥会携带2019-03-14的版本标识,客户端就能正确解析。
2. 客户端适配:两种方式覆盖默认版本(针对SampleStore示例)
针对你用的SampleStore代码,有两种简单的修改路径:
方式一:初始化Stripe时直接指定API版本(推荐)
如果你的Stripe Android SDK版本在16.0.0以上,可以直接在初始化Stripe实例时设置目标版本,完全绕过SDK默认的旧版本:
// 替换原来的Stripe初始化代码 StripeConfiguration config = new StripeConfiguration.Builder() .setPublishableKey("你的公钥") .setStripeApiVersion("2019-03-14") // 这里直接设置你需要的版本 .build(); Stripe stripe = new Stripe(getApplicationContext(), config);
之后调用createEphemeralKey时,SDK会自动使用你指定的版本处理请求和响应。
方式二:自定义EphemeralKeyListener直接使用密钥JSON
如果你用的SDK版本较低,或者不想修改初始化逻辑,可以自定义Listener,直接使用后端返回的密钥JSON字符串,不需要依赖SDK的默认版本解析:
stripe.createEphemeralKey(customerId, new EphemeralKeyListener() { @Override public void onEphemeralKeyUpdate(@Nullable String ephemeralKeyJson, @Nullable StripeError error) { if (error != null) { // 处理错误逻辑,比如Toast提示用户 return; } // 直接使用后端返回的ephemeralKeyJson,比如传递给PaymentSession if (ephemeralKeyJson != null) { PaymentSessionConfig sessionConfig = new PaymentSessionConfig.Builder() .build(); mPaymentSession.init(sessionConfig, ephemeralKeyJson, customerId, this); } } @Override public void onRequestHeaders(@NonNull Map<String, String> headers) { // 不需要自定义请求头的话留空即可 } });
这种方式的核心是:后端已经生成了对应版本的密钥,客户端只需要原样使用即可,不用管SDK默认的版本。
3. 关键注意事项
- 后端和客户端的API版本必须严格一致,否则会出现签名不匹配或字段解析错误的问题。
- 绝对不要修改Stripe库的
ApiVersion.java文件,这样会导致后续SDK升级时出现冲突,官方也不会提供任何支持。 - 排查问题时可以先检查后端返回的密钥JSON里的
api_version字段,确认是不是2019-03-14,这是验证配置是否生效的关键。
内容的提问来源于stack exchange,提问作者badjbetty2004
相关产品推荐
相关产品推荐

