123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- namespace app\api\model\order;
- use app\api\model\member\MemberCardOrder;
- use app\api\model\member\MemberCards as MemberCardsModel;
- use app\common\service\Order;
- use app\api\model\Order as CheckOrder;
- use app\common\enum\OrderType as OrderTypeEnum;
- use app\api\model\User as UserModel;
- class MemberCardPay implements IOrder {
- private $error = '';
- public function getError(){
- return $this->error;
- }
- public function prePay($args){
-
- $card_id = $args['card_id'];
- log_record('card_id::'.$card_id,'debug');
- $card = MemberCardsModel::where("id",$card_id)
- //->where("audit_status",1)
- ->where("duration",1)->find();
- if(empty($card)){
- $this->error = '会员卡信息不存在';
- return false;
- }
- //$order['order_no'] = Order::createOrderNoPrefix('VIP');
- $order['order_no'] = 'VIP'.date('YmdHis').substr(strval(intval(microtime(true)*1000)),-3);
- $order['user_id'] = $args['user_id'];
- $order['user_mobile'] = $args['user_mobile'];
- $order['member_cards_id'] = $card_id;
- $order['member_cards_sale_price'] = $card->sale_price;
- $order['member_cards_origin_price'] = $card->origin_price;
- $order['pay_price'] = $card->sale_price;
- $order['pay_status'] = 0;
- $order['pay_type'] = 20;
- $order['order_status'] =10;
- $order['create_time'] = Date("Y-m-d H:i:s",time());
- $model = new MemberCardOrder;
- $order_id = $model->createOrderEvent($order);
- if(!$order_id){
- $this->error = '生成订单出错';
- return false;
- }
- $order['order_id'] = $order_id;
- $checkOrder = new CheckOrder;
- $order_type = OrderTypeEnum::MEMBERCARDBUY;
- $payment = $checkOrder->onPrePayByWechat($order,$order_type);
- return ['order_id' => $order['order_id'], // 订单id
- 'pay_type' => 20, // 支付方式
- 'payment' => $payment // 微信支付参数
- ];
- }
- //重新支付
- public function repay($args){
- $order_id = $args['order_id'];
- $riceOrder = MemberCardsModel::where("id",$order_id)->find();
- $order['order_id'] = $order_id;
- $order['order_no'] = $riceOrder->order_no;
- $order['pay_price'] = $riceOrder->pay_price;
- $order_type = OrderTypeEnum::MEMBERCARDBUY;
- if($riceOrder->pay_status!=0||$riceOrder->order_status!=10){
- $this->error = '当前订单不能支付';
- return false;
- }
-
- $checkOrder = new CheckOrder;
- $payment = $checkOrder->onPrePayByWechat($order,$order_type);
- return ['order_id' => $order['order_id'], // 订单id
- 'pay_type' => 20, // 支付方式
- 'payment' => $payment // 微信支付参数
- ];
- }
- //回调逻辑处理
- public function notifyPay($pay_data){
-
- $order_no = $pay_data['out_trade_no'];
- $model = MemberCardOrder::getPayDetail($order_no);
- if(empty($model)){
- return false;
- }
- $user = UserModel::detail($model['user_id']);
- return $model->transaction(function () use($model,$pay_data,$user) {
- $time = time();
- $now = Date("Y-m-d H:i:s",$time);
- //把用户的会员卡有效期延长
- $old_time = $user->member_expire_time;
- if ($old_time <= $time){//第一次购买或已过期
- $from_time = $now;
- $to_timestamp_temp = strtotime('+1 year',$time) - 86400;
- $to_time = date('Y-m-d 23:59:59',$to_timestamp_temp);
- $to_timestamp = strtotime($to_time);
- $user->member_start_time = $time;
- }else{
- $from_time = date('Y-m-d H:i:s',$old_time+1);//00:00:00
- $to_timestamp_temp = strtotime('+1 year',$old_time);
- $to_time = date('Y-m-d 23:59:59',$to_timestamp_temp);
- $to_timestamp = strtotime($to_time);
- }
- /* if ($old_time > 0){
- if ($old_time < $time){//过期了重置开始时间
- $user->member_start_time = $time;
- }
- $from_time = date('Y-m-d H:i:s',$old_time);
- $to_timestamp_temp = strtotime('+1 year',$old_time) - 86400;
- $to_time = date('Y-m-d 23:59:59',$to_timestamp_temp);
- $to_timestamp = strtotime($to_time);
- }else{//第一次购买
- $from_time = $now;
- $to_timestamp_temp = strtotime('+1 year',$time) - 86400;
- $to_time = date('Y-m-d 23:59:59',$to_timestamp_temp);
- $to_timestamp = strtotime($to_time);
- $user->member_start_time = $time;
- }*/
- $model->save([
- 'pay_status'=> 1,
- 'pay_time' => $now,
- 'order_status' =>30,
- 'transaction_id'=>$pay_data['transaction_id']??'',
- 'from_member_time' => $from_time,
- 'to_member_time' => $to_time,
- ]
- );
- //修改用户的会员有效期
- $user->member_expire_time = $to_timestamp;
- $user->save();
- return true;
- });
- }
- }
|