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

原文地址:http://blog.csdn.net/toss156/article/details/7043304


<?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();  
    }  
?>  


发布了11 篇原创文章 · 获赞 2 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章