gpt4 book ai didi

node.js - 在云端功能中使用HTTP请求时读取ECONNRESET错误

转载 作者:行者123 更新时间:2023-12-02 05:52:13 24 4
gpt4 key购买 nike

我正在尝试向Firebase云功能中的App Store verifyReceipt端点发送发布请求。但是,我在云功能日志中收到以下错误:

{ Error: read ECONNRESET
at TLSWrap.onread (net.js:622:25)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',

但是,此错误只是偶然的。它不会每次都发生,因此该功能显然可以正常工作,但是有时出问题了,我不确定是什么。

与此相关的大多数其他解决方案是由于promise错误造成的,但我认为这不是问题所在。以下是完整的功能:
exports.handleSubscriptionIAP_IOS_S2S = functions.https.onRequest((req, res) => {
let data = req.body;

console.log('received ios s2s notification with body:', data);

let base64String = data.unified_receipt.latest_receipt;

let boolStatus = true;
// The user has changed the auto renewal status, store the change
if(data.notification_type === 'DID_CHANGE_RENEWAL_STATUS') {
boolStatus = (data.auto_renew_status === 'true');
}

console.log(data.notification_type);

if(base64String) {
var options = {
method: 'post',
url: 'https://buy.itunes.apple.com/verifyReceipt',
data: ({
"receipt-data" : base64String,
"password" : "***",
"exclude-old-transactions" : true
})
};

var optionsSandbox = {
method: 'post',
url: 'https://sandbox.itunes.apple.com/verifyReceipt',
data: ({
"receipt-data" : base64String,
"password" : "***",
"exclude-old-transactions" : true
})
};

return axios(options)
.then((response) => {
if(response.data.status === 21007) {
return 'handle_sandbox';
}

// Got valid response from Apple, pass down chain
else {
return response;
}
})
.then((response) => {
// Send post request to sandbox endpoint
if(response === 'handle_sandbox') {
return axios(optionsSandbox);
}

// Pass response down chain
else {
return response;
}
})
.then((response) => {
// Handle response from Apple verifyReceipt endpoint here
// Both production and sandbox will end up here
// See here for values in response.data: https://developer.apple.com/documentation/appstorereceipts/responsebody/latest_receipt_info

console.log('received ios s2s notification verify receipt response with body:', response.data);
// Status 0 means request is valid
if(response.data.status === 0) {
// Get receipt info of latest receipt
// Only one object in array is return since we exclude old transactions
let latestReceipt = response.data.latest_receipt_info[0];

// Save receipt into Firestore
return db.collection('appStoreReceipts').doc(latestReceipt.original_transaction_id).set({
latest_receipt_info: latestReceipt,

expiresTimestamp: admin.firestore.Timestamp.fromMillis(parseInt(latestReceipt.expires_date_ms)),
originalTransactionID: latestReceipt.original_transaction_id,

autoRenewStatus: boolStatus,

base64Receipt: response.data.latest_receipt,
}, { merge: true });
}
else {
return null;
}
})
.then((result) => {
if(result) {
return res.status(200).end();
}
else {
return res.status(400).end();
}
})
.catch((error) => {
console.log('an error occured handling the subscription', error);

return res.status(400).end();
})
}
else {
console.log('invalid receipt', data);

return res.status(400).end();
}
});

感谢您提供的任何帮助!

最佳答案

ECONNRESET只是意味着连接的另一端将其关闭。那可能意味着任何事情。除非您在此请求中做得很糟糕,以至于Apple决定关闭连接,否则这可能不是代码的错。如果您认为他们的做法有误,请直接与他们的支持人员联系。

关于node.js - 在云端功能中使用HTTP请求时读取ECONNRESET错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60795226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com