在我們的應用程序,我們有一個應用程序內購買。客戶要求從谷歌播放購買,併發送從谷歌播放收到的所有信息(收據,隨機數,訂單等和簽名)到服務器,用C#編寫,以便驗證。 我正在使用代碼示例this post驗證android在應用程序購買c#
問題是驗證失敗。
注:客戶端發送JSON格式的所有數據,對那些工作我們操縱 從谷歌返回的字符串玩像這樣:
在客戶端data = data.replace("\"", "\\\"");
在服務器端
data = data.Replace("\\", "");
被修改:JSON代碼示例中,從應用程序到服務器
{
"data": "{\\\"nonce\\\":3768004882572571381,\\\"orders\\\":[{\\\"notificationId\\\":\\\"android.test.purchased\\\",\\\"packageName\\\":\\\"com.company.appname\\\",\\\"orderId\\\":\\\"transactionId.android.test.purchased\\\",\\\"purchaseState\\\":0,\\\"productId\\\":\\\"android.test.purchased\\\",\\\"purchaseTime\\\":1335790350398}]}",
"signature": "ML6ocr89x3+oT3ZKnQBEE2mNEVj6LHwt+L4I/bnhl+xCpJcjhsAIhfAumeCKwXonJV4Oh9n3Sa7SVT0F7S9XcgE2xGcf2zOZmxHB1wQcyM7fQiGj39Cyb2zuYf3T6Cs1eerDzHaO1teVQZyIhBPJf4cszD/WikSpHcF8zBTvV58FkRVwl2NR4CEvI2FrKFek8Xq2O4CsclCpS5UJorMKRAer9pcSD1BkFzynQJffbaDcRLFZ7i9vABV+GZ/xWxMGPuYYE77GYk8Q2fejgmwiZ3ysY0VjEfGRCpSA==",
"userId": 1
}
編輯:該測試失敗。驗證是一個布爾變量,應該是真
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
RSAParameters rsaKeyInfo = new RSAParameters()
{
Exponent = Convert.FromBase64String(ConfigurationManager.AppSettings["RsaKeyInfo.Exponent"]),
Modulus = Convert.FromBase64String(ConfigurationManager.AppSettings["RsaKeyInfo.Modulus"])
};
rsa.ImportParameters(rsaKeyInfo);
verified = rsa.VerifyData(Encoding.ASCII.GetBytes(data), "SHA1", Convert.FromBase64String(signature));
}
我與Pusher和ActionScript 3.0有同樣的問題。你能提供更多的代碼嗎?我指的是服務器期望和發送的內容,以及應用程序期望和發送的內容。 – goodm
爲什麼你需要三重反斜槓? –
三重反斜槓是因爲它自己帶有引號的字符串,並且如果我從應用程序沒有反斜槓得到它,我會得到一個異常,該格式是錯誤的,我沒有從json中獲取所有不同的參數 –