RestTemplate调用苹果内购验证API失败,请求解决方案
问题:RestTemplate调用苹果内购验证API失败(Postman可正常运行)
我尝试用RestTemplate调用苹果内购验证API,但一直失败,不过相同的请求在Postman里能正常跑通。相关代码如下:
HttpHeaders httpHeaders = new HttpHeaders(); // httpHeaders.setContentType(MediaType.APPLICATION_JSON); //httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); map.add(Constant.PURCHASE.RECEIPT_DATA, purchase.getReceiptData()); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, httpHeaders); ResponseEntity<String> postResponse = restTemplate.postForEntity(iosPurchaseService, request, String.class);
想请教下:
- 怎么用RestTemplate正确实现这个请求?
- 是否苹果内购验证API不允许使用Base64编码的数据?
解答
嘿,我来帮你捋捋问题出在哪!首先,苹果内购验证API要求的是JSON格式的请求体,但你现在用MultiValueMap会默认发送application/x-www-form-urlencoded的表单数据,这和Postman里的请求格式完全不匹配——这就是请求失败的核心原因。
正确的实现步骤
- 配置正确的请求头:必须明确指定
Content-Type为application/json,同时声明接受JSON格式的响应,这两步你之前注释掉了,得打开。 - 构造JSON请求体:苹果接口需要的是包含
receipt-data字段的JSON对象,不是表单结构。你可以用Map或者自定义POJO来封装数据,别再用MultiValueMap了。
修改后的代码示例
// 1. 配置请求头 HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); // 2. 构造JSON请求体 Map<String, String> requestBody = new HashMap<>(); requestBody.put("receipt-data", purchase.getReceiptData()); // 如果是自动续期订阅,记得加上共享密钥(在App Store Connect获取) // requestBody.put("password", "你的应用共享密钥"); // 3. 构建请求实体 HttpEntity<Map<String, String>> request = new HttpEntity<>(requestBody, httpHeaders); // 4. 发送请求 ResponseEntity<String> postResponse = restTemplate.postForEntity(iosPurchaseService, request, String.class);
关于Base64编码的疑问
完全不用担心,苹果内购验证API必须接收Base64编码的收据数据,甚至要求你把收据转换成无换行的Base64字符串(有些工具生成的Base64会带换行,这才可能导致验证失败)。你在Postman里能成功,说明你的收据编码是没问题的,只是请求格式错了。
额外排查小tips
- 确认环境地址:沙箱环境用
https://sandbox.itunes.apple.com/verifyReceipt,生产环境用https://buy.itunes.apple.com/verifyReceipt,别搞混了。 - 如果是续期订阅,一定要加
password字段,否则验证会失败。
内容的提问来源于stack exchange,提问作者Isura Amarasinghe
相关产品推荐
相关产品推荐

