当前位置:首页 > PHP教程 > php高级应用 > 列表

IOS苹果AppStore内购付款的服务器端php验证方法(使用thinkphp)

发布:smiling 来源: PHP粉丝网  添加日期:2023-06-23 11:51:40 浏览: 评论:0 

这篇文章主要介绍了IOS苹果AppStore内购付款的服务器端php验证方法(使用thinkphp)。AppStore内购在app中支付的过程那是由前端IOS程序猿完成的;

IOS会把支付凭证发给后端服务器;使用php需要做的就是对支付结果的验证;这篇文章使用thinkphp整合,其实脱离thinkphp别的框架也能很便利的使用。

  1. /** 
  2.  * 验证AppStore内付 
  3.  * @param  string $receipt_data 付款后凭证 
  4.  * @return array                验证是否成功 
  5.  */ 
  6. function validate_apple_pay($receipt_data){ 
  7.     /** 
  8.      * 21000 App Store不能读取你提供的JSON对象 
  9.      * 21002 receipt-data域的数据有问题 
  10.      * 21003 receipt无法通过验证 
  11.      * 21004 提供的shared secret不匹配你账号中的shared secret 
  12.      * 21005 receipt服务器当前不可用 
  13.      * 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送 
  14.      * 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务 
  15.      * 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务 
  16.      */ 
  17.     function acurl($receipt_data$sandbox=0){ 
  18.         //小票信息 
  19.         $POSTFIELDS = array("receipt-data" => $receipt_data); 
  20.         $POSTFIELDS = json_encode($POSTFIELDS); 
  21.  
  22.         //正式购买地址 沙盒购买地址 
  23.         $url_buy     = "https://buy.itunes.apple.com/verifyReceipt"
  24.         $url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt"
  25.         $url = $sandbox ? $url_sandbox : $url_buy
  26.  
  27.         //简单的curl 
  28.         $ch = curl_init($url); 
  29.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  30.         curl_setopt($ch, CURLOPT_POST, 1); 
  31.         curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); 
  32.         $result = curl_exec($ch); 
  33.         curl_close($ch); 
  34.         return $result
  35.     } 
  36.     // 验证参数 
  37.     if (strlen($receipt_data)<20){ 
  38.         $result=array
  39.             'status'=>false, 
  40.             'message'=>'非法参数' 
  41.             ); 
  42.         return $result
  43.     } 
  44.     // 请求验证 
  45.     $html = acurl($receipt_data); 
  46.     $data = json_decode($html,true); 
  47.  
  48.     // 如果是沙盒数据 则验证沙盒模式 
  49.     if($data['status']=='21007'){ 
  50.         // 请求验证 
  51.         $html = acurl($receipt_data, 1); 
  52.         $data = json_decode($html,true); 
  53.         $data['sandbox'] = '1'
  54.     } 
  55.  
  56.     if (isset($_GET['debug'])) { 
  57.         exit(json_encode($data)); 
  58.     } 
  59.  
  60.     // 判断是否购买成功 
  61.     if(intval($data['status'])===0){ 
  62.         $result=array
  63.             'status'=>true, 
  64.             'message'=>'购买成功' 
  65.             ); 
  66.     }else
  67.         $result=array
  68.             'status'=>false, 
  69.             'message'=>'购买失败 status:'.$data['status'
  70.             ); 
  71.     } 
  72.     return $result

使用方法也非常简单,就是把IOS发过来的支付凭证作为参数传入validate_apple_pay()函数即可。

  1. <?php 
  2. namespace Api\Controller; 
  3. use Common\Controller\HomeBaseController; 
  4. /** 
  5.  * paypal支付 
  6.  */ 
  7. class AppstoreController extends HomeBaseController{ 
  8.  
  9.     // 支付回调 
  10.     public function result(){ 
  11.         //苹果内购的验证收据 
  12.         $receipt_data = I('post.apple_receipt'); 
  13.         // 验证支付状态 
  14.         $result=validate_apple_pay($receipt_data); 
  15.         if($result['status']){ 
  16.             // 验证通过 此处可以是修改数据库订单状态等操作 
  17.  
  18.         }else
  19.             // 验证不通过 
  20.         } 
  21.     } 
  22.  
  23. }

Tags: AppStore内购付款php验证方法

分享到: