Firebase Firestore + Cloud Function 服务器端验证应用内购买收据(Swift + NodeJS)
Posted
技术标签:
【中文标题】Firebase Firestore + Cloud Function 服务器端验证应用内购买收据(Swift + NodeJS)【英文标题】:Firebase Firestore + Cloud Function server side verify in-app-purchase receipt(Swift + NodeJS) 【发布时间】:2019-09-10 22:02:04 【问题描述】:Firebase Firestore + 云功能服务器端验证收据(应用内购买),最终结果:状态 21002 表示:收据属性中的数据格式错误或丢失。
step1) 我使用 swift 将应用内购买收据存储到 Firestore,Firestore 数据库自然将其存储为 blob
step2) 一旦收据进入 Firestore,就会触发云功能。 Firebase 函数将收据发送到苹果 iTunes 商店,但最终结果是:状态 21002。
我猜在将收据从 base64EncodedData 转换为 Firestore blob 的过程中,收据的格式不正确,然后在云功能上检索它。如何获得正确的收据格式,以便将其发送到 Apple iTunes 商店进行收据验证?
步骤 1 快速代码:
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
)
);
感谢任何帮助
【问题讨论】:
我还打算使用firebase云功能进行收据验证。你有遇到什么问题吗?任何提示或最佳实践?您能否为此分享完整的代码。谢谢 【参考方案1】:解决了,我需要更改编码方法。 改变
let receiptData = rawReceiptData.base64EncodedData()
到
let receiptData = rawReceiptData.base64EncodedString()
如果您想使用 Firestore 和云功能进行服务器端收据验证,问题示例代码应该会有很大帮助
【讨论】:
"//将receiptData存储到firestore的标准方式,我这样做了,但没有在此处发布完整代码以保持清洁”我在哪里可以找到这种代码?我已经搜索但没有找到任何东西以上是关于Firebase Firestore + Cloud Function 服务器端验证应用内购买收据(Swift + NodeJS)的主要内容,如果未能解决你的问题,请参考以下文章
使用Firestore需要firebase-firestore.js文件吗?
无法在firebase.firestore.CollectionReference中使用Array firebase.firestore.Query为什么?
(firebase.firestore 不是函数)尝试在 Firestore 中创建集合时