アプリではアプリを購入しています。クライアントはGoogle Playから購入をリクエストし、Google Playから受け取ったすべての情報(領収書、ノンス、注文など、署名など)を検証のためにC#で書かれたサーバーに送信します。 私はコード例を使用していますthis postCでのアプリの購入でアンドロイドを確認する#
問題は検証が失敗することです。
注:クライアントは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からのすべての異なるパラメータを取得できないという例外が発生します。 –