PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

    Laravel IOS内购二次验证代码分享

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:下面分享一下,Laravle项目中ios内购二次验证的代码,网上看到都没法使用,很坑爹,分享一下自己项目中使用的代码,希望对大家有所帮助。pu...
    下面分享一下,Laravle项目中ios内购二次验证的代码,网上看到都没法使用,很坑爹,分享一下自己项目中使用的代码,希望对大家有所帮助。


    1. public function iosNotify(Request $request,ResponseFactoryContract $response,NotifyInterface $notify){ 
    2.  
    3.       //苹果内购的验证收据 
    4.       $receipt_data = $request->input('apple_receipt'); 
    5.       $pay_sn   = $request->input('pay_sn'); 
    6.       $ios_sandBox = env('IOS_SANDBOX',false);//判断生产环境,开发环境 
    7.       if(emptyempty($receipt_data)  || !$pay_sn){ 
    8.           return $response->json(['message'=>'参数不正确'])->setStatusCode(422); 
    9.       } 
    10.       // 验证ios内购支付状态 
    11.       $result=$this->validate_apple_pay($receipt_data,$ios_sandBox); 
    12.       if($result['status']){ 
    13.           // 验证通过 此处可以是修改数据库订单状态等操作 
    14.          $recharge = Recharge::where('pay_sn',$pay_sn)->first(); 
    15.          if(!$recharge){ 
    16.              return $response->json(['message'=>'订单不存在'])->setStatusCode(422); 
    17.          } 
    18.          if($recharge['payment_state'] == 1){ 
    19.              return $response->json(['message'=>'订单已支付了'])->setStatusCode(422); 
    20.          } 
    21.        return   DB::transaction(function () use ($notify,$pay_sn,$response){ 
    22.               $result = $notify->iosChangeState(3,$pay_sn); 
    23.                   if($result) { 
    24.                       return $response->json(['message' => '支付成功'])->setStatusCode(200); 
    25.                   }else
    26.                       return $response->json(['message' => '支付失败'])->setStatusCode(400); 
    27.                   } 
    28.               }); 
    29.  
    30.       }else
    31.          return $response->json(['message'=>$result['message']])->setStatusCode(422); 
    32.       } 
    33.   } 
    34.  
    35.  
    36.   /** 
    37.    * 验证AppStore内付 
    38.    * @param  string $receipt_data 付款后凭证 
    39.    * @return array                验证是否成功 
    40.    */ 
    41. protected  function validate_apple_pay($receipt_data,$ios_sandBox){ 
    42.       /** 
    43.        * 21000 App Store不能读取你提供的JSON对象 
    44.        * 21002 receipt-data域的数据有问题 
    45.        * 21003 receipt无法通过验证 
    46.        * 21004 提供的shared secret不匹配你账号中的shared secret 
    47.        * 21005 receipt服务器当前不可用 
    48.        * 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送 
    49.        * 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务 
    50.        * 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务 
    51.        */ 
    52.  
    53.       // 验证参数 
    54.       if (strlen($receipt_data)<20){ 
    55.           $result=array
    56.               'status'=>false, 
    57.               'message'=>'非法参数' 
    58.           ); 
    59.           return $result
    60.       } 
    61.  
    62.       if($ios_sandBox){ 
    63.           // 请求验证 
    64.           $html = $this->acurl($receipt_data); 
    65.           $data = json_decode($html,true); 
    66.       }else
    67.           // 请求验证 
    68.           $html = $this->acurl($receipt_data, 1); 
    69.           $data = json_decode($html,true); 
    70.       } 
    71.  
    72.  
    73.     if (!is_array($data) && !isset($data['status'])) { 
    74.         $result=array
    75.             'status'=>false, 
    76.             'message'=>'获取数据失败' 
    77.         ); 
    78.         return $result
    79.     } 
    80.       // 判断是否购买成功 
    81.       if($data['status'] ===0){ 
    82.           $result=array
    83.               'status'=>true, 
    84.               'message'=>'购买成功' 
    85.           ); 
    86.       }else
    87.           $result=array
    88.               'status'=>false, 
    89.               'message'=>'购买失败 status:'.$data['status'
    90.           ); 
    91.       } 
    92.       return $result
    93.   } 
    94.  
    95.   protected  function acurl($receipt_data$sandbox=0){ 
    96.       //小票信息 
    97.       $POSTFIELDS = array("receipt-data" => $receipt_data); 
    98.       $POSTFIELDS = json_encode($POSTFIELDS); 
    99.       //正式购买地址 沙盒购买地址 
    100.       $url_buy     = "https://buy.itunes.apple.com/verifyReceipt"
    101.       $url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt"
    102.       $url = $sandbox  ? $url_sandbox : $url_buy
    103.  
    104.       $curl_handle=curl_init(); 
    105.       curl_setopt($curl_handle,CURLOPT_URL, $url); 
    106.       curl_setopt($curl_handle, CURLOPT_TIMEOUT, '3'); 
    107.       curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, true); 
    108.       curl_setopt($curl_handle,CURLOPT_HEADER, 0); 
    109.       curl_setopt($curl_handle,CURLOPT_POST, true); 
    110.       curl_setopt($curl_handle,CURLOPT_POSTFIELDS, $POSTFIELDS); 
    111.       curl_setopt($curl_handle,CURLOPT_SSL_VERIFYHOST, 0); 
    112.       curl_setopt($curl_handle,CURLOPT_SSL_VERIFYPEER, 0); 
    113.       $result =curl_exec($curl_handle); 
    114.       curl_close($curl_handle); 
    115.  
    116.       return $result
    117.   } 

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-153-6159-1.html
    相关热词搜索: Laravel IOS内购