Firebase Firestore + 云功能服务器端验证收据(应用内购买(,最终结果:状态 21002,这意味着:收据属性中的数据格式不正确或丢失。
步骤1(我使用swift将应用内购买收据存储到Firestore中,Firestore数据库自然将其存储为blob
步骤2(一旦收据进入消防商店,云功能就会触发。Firebase函数将收据发送到苹果iTunes商店,但最终结果是:状态21002。
我想在将收据从base64EncodedData转换为Firestore blob时,收据的格式不正确,然后在云功能上检索它。如何获得正确的收据格式,以便将其发送到苹果iTunes商店进行收据验证?
步骤 1 SWIFT 代码:
func sendReceiptToFirestore() {
guard let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
FileManager.default.fileExists(atPath: appStoreReceiptURL.path) else {return}
do {
let rawReceiptData = try Data(contentsOf: appStoreReceiptURL)
let receiptData = rawReceiptData.base64EncodedData()
//Standard way to store receiptData to firestore, i did that but not posting full code here for cleanliness
} catch {}
}
步骤二 云函数代码:
const request = require("request-promise");
exports.verifyReceiptIAP = functions.firestore
.document('userReceiptIAP/{userUid}')
.onWrite((change, context) => {
const receipt = change.after.data().receiptData
const userUid = context.params.userUid
var options = {
method: 'POST',
url: 'https://sandbox.itunes.apple.com/verifyReceipt',
body: ({
"receipt-data" : receipt,
"password" : "8bf2f13bedc6456f97c9323c743a3168"
}),
json: true
};
return request(options).then(function (response) {
console.log(response);
return null
})
});
任何帮助不胜感激
,我需要更改编码方法。改变
let receiptData = rawReceiptData.base64EncodedData()
自
let receiptData = rawReceiptData.base64EncodedString()
如果您想使用 firestore 和云功能进行服务器端收据验证,有问题的示例代码应该会有很大帮助