开发者控制台

RVS生产环境的说明

适用于Appstore SDK IAP的RVS生产设置

发布应用后,您可以设置应用服务器与RVS生产服务器进行通信。亚马逊建议您从安全服务器调用RVS,因为它托管共享密钥。请勿从应用调用RVS。

如果已将应用服务器设置为使用RVS云沙盒,则需要从URL中删除“sandbox”,将主机从“https://appstore-sdk.amazon.com/sandbox”更改为“https://appstore-sdk.amazon.com”。

此外,请验证此时使用的是否是真正的共享密钥。RVS沙盒将忽略共享密钥,但RVS生产服务器会拒绝包含无效共享密钥的请求。共享密钥可在亚马逊应用商店中您的开发者账户的Shared Key(共享密钥)页面上找到:

https://developer.amazon.com/sdk/shared-key.html

您可以根据自己的语言和技术首选项来设置应用服务器。该服务器需要通过HTTPS等安全协议安全地与RVS通信。您的服务器将向RVS发送验证请求并处理响应。

作为先决条件,您需要向项目中添加JSON解析库(如Jackson)来解析JSON响应。

以下示例代码针对的是通用Java服务器。此代码调用verifyReceipt来执行以下任务:

  1. 创建包含相应开发者和交易信息的URL字符串。
  2. 连接到Amazon RVS服务器并将交易URL传递给服务器。
  3. 从亚马逊RVS服务器检索响应。
  4. 将响应传递给应用。
  public static void verifyReceipt(final String developerSecret, final String userId, final String receiptId) {
    System.out.println("Start Receipt Validation");

    String url = "https://appstore-sdk.amazon.com/version/1.0/verifyReceiptId/developer/" + developerSecret + "/user/" + userId + "/receiptId/" + receiptId;

    System.out.println("Amazon Receipt Validation URL: " + url);

    try {
        System.out.println("Open HTTP connection to Amazon RVS");

        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        int responseCode = con.getResponseCode();

        System.out.println("Amazon RVS Response Code: " + responseCode);

        switch (responseCode)
        {
            case 400:
                System.out.println("Amazon RVS Error: ReceiptID无效");
                // 在本地处理响应数据
                // 响应应用
                break;

            case 496:
                System.out.println("Amazon RVS Error: Invalid developerSecret");
                // 在本地处理响应数据
                // 响应应用
                break;

            case 497:
                System.out.println("Amazon RVS Error: userId无效");
                // 在本地处理响应数据
                // 响应应用
                break;

            case 500:
                System.out.println("Amazon RVS Error: Internal Server Error");
                // 在本地处理响应数据
                // 响应应用
                break;

            case 200:

                // 取回亚马逊RVS响应
                BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream()));

                String inputLine;
                StringBuffer response = new StringBuffer();

                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();

                // 记录Amazon RVS响应
                System.out.println("Amazon RVS Response: " + response.toString()());

                // 为RVS响应创建JSONObject
                JSONObject responseJson = new JSONObject(response.toString());

                // 解析RVS响应
                JSONObject responseJson = new JSONObject(response.toString());
                String receiptId = responseJson.getString("receiptId");
                String productType = responseJson.getString("productType");
                String productId = responseJson.getString("productId");
                long purchaseDate = responseJson.optLong("purchaseDate");
                long cancelDate = responseJson.optLong("cancelDate");
                boolean testTransaction = responseJson.optBoolean("testTransaction");

                // 在本地处理响应数据
                // 响应应用

                break;

            default:
                System.out.println("Amazon RVS Error: Undefined Response Code From Amazon RVS");
                // 在本地处理响应数据
                // 响应应用
                break;
        }

    } catch (MalformedURLException e) {

        // 作为最佳实践,将以下逻辑替换为日志记录逻辑。
        System.out.println("Amazon RVS MalformedURLException");
        e.printStackTrace();
        // 在本地处理响应数据
        // 响应应用
    } catch (IOException e) {

        // 作为最佳实践,将以下逻辑替换为日志记录逻辑。
        System.out.println("Amazon RVS IOException");
        e.printStackTrace();
        // 在本地处理响应数据
        // 响应应用
    }
  }

Last updated: 2024年5月22日