Kotlin App 中的 Stripe 集成 -- IllegalStateException



我正在将 Stripe for Java 集成到 Kotlin 应用程序中。

这是我写给create a Charge的代码

创建充电功能:

fun createCharge(charge: Charge, testApiKey: String): Charge? {
        //met
        // On your server, grab the Stripe token in the POST parameters submitted by your form. From there, it’s one simple API call to charge the card
        Stripe.apiKey = testApiKey
        try {
            val chargeParams = mutableMapOf<String, Any?>()
            chargeParams["amount"] = charge.amount
            chargeParams["currency"] = charge.currency
            chargeParams["description"] = charge.description
            chargeParams["source"] = charge.source
            chargeParams["customer"] = charge.customer
            chargeParams["receipt_email"] = charge.receiptEmail
            val requestOptions = idempotencyKeySetter()
            val initialMetadata = mutableMapOf<String, String?>()
            initialMetadata["start_date"] = charge.metadata["start_date"]
            initialMetadata["end_date"] = charge.metadata["end_date"]
            chargeParams["metadata"] = initialMetadata
            return Charge.create(chargeParams, requestOptions)
        } catch (e: StripeException) {
            e.printStackTrace()
            return null
        }
    }

以及调用 createCharge 函数的函数:

var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
fun checkCreateCharge() {
        val chargeParams: Charge = Charge()
        chargeParams.amount = 2000
        chargeParams.currency = "usd"
        chargeParams.description = description
        chargeParams.source = PaymentSource { "" }
        chargeParams.customer = customerId
        chargeParams.receiptEmail = testEmail
        chargeParams.metadata["start_date"] = LocalDate.parse("2018-12-31", formatter).toString()
        chargeParams.metadata["end_date"] = LocalDate.parse("2019-03-31", formatter).toString()
        val newCharge: Charge? = createCharge(chargeParams, testApiKey)
    }

当我函数checkCreateCharge运行时,它会发送以下错误: java.lang.IllegalStateException: chargeParams.metadata must not be null

有谁知道为什么会这样?

因此,

虽然这是"可能的",但您绝对不应该这样做。这是一个非常大的安全漏洞。任何拥有您应用程序的人都可以嗅探您的 Stripe 秘密 API 密钥并做任何数量的坏事。例如,他们可以测试信用卡,甚至从您的帐户中取钱。

在 Android 上实施 Stripe 时,您应该只使用可发布的 API 密钥,并且使用该密钥来创建代币/来源。所有其他操作都应在安全的后端利用您的秘密 API 密钥。

最好的我可以

从 API 文档中看出,您正在访问返回 null getMetadata()(因为您从未为其设置过值(。基本上,该行:

chargeParams.metadata["start_date"] = LocalDate.parse("2018-12-31", formatter).toString()

等效于 Java 代码:

chargeParams.getMetadata().put("start_date", LocalDate.parse("2018-12-31", formatter).toString())

在您的情况下getMetadata()为空。我相信将其更改为:

chargeParams.setMetadata(
    mapOf(
        "start_date" to LocalDate.parse("2018-12-31", formatter).toString(),
        "end_date" to LocalDate.parse("2019-03-31", formatter).toString()
    )
)

将解决问题。

最新更新