在应用程序购买收据验证问题
问题描述:
我有一个应用程序支持订阅以及支付功能。我在服务器端面临接收验证问题。 如果在应用程序购买收据验证问题
- 用户没有订阅,并试图下载使用付费内容 你去我收到21002错误(传递共享秘密 确认)
- 如果用户签约并即将到期。现在用户尝试下载 现收现付,然后反应是21004(不通过共享密钥)
我无法理解时,我应该通过共享的秘密苹果服务器。由于我们只有一个包含消费品和订阅收据信息的苹果收据。
任何帮助?
答
Code 21002
指JSON
要发送到苹果拥有共享密钥和接收的数据是“形状错误”与否格式苹果希望它。
也尽量在收到删除字符'\n'
和'\r'
并将其发送给服务器之前用'%2B'
更换'+'
。事情是这样的:
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
NSString *receiptDataString = [receipt base64EncodedStringWithOptions:0];
receiptDataString=[receiptDataString stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
receiptDataString=[receiptDataString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
receiptDataString=[receiptDataString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
NSString *postDataString = [NSString stringWithFormat:@"receipt-data=%@", receiptDataString];
NSString *length = [NSString stringWithFormat:@"%lu", (unsigned long)[postDataString length]];
[request setValue:length forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:[postDataString dataUsingEncoding:NSASCIIStringEncoding]];
,这意味着你的代码中有一个逻辑上的错误,你想用不通过的关键在这种情况下
+0
我可以解决类似的问题,删除'\ n \ r'并将收据中的所有内容保留原样。 – Timo
+0
最近有一个错误 - 即使您使用正确的共享密码,苹果也会在沙箱中返回21004状态。 –
你检查收到的沙盒模式? –
是的,我正在测试它在沙箱 – naresh