|
@@ -226,12 +226,105 @@ class Payios extends Api
|
|
|
$prefix = 'iosVIP订阅'.',传入original_transaction_id:'.$original_transaction_id.',传入transaction_id:'.$transaction_id.'。';
|
|
|
filePut($prefix.'参数apple_receipt:'.$receipt_data);
|
|
|
|
|
|
+ //检查重复订单
|
|
|
+ $check_map = [
|
|
|
+ 'original_transaction_id' => $original_transaction_id,
|
|
|
+ 'transaction_id' => $transaction_id,
|
|
|
+ ];
|
|
|
+ $check_order = Db::name('user_vipxufei_task')->where($check_map)->find();
|
|
|
+ if($check_order){
|
|
|
+ filePut($prefix.'续费早已完成');
|
|
|
+ $this->success('充值已完成');
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
//查找订单
|
|
|
$order_map = [
|
|
|
'original_transaction_id' => $original_transaction_id,
|
|
|
];
|
|
|
+ $order_info = Db::name('user_vipxufei_task')->where($order_map)->order('expires_date_ms desc')->lock(true)->find();
|
|
|
+ if (!$order_info) {
|
|
|
+ Db::rollback();
|
|
|
+ filePut($prefix.'不存在的订单');
|
|
|
+ $this->error('不存在的订单');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证支付状态
|
|
|
+ $result = $this->validate_apple_pay($receipt_data);
|
|
|
+ if (!$result['status']) {// 验证不通过
|
|
|
+ Db::rollback();
|
|
|
+ filePut($prefix.'验证'.$result['message']);
|
|
|
+ $this->error($result['message']);
|
|
|
+ }
|
|
|
+
|
|
|
+ $in_app = $result['data']['receipt']['in_app'];
|
|
|
+
|
|
|
+ $only_trans = [];
|
|
|
+ foreach($in_app as $key => $trans){
|
|
|
+ //非订阅信息,原始信息
|
|
|
+ if($trans['transaction_id'] == $transaction_id && $original_transaction_id == $trans['original_transaction_id'] && $trans['product_id'] == $order_info['bundle_id']){
|
|
|
+ $only_trans = $trans;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(empty($only_trans)){
|
|
|
+ Db::rollback();
|
|
|
+ filePut($prefix.'未找到匹配的交易,产品id'.$order_info['bundle_id']);
|
|
|
+ $this->error('未找到匹配的交易,产品id'.$order_info['bundle_id']);
|
|
|
+ }
|
|
|
+
|
|
|
+ //验证时间
|
|
|
+ if($only_trans['purchase_date_ms'] <= $order_info['purchase_date_ms'] || $only_trans['expires_date_ms'] <= $order_info['expires_date_ms']){
|
|
|
+ Db::rollback();
|
|
|
+ filePut($prefix.'时间对不上,返回成功,finish掉');
|
|
|
+ $this->success(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ //逻辑开始
|
|
|
+ //先充值
|
|
|
+ $user_info = Db::name('user_wallet')->where('user_id',$order_info['user_id'])->lock(true)->find();
|
|
|
+ if($user_info['vip_endtime'] < time()){
|
|
|
+ //过期了
|
|
|
+ $vip_endtime = time() + (intval($order_info['days']) * 86400);
|
|
|
+ }else{
|
|
|
+ //追加vip
|
|
|
+ $vip_endtime = $user_info['vip_endtime'] + (intval($order_info['days']) * 86400);
|
|
|
+ }
|
|
|
+ $update_data = [
|
|
|
+ 'vip_endtime'=>$vip_endtime,
|
|
|
+ ];
|
|
|
+ $result = Db::name('user_wallet')->where('user_id',$order_info['user_id'])->update($update_data);
|
|
|
+ if($result === false)
|
|
|
+ {
|
|
|
+ filePut($prefix.'逻辑续费vip时间失败');
|
|
|
+ Db::rollback();
|
|
|
+ $this->error('充值失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ //添加新的一个task
|
|
|
+ $task_data = $order_info;
|
|
|
+ $task_data['createtime'] = time();
|
|
|
+ $task_data['apple_receipt'] = $receipt_data;
|
|
|
+ $task_data['in_app_one'] = json_encode($only_trans);
|
|
|
+ $task_data['transaction_id'] = $transaction_id;
|
|
|
+ $task_data['times'] = $order_info['times'] + 1;
|
|
|
+ $task_data['purchase_date_ms'] = $only_trans['purchase_date_ms'];
|
|
|
+ $task_data['expires_date_ms'] = $only_trans['expires_date_ms'];
|
|
|
+
|
|
|
+
|
|
|
+ $task_id = Db::name('user_vipxufei_task')->insertGetId($task_data);
|
|
|
+ if(!$task_id)
|
|
|
+ {
|
|
|
+ filePut($prefix.'用户添加vipxufei_task失败');
|
|
|
+ Db::rollback();
|
|
|
+ $this->error('充值失败');
|
|
|
+ }
|
|
|
|
|
|
+ Db::commit();
|
|
|
+ filePut($prefix.'充值成功');
|
|
|
+ $this->success('充值成功');
|
|
|
|
|
|
+ //逻辑结束
|
|
|
}
|
|
|
|
|
|
//金币+vip,苹果内购支付回调,app请求的接口
|
|
@@ -365,11 +458,13 @@ class Payios extends Api
|
|
|
'transaction_id' => $only_trans['transaction_id'],
|
|
|
'status' => 1,
|
|
|
'times' => 1,
|
|
|
- 'original_purchase_date_ms' => $only_trans['original_purchase_date_ms'],
|
|
|
//'notification_type' => 'INITIAL_BUY'.',首次订阅',
|
|
|
+ 'original_purchase_date_ms' => $only_trans['original_purchase_date_ms'],
|
|
|
+ 'purchase_date_ms' => $only_trans['purchase_date_ms'],
|
|
|
+ 'expires_date_ms' => $only_trans['purchase_date_ms'], //第一次借用购买时间戳
|
|
|
];
|
|
|
$task_id = Db::name('user_vipxufei_task')->insertGetId($task_data);
|
|
|
- if($task_id)
|
|
|
+ if(!$task_id)
|
|
|
{
|
|
|
filePut($prefix.'用户添加vipxufei_task失败');
|
|
|
Db::rollback();
|