Интеграция полос в приложении Kotlin - IllegalStateException - PullRequest
1 голос
/ 10 апреля 2019

Я интегрирую Stripe для 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

Кто-нибудь знает, почему это так?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Насколько я могу судить по документации API, вы получаете доступ к 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()
    )
)

решит проблему.

0 голосов
/ 10 апреля 2019

Так что, пока это «возможно», вы абсолютно не должны этого делать.Это очень большая уязвимость безопасности.Любой, кто имеет ваше приложение, сможет прослушать ваш ключ Stripe Secret API и совершить любое количество плохих действий.Они могут, например, тестировать кредитные карты или даже брать деньги с вашего аккаунта.

При реализации Stripe на Android вы должны только использовать свой публикуемый ключ API и использовать только ключ для создания токенов./ Источники.Все остальные операции должны использовать ваш Секретный ключ API на защищенном бэкэнде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...