HardBirch

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

时间:11-12-05 栏目:iOS游戏开发技术 作者:张飞不张,文采横飞 评论:0 点击: 1,989 次

PHP 服务器端代码,

首先要确  php的 curl 和  SSL (open_ssl)这两个模块开启,可以在  php.ini  中去掉  这两个dll前面的分号。

<?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);
  	   curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);  //这两行一定要加,不加会报SSL 错误
        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();
 	}
?>

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: 【IOS】IAP (内置购买) 服务器端代码

【IOS】IAP (内置购买) 服务器端代码:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐