为啥我得到 21004 作为来自苹果沙盒服务器测试自动更新订阅的回复的状态值?

Posted

技术标签:

【中文标题】为啥我得到 21004 作为来自苹果沙盒服务器测试自动更新订阅的回复的状态值?【英文标题】:Why I'm getting 21004 as status value in reply from apple's sandbox server testing auto-renewable subscriptions?为什么我得到 21004 作为来自苹果沙盒服务器测试自动更新订阅的回复的状态值? 【发布时间】:2011-08-08 17:59:31 【问题描述】:

我正在测试 aut-renewable 订阅,但苹果的沙盒服务器总是返回 status=21004,这意味着“您提供的共享密钥与您帐户的共享密钥文件不匹配。”。 我使用 java 服务器进行测试,它主要执行以下操作:

    String receiptData = "theReceiptDataBytesBase64encoded";
    String sharedSecret = "theSharedSecretAsPureStringProvidedByItunesconnect";


    String jsonData = "" +
                          "\"receipt-data\" : \"" + receiptData + "\"," +
                          "\"passsword\" : \"" + sharedSecret + "\"" +
                       "";

    URL url = new URL("https://sandbox.itunes.apple.com/verifyReceipt");
    HttpURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(jsonData);
    wr.flush();

    // Get the response
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    while((line = rd.readLine()) != null)
    
     System.out.println(line);
    
    wr.close();
    rd.close();

当我试图通过上面代码示例中的变量值进行清除时,我没有对共享密钥进行编码,而是将其用作纯字符串。是这个问题吗?

【问题讨论】:

【参考方案1】:

那些日子让你感觉成为一名开发人员真是太棒了......

仔细查看我上面的问题,您会发现我使用了带有 3 个该死的 s 字符的 JSON 密钥密码!!!这就是使用多个测试产品和测试用户以及应用商店沙盒中的新共享机密进行 5 小时试错体验的原因。

特别感谢 iTunes 团队提供“错误的共享密钥”消息,而不是“密码密钥到底是什么”消息。

【讨论】:

这个答案让我觉得我并不孤单 :) 我感受到你的痛苦,兄弟。我花了几天时间试图弄清楚为什么 ios app bundle 上传会无限期挂起。原来,我在关联域中有错字...

以上是关于为啥我得到 21004 作为来自苹果沙盒服务器测试自动更新订阅的回复的状态值?的主要内容,如果未能解决你的问题,请参考以下文章

苹果沙盒用户在生产前注销

无法创建 itunesconnect 沙盒测试器

iOS itunesconnect沙盒测试账号(无效年份)

javascript - postMessage 到沙盒 iframe,为啥收件人窗口原点为空?

不使用沙盒的 PayPal 测试

如何在购买通知中为苹果设置测试和生产环境