继续在Apple的VerifyReceipt上获得21002'java.lang.NullPointerException'

时间:2012-06-18 15:18:07

标签: .net ios xamarin.ios in-app-purchase itunesconnect

我一直得到21002&java; Lang.lang.NullPointerException' Apple尝试在沙盒中测试应用内购买时出现的错误。这就是我所做的:

  • 在iTunes Connect中设置应用程序内购买产品。我可以通过StoreKit成功检索它们。
  • 在iTunes Connect中设置测试用户。
  • 应用程序启动,下载可用的应用内购买产品,我触发应用内购买,Apple响应transactionReceipt,我在iPhone上进行base64编码并发送到我的C#/ ASP.NET服务器。 / LI>
  • 服务器将收到的字符串放入JSON(我用NewtonSoft.Json并手动完成)并将JSON发送给Apple:

var json = "{ 'receipt-data': '" + receipt + "'}";

OR:

var json = new JObject(new JProperty("receipt-data", receipt)).ToString();

然后:

var webRequest = System.Net.HttpWebRequest.Create("https://sandbox.itunes.apple.com/verifyReceipt");
webRequest.ContentType = "text/plain";
webRequest.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(receipt);
webRequest.ContentLength = byteArray.Length;
using (var stream = webRequest.GetRequestStream())
{
    stream.Write(byteArray, 0, byteArray.Length);
    stream.Flush();
}

var resp = webRequest.GetResponse();
if (resp != null)
{
    using (var sr = new System.IO.StreamReader(resp.GetResponseStream()))
    {
        var result = sr.ReadToEnd().Trim();
        var iapResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<AppleIapResponse>(result);
        // always getting '21002' 'java.lang.NullPointerException'
    }
}

我尝试了一切:改变ContentType,JSON格式,编码......

任何提示?

1 个答案:

答案 0 :(得分:1)

这是代码中的一个简单错误,我将收据写入POST,而不是JSON:

byte[] byteArray = Encoding.UTF8.GetBytes(json);
                                          ^^^^

墙壁因撞击它而受伤...