RVS生产环境的说明
适用于Appstore SDK IAP的RVS生产设置
提示: 本页介绍Appstore SDK中包含的适用于亚马逊应用内购买 (IAP) API的RVS。如果您在寻找适用于亚马逊应用商店计费兼容性SDK的RVS,请参阅适用于亚马逊应用商店计费兼容性的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
来执行以下任务:
- 创建包含相应开发者和交易信息的URL字符串。
- 连接到Amazon RVS服务器并将交易URL传递给服务器。
- 从亚马逊RVS服务器检索响应。
- 将响应传递给应用。
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日