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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值