美文网首页
苹果内购的坑

苹果内购的坑

作者: liu66_net | 来源:发表于2019-12-14 15:03 被阅读0次

    苹果的凭证查询的数据如果是消耗性只能查询一次,如果是订阅型也会有时效性,订阅型如果是同一组会保留一个原始订单号(第一次购买该组订阅的订单号),很多坑需要自己发掘,下面是基本的代码处理

    public  function arraySort($arr,$key,$type='asc',$subscript=0){
    
            $keyArr = []; // 初始化存放数组将要排序的字段值
            foreach ($arr as $k=>$v){
                $keyArr[$k] = $v[$key]; // 循环获取到将要排序的字段值
            }
            if($type == 'asc'){
                asort($keyArr); // 排序方式,将一维数组进行相应排序
            }else{
                arsort($keyArr);
            }
            foreach ($keyArr as $k=>$v){
                $newArray[$k] = $arr[$k]; // 循环将配置的值放入响应的下标下
            }
            $newArray = array_merge($newArray); // 重置下标
            return $newArray[$subscript]; // 数据返回
        }
    
    
    
    
    $receipt = '凭证';
    $password = '密码';
    $jsonItem = json_encode(['receipt-data' => $receipt,'password'=>$password ]);
     //$url= 'https://buy.itunes.apple.com/verifyReceipt';      //正式
            $url = 'https://sandbox.itunes.apple.com/verifyReceipt';  //测试
     $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
            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);
            $result= json_decode($response, true);
    if($result['status'] == 21007)
    {
     $url= 'https://buy.itunes.apple.com/verifyReceipt';      //正式
    $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
            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);
            $result= json_decode($response, true);
    }
    if ($result['status'] !== 0) {
                //验证失败 返回app错误状态,可以记录日志
    exit;
    }
     $receiptitem = $result['latest_receipt_info'];
     $item = $this->arraySort($receiptitem, 'purchase_date', 'desc');
    $orderThird = $item['transaction_id'];                //本次订阅的订单号
            $orderThirdFirst = $item['original_transaction_id'];  //这个是原始订单号
    

    相关文章

      网友评论

          本文标题:苹果内购的坑

          本文链接:https://www.haomeiwen.com/subject/vqwcnctx.html