IAP (内置购买) 服务器端代码

php的 curl 和  SSL (open_ssl)这两个模块开启

<?php
//服务器二次验证代码
function getReceiptData($receipt, $isSandbox = false)   
{   
	if ($isSandbox) {   
		$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';   
	}   
	else {   
		$endpoint = 'https://buy.itunes.apple.com/verifyReceipt';   
	}   

	$postData = json_encode(   
		array('receipt-data' => $receipt)   
	);   

	$ch = curl_init($endpoint);   
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
	curl_setopt($ch, CURLOPT_POST, true);   
	curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);   
	//这两行一定要加,不加会报SSL 错误
	curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);  
	curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 

	$response = curl_exec($ch);   
	$errno    = curl_errno($ch);   
	$errmsg   = curl_error($ch);   
	curl_close($ch);   
	//判断时候出错,抛出异常
	if ($errno != 0) {   
		throw new Exception($errmsg, $errno);   
	}   

	$data = json_decode($response);   
	//判断返回的数据是否是对象
	if (!is_object($data)) {   
		throw new Exception('Invalid response data');   
	}   
	//判断购买时候成功
	if (!isset($data->status) || $data->status != 0) {   
		throw new Exception('Invalid receipt');   
	}   

	//返回产品的信息			
	return array(   
		'quantity'       =>  $data->receipt->quantity,   
		'product_id'     =>  $data->receipt->product_id,   
		'transaction_id' =>  $data->receipt->transaction_id,   
		'purchase_date'  =>  $data->receipt->purchase_date,   
		'app_item_id'    =>  $data->receipt->app_item_id,   
		'bid'            =>  $data->receipt->bid,   
		'bvrs'           =>  $data->receipt->bvrs   
	);   
}   

//获取 App 发送过来的数据,设置是否是沙盒状态
$receipt   = $_GET['data'];   
$isSandbox = true;   
//开始执行验证
try
 {
	 $info = getReceiptData($receipt, $isSandbox);   
	 // 通过product_id 来判断是下载哪个资源
	 switch($info['product_id']){
		case 'com.application.xxxxx.xxxx':
			Header("Location:xxxx.zip");
		break;			 
	}
 }
//捕获异常
catch(Exception $e)
{
	echo 'Message: ' .$e->getMessage();
}
?>

 

 

评论关闭