iOS应用内购买支付验证返回21002错误如何解决?
苹果内购收据验证21002错误解决方案
21002错误的本质是苹果服务端无法正确解析你提交的请求数据,绝大多数情况是请求格式不符合要求导致的。
- 修正请求体JSON格式
你当前提交的请求体未包裹在{}中,属于非法JSON结构,合法的请求体格式如下:
{ "receipt-data" : "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", "password": "702a98fc92d0460bbd6aaf18c9b1ae0d", "exclude-old-transactions" : false }
配置正确的请求头
在Postman的请求头中必须添加Content-Type: application/json,禁止使用form-data、x-www-form-urlencoded等其他格式提交请求,否则苹果服务端会无法识别请求内容。确认收据数据有效性
你提交的receipt-data必须是客户端从苹果支付回调接口中直接获取的原始Base64字符串,不要做额外的转义、换行符替换、URL编码等操作,也不要使用模拟生成的假收据进行测试。确认验证地址和密钥正确性
未上架的应用测试交易,必须使用沙箱验证地址https://sandbox.itunes.apple.com/verifyReceipt提交请求,不要混用生产地址。你生成的专用共享密钥需要确认是对应当前应用的,不要填为其他应用的密钥。
内容的提问来源于stack exchange,提问作者Omer Faruk KAYA
相关产品推荐
相关产品推荐

