Облачная функция Firebase всегда возвращает ноль - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь использовать следующую функцию для взаимодействия с Stripe API - похоже, она работает нормально, так как объект key правильно зарегистрирован в консоли и выглядит как положено.

exports.createEphemeralKey = functions.https.onCall((data,context) => {
  const stripe_version = data.api_version;
  const customerId = data.customer_id;
  if (!stripe_version) {
    throw new functions.https.HttpsError('missing-stripe-version','The stripe version has not been provided.');
  }
  if (customerId.length === 0) {
    throw new functions.https.HttpsError('missing-customerID','The customer ID has not been provided.');
  }
  return stripe.ephemeralKeys.create(
      {customer: customerId},
      {stripe_version: stripe_version}
  ).then((key) => {
    console.log(key);
    return key;
  }).catch((err) => {
      console.log(err);
      throw new functions.https.HttpsError('stripe-error', err);
  });
});

Однако, когда я вызываю эту функцию из моего приложения Swift для iOS, result?.data всегда равен нулю.

let funcParams = ["api_version": apiVersion, "customer_id": "......"]
    functions.httpsCallable("createEphemeralKey").call(funcParams) { (result, error) in
        if let error = error as NSError? {
            print(error)
            completion(nil,error)
        }
        if let json = result?.data as? [String: AnyObject] {
            print("success")
            print(json)
            completion(json, nil)
        } else {
            print("fail")
            print(result?.data)
        }
    }

1 Ответ

0 голосов
/ 24 сентября 2018

Вероятно, это потому, что вы не возвращаете «данные, которые могут быть закодированы в JSON» (см. doc ).Должно работать следующее:

....
).then((key) => {
  console.log(key);
  return {key: key};
})
....
...