RVS生产环境的说明
RVS生产环境的说明
发布应用后,您可以设置应用服务器与RVS生产服务器进行通信。亚马逊建议您从安全服务器调用RVS,因为它托管共享密钥。请勿从应用调用RVS。
如果已将应用服务器设置为使用RVS Cloud Sandbox,则需要从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传递给服务器。
- 从Amazon RVS服务器检索响应。
- 将响应传递给应用。
public static void verifyReceipt(final String developerSecret, final String userId, final String receiptId) {
System.out.println("开始收据验证");
String url = "https://appstore-sdk.amazon.com/version/1.0/verifyReceiptId/developer/" + developerSecret + "/user/" + userId + "/receiptId/" + receiptId;
System.out.println("亚马逊收据验证URL:" + url);
try {
System.out.println("打开Amazon RVS的HTTP连接");
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
int responseCode = con.getResponseCode();
System.out.println("Amazon RVS响应代码:" + responseCode);
switch (responseCode)
{
case 400:
System.out.println("Amazon RVS错误: ReceiptID无效");
// 在本地处理响应数据
//响应应用
break;
case 496:
System.out.println("Amazon RVS错误: developerSecret无效");
// 在本地处理响应数据
//响应应用
break;
case 497:
System.out.println("Amazon RVS错误: userId无效");
// 在本地处理响应数据
//响应应用
break;
case 500:
System.out.println("Amazon RVS错误: 内部服务器错误");
// 在本地处理响应数据
//响应应用
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.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错误: 来自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();
// 在本地处理响应数据
//响应应用
}
}