swift - заполняет STPPaymentCardTextField программно

Я занимаюсь разработкой приложения и использую Stripe SDK и Card.io SDK. То, что я хочу, это заполнить STPPaymentCardTextField Номер карты, месяц истечения и год с Card.io отсканированная стоимость кредитной карты. Я старался:

var paymentField = STPPaymentCardTextField()

func userDidProvideCreditCardInfo(cardInfo: CardIOCreditCardInfo!, inPaymentViewController paymentViewController: CardIOPaymentViewController!) {
    var scanViewController: CardIOPaymentViewController = CardIOPaymentViewController(paymentDelegate: self)
    paymentField.cardNumber = cardInfo.cardNumber
    paymentField.expirationMonth = cardInfo.expiryMonth
    paymentField.expirationYear = cardInfo.expiryYear

    paymentViewController.dismissViewControllerAnimated(true, completion: nil)
}

У меня ошибка Cannot assign to the result of this expression для каждого paymentField добавить. Как вы думаете, что я могу сделать с этим? Спасибо!

1 ответ

Отсюда я получил более чистый ответ

let cardParams = STPCardParams()
cardParams.number = "4242424242424242"
cardParams.expMonth = 07 // this data type is UInt and *not* Int
cardParams.expYear = 19 // this data type is UInt and *not* Int
cardParams.cvc = "123"

let paymentField = STPPaymentCardTextField()
paymentField.cardParams = cardParams //the paymentTextField will now show the cc #, exp, and cvc from above

Вы можете получить другие номера тестовых карт, такие как Mastercard, Amex и Discover, здесь, в Stripe.

Поля STPPaymentCardTextField доступны только для чтения, и вы можете только "получить" эти свойства.

STPPaymentCardTextField используется для сбора данных кредитной карты. В вашем случае вы уже делаете это с помощью CardIOCreditCardInfo. Получив данные кредитной карты, вы можете собрать данные в объект STPCardParams.

После того как вы собрали номер карты, срок ее действия и CVC, упакуйте их в объект STPCardParams и вызовите метод createTokenWithCard: для класса STPAPIClient.

Теперь ваш метод может выглядеть так...

func userDidProvideCreditCardInfo(cardInfo: CardIOCreditCardInfo!, inPaymentViewController paymentViewController: CardIOPaymentViewController!) {

        let card: STPCardParams = STPCardParams()
        card.number = info.cardNumber
        card.expMonth = info.expiryMonth
        card.expYear = info.expiryYear
        card.cvc = info.cvv

        STPAPIClient.sharedClient().createTokenWithCard(card, completion: {(result, error) -> Void in
            if error == nil {
                // Either save the card token with your customer data or charge them right away
                //createBackendChargeWithToken(token)
            }
            else {
                //handleError(error)
            }
        })
    }
    paymentViewController?.dismissViewControllerAnimated(true, completion: nil)
}

Обновление Может быть правильным ответом на ваш вопрос.

import Stripe
class PaymentCardEditorField: STPPaymentCardTextField {
    func setExistingCard(card: STPCardParams) {
        replaceField("numberField", withValue: card.number!)
        replaceField("expirationField", withValue: String(format: "%02d/%02d", card.expMonth, (card.expYear % 100)))
        replaceField("cvcField", withValue: card.cvc!)
    }

    func replaceField(memberName: String, withValue value: String) {
        let field = self.valueForKey(memberName) as! UITextField
        let delegate = self as! UITextFieldDelegate
        let len = field.text?.characters.count
        if delegate.textField?(field, shouldChangeCharactersInRange: NSMakeRange(0, len!), replacementString: value) ?? false {
        field.text = value
        }
    }
}

И затем вызвать setExistingCard

func userDidProvideCreditCardInfo(cardInfo: CardIOCreditCardInfo!, inPaymentViewController paymentViewController: CardIOPaymentViewController!) {

    let card: STPCardParams = STPCardParams()
    card.number = info.cardNumber
    card.expMonth = info.expiryMonth
    card.expYear = info.expiryYear
    card.cvc = info.cvv
    paymentTextField.setExistingCard(card)
}

Работает как шарм.

Следуйте этой теме для возможного обновления Stripe SDK для встроенной поддержки в будущем.

https://github.com/stripe/stripe-ios/issues/127

Другие вопросы по тегам