【问题标题】:Stripe integration in Kotlin App -- IllegalStateExceptionKotlin 应用程序中的条带集成——IllegalStateException
【发布时间】:2019-09-01 07:39:37
【问题描述】:

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

这是我写给create a Charge的代码

createCharge 函数:

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

有人知道为什么会这样吗?

【问题讨论】:

    标签: java date kotlin stripe-payments illegalstateexception


    【解决方案1】:

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

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

    【讨论】:

    • 我昨天才开始写这篇文章,还没有考虑到它的安全方面。我显然不会在生产中使用此代码。我现在只想create a charge
    【解决方案2】:

    我从 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()
        )
    )
    

    将解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-11
      • 2015-05-11
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      相关资源
      最近更新 更多