RVS 生产环境的说明


RVS 生产环境的说明

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

如果您已将应用服务器设置为使用 RVS 沙盒,则需要将主机从“http://localhost:8080/RVSSandbox”更改为“https://appstore-sdk.amazon.com”。

此外,验证您此时使用的是否是真正的共享密钥。RVS 沙盒将忽略共享密钥,但 RVS 生产服务器会拒绝包含无效共享密钥的请求。共享密钥可在 Amazon Appstore 中您的开发者账户的 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. 从 Amazon 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: Invalid receiptID");
                // 本地处理响应数据
                // 响应应用
                break;

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

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

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

            case 200:

                //检索 Amazon 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();
        // 本地处理响应数据
        // 响应应用
    }
  }