2017-03-08 112 views
0

我有一个应用程序支持订阅以及支付功能。我在服务器端面临接收验证问题。 如果在应用程序购买收据验证问题

  1. 用户没有订阅,并试图下载使用付费内容 你去我收到21002错误(传递共享秘密 确认)
  2. 如果用户签约并即将到期。现在用户尝试下载 现收现付,然后反应是21004(不通过共享密钥)

我无法理解时,我应该通过共享的秘密苹果服务器。由于我们只有一个包含消费品和订阅收据信息的苹果收据。

任何帮助?

+0

你检查收到的沙盒模式? –

+0

是的,我正在测试它在沙箱 – naresh

回答

0

Code 21002JSON要发送到苹果拥有共享密钥和接收的数据是“形状错误”与否格式苹果希望它。

enter image description here

也尽量在收到删除字符'\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]]; 

Reference

​​,这意味着你的代码中有一个逻辑上的错误,你想用不通过的关键在这种情况下

+0

我可以解决类似的问题,删除'\ n \ r'并将收据中的所有内容保留原样。 – Timo

+0

最近有一个错误 - 即使您使用正确的共享密码,苹果也会在沙箱中返回21004状态。 –