[英]How can I send data from javascript to a node.js TCP server?
[英]How can i send receipt data using Swift to Node.js server
我目前正在嘗試驗證iOS中的IAP
用戶訂閱收據。 首先,我發出了一個發布請求,該請求從當前存儲在Bundle.main.appStoreReceiptURL
的收據中獲取收據數據。 我可以在我的服務器中使用該收據數據來驗證收據是否正常運行。 但是,此收據數據字符串在特定於特定用戶的Node
中進行了硬編碼。 我如何能夠將此收據字符串發送到我的服務器以獲取任何收據,具體取決於要驗證的任何用戶。 這是我的Swift代碼和服務器代碼。 蘋果在文檔中說
要檢索收據數據,請使用NSBundle的appStoreReceiptURL方法找到應用程序的收據,然后讀取整個文件。 將此數據發送到服務器-與服務器的所有交互一樣,詳細信息由您負責。
我想獲取收據數據並將其發送到我的服務器。
func getReceipt() {
if let receiptUrl = receiptUrl {
do {
let purchaseReceipt = try Data(contentsOf: receiptUrl)
self.validatePurchaseReceipt(pReceiptData: purchaseReceipt)
} catch {
let receiptRefreshRequest = SKReceiptRefreshRequest(receiptProperties: nil)
receiptRefreshRequest.delegate = self
receiptRefreshRequest.start()
}
}
}
func validatePurchaseReceipt(pReceiptData: Data) {
let base64encodedReceipt = pReceiptData.base64EncodedString()
let secretKey = "myAppstoreConnectSecretKey"
let requestReceiptDict = ["receipt-data": base64encodedReceipt, "password": secretKey]
guard JSONSerialization.isValidJSONObject(requestReceiptDict) else { return }
do {
let data = try JSONSerialization.data(withJSONObject: requestReceiptDict)
let validationString = "https://sandbox.itunes.apple.com/verifyReceipt"
guard let validationUrl = URL(string: validationString) else { return }
let session = URLSession(configuration: .default)
var request = URLRequest(url: validationUrl, cachePolicy: .reloadIgnoringLocalCacheData)
request.httpMethod = "POST"
let task = session.uploadTask(with:request, from: data) { (data, response, error) in
guard let data = data, error == nil else { return }
do {
let purchaseReceiptJSON = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
print("Success retrieved json:\(purchaseReceiptJSON)")
} catch let error {
print(error)
}
}
task.resume()
} catch let error {
print(error)
}
}
這是我的服務器代碼
const express = require('express');
const requirePromise = require('request-promise');
const app = express();
let verificationURL = 'https://sandbox.itunes.apple.com/verifyReceipt';
let secretKey = 'myAppstoreConnectSecretKey';
let receiptData = 'MIIntgYJKoZIhvcNAQcCoIInpzCCJ6MCAQExCzAJBgUrDgMCGgUAMIIXVwYJKoZIhvcNAQcBoIIXSASCFetc'
const options = {
url: verificationURL,
method: 'POST',
headers: {
'User-Agent': 'Request-Promise',
'Content-Type': 'application/x-www-form-urlencoded',
},
json: true
};
options.form = JSON.stringify({
'receipt-data': receiptData,
'password': secretKey
});
requirePromise(options).then((resData) => {
console.log(resData);
return resData;
}).catch(function (error) {
console.log(error);
});
如果要使用服務器來驗證收據(應該這樣做),那么validatePurchaseReceipt
方法應該調用服務器,而不是/verifyReceipt
端點。 收據數據將完全像對requestReceiptDict
一樣傳遞到服務器。
另外, secretKey
應該在服務器上進行硬編碼,而不是在客戶端上的任何地方。
這是一個類似的問題: https : //stackoverflow.com/a/54261816/3166209
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.