gpt4 book ai didi

ios - Swift 自动续订订阅问题

转载 作者:搜寻专家 更新时间:2023-11-01 05:37:45 25 4
gpt4 key购买 nike

在过去的 7 天里,我一直在尝试创建Auto-Renewable Subscription。我是在没有Shared Secret 的情况下完成的,我一直在关注 tutorial ,工作代码是在云上存储信息。我想使用接收验证,但是教程中的代码充满了错误,而且 PHP 代码也充满了错误。我找到了另一个免费教程,但同样的事情,只有错误,无法让它运行。直到现在我已经搜索了整个 GitHub,我已经支付了 Lynda 教程的费用,并发现了很多其他教程,但没有一个是有效的。你有没有任何教程可以建议我,或者你能帮我弄出代码吗。

这是有 2 个错误的 swift 代码: Bugs in codefunc validateReceipt(){

var receiptUrl = NSBundle.mainBundle().appStoreReceiptURL
var receipt: NSData = NSData.dataWithContentsOfURL(receiptUrl!, options: nil, error: nil)

var response: NSURLResponse?
var error: NSError?

var receiptdata:NSString = receipt.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

var request = NSMutableURLRequest(URL: NSURL(string: "http://mm214.com/write.php")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"

var err: NSError?

request.HTTPBody = receiptdata.dataUsingEncoding(NSASCIIStringEncoding)

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary

if err != nil {
print(err!.localizedDescription)
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
}
else {
if let parseJSON = json {
println("Receipt \(parseJSON)")
}
else {
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Receipt Error: \(jsonStr)")
}
}
})

task.resume()

这是PHP代码:

<?php
function getReceiptData($receipt)
{
$fh = fopen('showme.txt',w);
fwrite($fh,$receipt);
fclose($fh);
$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';

$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $receipt);
$response = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
curl_close($ch);
$msg = $response.' - '.$errno.' - '.$errmsg;
echo $response;
}

foreach ($_POST as $key=>$value){
$newcontent .= $key.' '.$value;
}

$new = trim($newcontent);
$new = trim($newcontent);
$new = str_replace('_','+',$new);
$new = str_replace(' =','==',$new);

if (substr_count($new,'=') == 0){
if (strpos('=',$new) === false){
$new .= '=';
}
}

$new = '{"receipt-data":"'.$new.'","password":"shared secreet"}';
$info = getReceiptData($new);
?>

我在第 31 行收到错误:

Warning: strpos(): Empty needle in /home2/arslan/public_html/verifyReciep.php on line 31 {"status":21002}

最佳答案

21002 - 收据数据属性中的数据格式错误或丢失。

当您将其转换为 NSData 时,这里的收据格式错误。

在 iOS 7 中,Apple 在 NSData 上引入了新的 base64 方法,使得无需使用第三方 base 64 解码库,但我仍然建议您尝试使用 Base64收据编码编码。我希望这会解决你的问题。当我验证来自服务器端的收据并且此编码库在这种情况下有效时,我也面临同样的 21002 问题。不知道如何,但它解决了我在服务器端的收据验证调用问题。希望它也对您有用。

按照给定的步骤:

  1. 下载Base64从这里开始。
  2. 在您的项目中添加Base64.hBase64.menter image description here
  3. 添加桥接头以在 Swift 类中使用 Objective C 文件。 enter image description here

创建Bridging Header .

  1. 现在使用添加类的 base64EncodedString()

按照我的回答了解更多详情。 In-app purchase receipt verification for auto renewal using AFNetworking objective-c

关于ios - Swift 自动续订订阅问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com