Не сохраняется способ оплаты Stripe — IOS и Firebase

#ios #swift #firebase #stripe-payments #payment

#iOS #swift #firebase #stripe-платежи #оплата

Вопрос:

Я пытаюсь сохранить кредитную карту для клиента stripe, однако, когда я внедряю тестовую карту, предоставленную stripe (42424242 …), я получаю сообщение: «Ваша карта была отклонена».

Это то, что я пытался решить проблему:

  1. Убедился, что у меня есть тестовые ключи вместо действующих
  2. Пробовал с международными кредитными картами (поскольку я нахожусь в Мексике)
  3. Убедился, что получаю эфемерный ключ
  4. Попробовал использовать настоящую кредитную карту, и я все равно получил сообщение «Ваша карта отклонена», даже если я ничего не прошу списывать, а просто ввожу кредитную карту

Примечание: В руководстве, которому я следую, использовался метод с именем .createCardSources = true , однако я считаю, что он обесценился.

Это моя функция:

 func setupStripeConfig() {
        //2.) Create stripe payment configuration
        let config = STPPaymentConfiguration.shared()
        
        #warning(".createCard sources not appearing")
//        config.createCardSources --> Doesn't show
        config.requiredBillingAddressFields = .none
        
        
        //1.)we need that customer context found in Stripe Api
        //this will invoke the cloud function, generate the ephemeral key, pass it back and this customer context class will prefetch the stripe customer's information from it's stripe object (say saved credit cards)
        let customerContext = STPCustomerContext(keyProvider: StripeApi)
        
        //3.)now we need to create stripe payment context
        paymentContext = STPPaymentContext(customerContext: customerContext, configuration: config, theme: .default())
        
        //4.) Set payment context, payment amount
        paymentContext.paymentAmount = self.stripeTotal!
        
        //5.)Set payment context amp; delegate
        paymentContext.delegate = self
        paymentContext.hostViewController = self
        
    } 
  

Я получаю эфемерный ключ, так что это не должно быть проблемой, однако я также помещу код здесь:

 import Foundation
import Stripe
import FirebaseFunctions

let StripeApi = _StripeApi()


class _StripeApi: NSObject, STPEphemeralKeyProvider {
    
    
    func createCustomerKey(withAPIVersion apiVersion: String, completion: @escaping STPJSONResponseCompletionBlock) {
        
        //data object
        let data = [
            "stripe_version": apiVersion,
            "customer_id": UserService.user.stripeId
        ]
        
        print("API VERSION: (apiVersion)")
        print("CUSTOMER ID: (UserService.user.stripeId)")
        
        //This will invoke our cloud function
        //you need to create a data object and then pass it to this function
        Functions.functions().httpsCallable("createEphemeralKey").call(data) { (result, error) in
            //ephemeral key should be found in result
            
            if let error = error {
                print("Error in StripeApi.swift (error)")
                //if we have an error we will need to pass completion (nil for json) and error for error
                completion(nil,error)
                return
            }
            guard let key = result?.data as? [String: Any] else {
                completion(nil,nil)
                return
            }
            
            //if we do get the key, we'll pass it over in completion and put nil for error
            completion(key,nil)
        }
    }  
}
  

Комментарии:

1. Причина, по которой «Ваша карта была отклонена», очень проста. Вы не можете использовать любую карту, которую пытаетесь использовать. Stripe предоставляет тестовые карты здесь: stripe.com/docs/testing#cards

2. Я использовал эти тестовые карты. Я использовал 42424242

3. Я бы посоветовал связаться с Stripe через support.stripe.com/email затем, поскольку они могут разобраться, что именно делают ваши запросы и почему вы видите эту ошибку.

4. Но разве это как-то не связано с моим кодом?

5. Исходя из ошибки, которую вы описываете, это маловероятно. Если вы можете найти более длинную трассировку стека, знаете ли вы, откуда возникает эта ошибка?