Browse Source

ios内购支付,订阅续费的特殊处理

lizhen_gitee 1 năm trước cách đây
mục cha
commit
7595ba61c9
1 tập tin đã thay đổi với 62 bổ sung2 xóa
  1. 62 2
      application/api/controller/Payios.php

+ 62 - 2
application/api/controller/Payios.php

@@ -63,6 +63,7 @@ class Payios extends Api
         $data['table_id'] = 0;
         $data['args'] = json_encode(['days'=>$recharge_config['days']]);
         $data['bundle_id'] = $recharge_config['bundle_id'];
+        $data['is_lianxu'] = $recharge_config['is_lianxu'];
 
         $orderid = Db::name('pay_order')->insertGetId($data);
 
@@ -209,9 +210,36 @@ class Payios extends Api
         $this->success('success',$data['out_trade_no']);
     }
 
+    //订阅信息处理
+    public function expires(){
+
+        //苹果订阅的验证收据
+        $original_transaction_id = input('original_transaction_id','','trim');
+        $receipt_data = input('apple_receipt', '', 'trim');
+        $transaction_id = input('transaction_id', '', 'trim');
+
+
+
+        if (!$receipt_data || !$original_transaction_id || !$transaction_id) {
+            $this->error('缺少参数');
+        }
+
+        filePut("\r\n\r\n".'新请求VIP订阅');
+        $prefix = 'iosVIP订阅'.',传入original_transaction_id:'.$original_transaction_id.',传入transaction_id:'.$transaction_id.'。';
+        filePut($prefix.'参数apple_receipt:'.$receipt_data);
+
+
+    }
+
     //金币+vip,苹果内购支付回调,app请求的接口
     public function gold_notify_iosnew(){
 
+        $original_transaction_id = input('original_transaction_id','','trim');
+        if(!empty($original_transaction_id)){
+            //订阅信息
+            $this->expires();
+        }
+
         //苹果内购的验证收据
         $receipt_data = input('apple_receipt', '', 'trim');
         $out_trade_no = input('out_trade_no', '', 'trim');
@@ -256,8 +284,10 @@ class Payios extends Api
 
         $only_trans = [];
         foreach($in_app as $key => $trans){
-            if($trans['transaction_id'] == $transaction_id && $trans['product_id'] == $order_info['bundle_id']){
+            //非订阅信息,原始信息
+            if($trans['transaction_id'] == $transaction_id && $transaction_id == $trans['original_transaction_id'] && $trans['product_id'] == $order_info['bundle_id']){
                 $only_trans = $trans;
+                break;
             }
         }
         if(empty($only_trans)){
@@ -317,10 +347,40 @@ class Payios extends Api
                 Db::rollback();
                 $this->error('充值失败');
             }
+            //订阅vip需要多加的逻辑
+            if($order_info['is_lianxu'] == 1){
+                $task_data = [
+                    'order_id' => $order_info['id'],
+                    'user_id' => $order_info['user_id'],
+                    'bundle_id' => $order_info['bundle_id'],
+                    'days' => $args['days'],
+                    'createtime' => time(),
+                    'apple_receipt' => $receipt_data,
+                    'original_transaction_id' => $only_trans['original_transaction_id'],
+                    'transaction_id' => $only_trans['transaction_id'],
+                    'status' => 1,
+                    'times' => 1,
+                    'notification_type' => 'INITIAL_BUY'.',首次订阅',
+                ];
+                $task_id = Db::name('user_vipxufei_task')->insertGetId($task_data);
+                if($task_id)
+                {
+                    filePut($prefix.'用户添加vipxufei_task失败');
+                    Db::rollback();
+                    $this->error('充值失败');
+                }
+            }
+
         }
 
         // 修改订单状态
-        $ros = Db::name('pay_order')->where(['id' => $order_info['id']])->update(['order_status'=>1,'transaction_id' => $transaction_id,'notifytime'=>time()]);
+        $update_order = [
+            'order_status'=>1,
+            'transaction_id' => $only_trans['transaction_id'],//理论上与 original_transaction_id 相等
+            'in_app_one' => json_encode($only_trans),
+            'notifytime'=>time(),
+        ];
+        $ros = Db::name('pay_order')->where(['id' => $order_info['id']])->update($update_order);
         if($ros === false) {
             filePut($prefix.'修改订单状态失败');
             Db::rollback();