Как написать завершение для вызываемой функции для Stripe Apple Pay для родной iOS

#ios #google-cloud-functions #cloud #stripe-payments #applepay

# #iOS #google-cloud-функции #облако #stripe-платежи #applepay

Вопрос:

Я следую документации Stripe Apple Pay. Я не знаю, как передать секрет клиента. Я передаю данные в Stripe. Заказ выполняется, но я не возвращаю информацию обратно в свое приложение, чтобы уведомить пользователя. Ошибка, которую я получаю: ошибка утверждения: secret формат не соответствует ожидаемому секретному форматированию клиента.

Вызываемая функция запрашивает строку в успешном завершении, но я не знаю, как ее извлечь.

Код, приведенный в документации, выглядит следующим образом:

 // Set your secret key. Remember to switch to your live secret key in production!
// See your keys here: https://dashboard.stripe.com/account/apikeys
const stripe = require('stripe')('sk_test_THISISMYSTRIPETESTKEY');

const paymentIntent = await stripe.paymentIntents.create({
  amount: 1099,
  currency: 'usd',
});
const clientSecret = paymentIntent.client_secret
// Pass the client secret to the client
 

В моем index.js для моих облачных функций у меня есть функция createApplePayCharge, показанная ниже:

 exports.createApplePayCharge = functions.https.onCall( async (data, context) => {

    const amount = data.total;
    const customerId = data.customer_id;
    const paymentMethodId = data.payment_method_id;
    const idempotency = data.idempotency;
    const description = data.description;

    const paymentIntent = await stripe.paymentIntents.create({
        payment_method: paymentMethodId,
        customer: customerId,
        amount: amount,
        description: description,
        currency: 'usd',
        confirm: true,
        payment_method_types: ['card']
    }, {
        idempotencyKey: idempotency
    }).then(object => {
        console.log('Charge Success: ', object.id);
        return paymentIntent.client_secret;
    }).catch(err => {
        console.log(err);
        throw new functions.https.HttpsError('internal', ' Unable to create charge: '   err);
    });

});
 

И в моем ProductViewController, где я отображаю кнопку Apple Pay, у меня есть следующая функция:

 func applePayContext(_ context: STPApplePayContext, didCreatePaymentMethod paymentMethod: STPPaymentMethod, paymentInformation: PKPayment, completion: @escaping STPIntentClientSecretCompletionBlock) {

    let idempotency = UUID().uuidString.replacingOccurrences(of: "-", with: "")
    
    let data : [String: Any] = [
        "total" : 30000.00,
        "customer_id" : Api.userService.user.stripeId,
        "payment_method_id" : paymentMethod.stripeId,
        "idempotency" : idempotency,
        "description" : "Mobile Order - Apple Pay"
    ]
    
    Functions.functions().httpsCallable(Firebase_Functions.applePayCharge).call(data) { (result, error) in
        
        if let error = error {
            completion(error.localizedDescription, error)
            return
        }
        
        completion("Need a String here", nil)
        
    }

}
 

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти строку, которая мне нужна для ошибок и успешного завершения в приведенном выше коде, что является причиной того, что приложение либо вылетает, либо не завершает процесс заказа со следующей ошибкой: Ошибка утверждения: secret формат не соответствует ожидаемому секретному форматированию клиента.

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

1. Может быть, это будет result ? Вы пробовали распечатать это?

2. Я пробовал это, но ничего не печатает, поэтому я решил, что моя облачная функция была неправильной, однако в журналах отображается ответ.