Облачная функция перестает выполняться - PullRequest
0 голосов
/ 07 июня 2019

Итак, я создал функцию, которая будет обрабатывать уведомления о мгновенных платежах Paypal (IPN). Все идет хорошо при получении уведомления, и я также получил сообщение «ПРОВЕРЕНО» при запросе обратно в Paypal для проверки. Проблема в том, что облачная функция не выполняет или прекращает выполнение внутри функции обратного вызова проверки.

exports.ipnHandler = functions.https.onRequest((req, res) => {
  console.log("IPN Notification Event Received");

  if (req.method !== "POST") {
      console.error("Request method not allowed.");
      res.status(405).send("Method Not Allowed");
  } else {
      // Return empty 200 response to acknowledge IPN post success.
      console.log("IPN Notification Event received successfully.");

      // JSON object of the IPN message consisting of transaction details.
      let ipnTransactionMessage = req.body;
      // Convert JSON ipn data to a query string since Google Cloud Function does not expose raw request data.
      let formUrlEncodedBody = querystring.stringify(ipnTransactionMessage);
      // Build the body of the verification post message by prefixing 'cmd=_notify-validate'.
      let verificationBody = `cmd=_notify-validate&${formUrlEncodedBody}`;

      console.log(`Verifying IPN: ${verificationBody}`);

      let options = {
        method: "POST",
        url: getPaypalURI(),
        body: verificationBody,
      };

    requestPromise(options)
        .then(body => {
            // This will log "VERIFIED"
            console.log(body);   // Cloud function stops here

            if (body === "VERIFIED") {
                console.log("Manage user subscription");

                const transactionType = ipnTransactionMessage.txn_type;
                const invoice = ipnTransactionMessage.invoice;
                const docRef = firestore.collection("users");

                console.log("Transaction type: " + transactionType);
                console.log("Invoice " + invoice);

                if (transactionType === "subscr_payment") {
                    console.log("About to subscribe user: " + invoice);
                    return docRef.where("invoice", "==", invoice).get();
                }
            }

            return console.log("Request completed");
        })
        .then(snapshots => {
            return console.log("Return snapshots " + snapshots);
        })
        .catch(error => {
            console.log(error);
        })

    res.status(200).end();
}

Он начинает плохо себя вести, когда я добавляю эту строку return docRef.where("invoice", "==", invoice).get(); Возможно, он вернет данные снимка в обратном вызове ниже.

.then(snapshots => {
        return console.log("Return snapshots " + snapshots);
    })

1 Ответ

0 голосов
/ 07 июня 2019

Я решил проблему. Кажется, что функция достигла тайм-аута, который по умолчанию составляет 60 секунд. Я просто изменил время ожидания до 5 минут.

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