簡體   English   中英

Apple IAP 收據驗證 Node.js

[英]Apple IAP Receipt Validation Node.js

我正在嘗試使用這里的Node.js 進行 IAP 收據驗證,但它總是在服務器日志中返回錯誤:“收據數據屬性中的數據格式錯誤。”

有人可以幫助我正確地將 base64 字符串發送到 Node.js 並將其解碼為相同的 base64 字符串以進行收據驗證嗎? 我對 javascript 的經驗為零,並且一直試圖使這個簡單的代碼工作兩天,但無濟於事。

這是我的 Swift 代碼:

let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)         
let receiptString = receiptData.base64EncodedString(options: [])


var request = URLRequest(url: URL(string: "https://us-central1-calendizer-6a849.cloudfunctions.net/receiptValidation")!)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
  request.httpMethod = "POST"

// attach receipt data to a request
request.httpBody = receiptString.data(using: .utf8)

print("httpBody: \(request.httpBody?.base64EncodedString())")

Logs.log("✉️ Receipt Validation -> sending request ...")
let task = URLSession.shared.dataTask(with: request) { data, response, error in
...
}

這是我的 Node.js 代碼(Firebase Cloud Functions):

const functions = require('firebase-functions');
var iap = require('in-app-purchase');


exports.receiptValidation = functions.https.onRequest((request, response) => {

var receipt_try1 = request.body
var receipt_try2 = request.body.toString('base64');
var receipt_try3 = JSON.stringify(receipt);
var receipt_try4 =  new Buffer(request.body.toString(), 'base64')

console.log("receipt: " + receipt_try1)

iap.config({
   applePassword: 'my shared key', 
   test: true
});

iap.setup(function (error) {
  if (error) {
   console.log("Setup error:" + error) // Failed to validate  
}

iap.validate(iap.APPLE, receipt_try1, function (error, appleResponse) {

    if (error) 
    {
      console.log("Validation error:" + error) // Failed to validate  
    }

    if (iap.isValidated(appleResponse)) {

      console.log("successful validation" + appleResponse)
      response.send(appleResponse)

    }

  });

}); 
});

使用json做到了:

let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)

let receiptBase64String = receiptData.base64EncodedString(options: [])
//.replacingOccurrences(of: "+", with: "%2B")


// prepare json data
let json: [String: Any] = ["receipt_string":  receiptBase64String]
let jsonData = try? JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)


// create post request
var request = URLRequest(url: URL(string: "https://us-central1-calendizer-6a849.cloudfunctions.net/receiptValidation")!)
//request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = jsonData

在 Node.js 中簡單地說:

var receipt = request.body.receipt_string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM