Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP收据验证始终返回true_Php_Objective C_In App Purchase_Verification - Fatal编程技术网

PHP收据验证始终返回true

PHP收据验证始终返回true,php,objective-c,in-app-purchase,verification,Php,Objective C,In App Purchase,Verification,我正在尝试在我的应用程序中验证消费品购买的完整性 我已经测试了我的应用内购买,效果很好。然而,在使用“应用内购买破解器”和越狱设备进行测试后,我意识到,无论购买是否真的发生,我所有的收据都被苹果的服务器退回了ok 我的事务侦听器: -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction in tr

我正在尝试在我的应用程序中验证消费品购买的完整性

我已经测试了我的应用内购买,效果很好。然而,在使用“应用内购买破解器”和越狱设备进行测试后,我意识到,无论购买是否真的发生,我所有的收据都被苹果的服务器退回了ok

我的事务侦听器:

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions)
{
    switch (transaction.transactionState) {
        case SKPaymentTransactionStatePurchased:
            [self unlockFeature];
            [[SKPaymentQueue defaultQueue]
             finishTransaction:transaction];
            break;

        case SKPaymentTransactionStateFailed:
            NSLog(@"Transaction Failed");
            [[SKPaymentQueue defaultQueue]
             finishTransaction:transaction];
            break;

        default:
            break;
    }
}
解锁功能:

 NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
NSString *rs = [receipt base64EncodedStringWithOptions:kNilOptions];
NSInteger amt = _cDonAmt;
_cDonAmt = 0;
if (receipt) {
NSURL *url = [NSURL URLWithString:@"http://example.com/verifyDonation.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:[MasterViewController getUserId] forKey:@"userID"];
    [request setPostValue:rs forKey:@"receipt"];
    [request setPostValue:[NSString stringWithFormat:@"%ld",(long)amt] forKey:@"dAmt"];
[request setDelegate:self];
[request startAsynchronous];
}
我希望我的错误可能在于我的PHP验证脚本

<?php

class VerifyDonation {


function verify() {
    $uid = htmlspecialchars($_POST["userID"]);
    $dA = intval(htmlspecialchars($_POST["dAmt"]));
    $receipti = $_POST["receipt"];
    $sandbox = true;
   //start getting
      if ($sandbox)
    $verify_host = "ssl://sandbox.itunes.apple.com";
else
    $verify_host = "ssl://buy.itunes.apple.com";

$json='{"receipt-data" : "'.$receipti.'" }';
//opening socket to itunes
$fp = fsockopen ($verify_host, 443, $errno, $errstr, 30);
if (!$fp) 
{
    // HTTP ERROR
    return false;
} 
else
{ 
    //iTune's request url is /verifyReceipt     
    $header = "POST /verifyReceipt HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($json) . "\r\n\r\n";
    fputs ($fp, $header . $json);
    $res = '';
    while (!feof($fp)) 
    {
        $step_res = fgets ($fp, 1024);
        $res = $res . $step_res;
    }
    fclose ($fp);
    //taking the JSON response
    $json_source = substr($res, stripos($res, "\r\n\r\n{") + 4);
    //decoding
    $app_store_response_map = json_decode($json_source);
    $app_store_response_status = $app_store_response_map->{'status'};
    //end geting
    if ($app_store_response_status == 0)//eithr OK or expired and needs to synch
    {
        echo "validReceipt";


         $link = mysql_connect("localhost", "user", "pass") or
        die("Could not connect: " . mysql_error());
    mysql_select_db("database");
    mysql_query("UPDATE `users` SET `donarAmt`= donarAmt + $dA WHERE facebookId = $uid");
        return true;
    }
    else
    {
        echo "invalidReceipt";
        return false;
    }
}

}
}


// This is the first thing that gets called when this page is loaded
// Creates a new instance of the RedeemAPI class and calls the redeem method
$ver = new VerifyDonation;
$ver->verify();

?>

请。它们不再得到维护,而是在使用。改为了解,并使用或。@JayBlanchard这里的问题不是MySQL。当$app\u store\u response\u status为0时,它可以按照我的需要工作。。。对某些人来说总是这样reason@NicholasConrad您是否检查了完整转储
var\u dump($app\u store\u response\u map)
无论@NicholasConrad出现什么问题,编写的MySQL函数都将成为一个问题。