Android SDK下能否通过Stripe公钥添加卡片并使用PaymentMethodId支付?
关于Stripe Android SDK添加卡片与PaymentMethod支付的问题
能否用Stripe公钥通过Android SDK添加卡片?
可以。Stripe Android SDK的设计逻辑就是让客户端仅使用**公钥(publishable key,格式为pk_xxx)**来安全收集卡片信息并创建PaymentMethod,全程不需要暴露秘钥。你之前无法完成操作,大概率是集成步骤出错:- 初始化SDK时必须传入公钥,而非秘钥。
- 优先使用Stripe提供的预构建UI组件(如
PaymentSheet或CardInputWidget)收集卡片信息,这类组件会直接处理敏感数据,不会让卡片信息流入你的应用代码。 - 创建PaymentMethod的核心代码示例:
val stripe = Stripe(context, "pk_your_publishable_key") val cardParams = CardParams.Builder() .setNumber("4242424242424242") .setExpiryMonth(12) .setExpiryYear(2025) .setCvc("123") .build() stripe.createPaymentMethod( PaymentMethodCreateParams.create(cardParams), object : ApiResultCallback<PaymentMethod> { override fun onSuccess(result: PaymentMethod) { // 获取有效PaymentMethodId:result.id } override fun onError(e: Exception) { // 处理创建失败逻辑 } } )
用PaymentMethodId实现后续支付是否可行?
完全可行,这也是Stripe推荐的安全支付流程:- 客户端用公钥创建PaymentMethod后,将其
id(如pm_xxx)传给你的后端服务器。 - 后端使用秘钥调用Stripe API(如创建
PaymentIntent),将该PaymentMethod与支付请求关联,返回客户端所需的client_secret。 - 客户端通过Stripe SDK使用
client_secret完成支付确认。
- 客户端用公钥创建PaymentMethod后,将其
秘钥不能在应用层使用的原因
秘钥(sk_xxx)拥有Stripe账户的全部操作权限,一旦在客户端暴露,恶意用户可直接盗用你的账户发起非法交易、篡改数据。因此所有需要秘钥的操作必须放在后端执行,客户端仅负责前端数据收集与支付确认环节。
内容的提问来源于stack exchange,提问作者Bhringesh Biswas
相关产品推荐
相关产品推荐

