PHP收据验证始终返回true
我正在尝试在我的应用程序中验证消费品购买的完整性 我已经测试了我的应用内购买,效果很好。然而,在使用“应用内购买破解器”和越狱设备进行测试后,我意识到,无论购买是否真的发生,我所有的收据都被苹果的服务器退回了ok 我的事务侦听器: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
-(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函数都将成为一个问题。