123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?php
- namespace app\api\model\order;
- use app\api\model\card\RiceCard as RiceCardModel;
- use app\api\model\card\RiceCardPriceValues as PriceValuesModel;
- use app\common\service\Order;
- use app\api\model\order\RiceCardOrder;
- use app\api\model\Order as CheckOrder;
- use app\common\enum\OrderType as OrderTypeEnum;
- use app\api\model\User as UserModel;
- use app\api\model\card\UserRiceCard as UserRiceCardModel;
- use app\api\model\card\RiceCardGoods as RiceCardGoodsModel;
- use app\api\model\card\UserRiceCardGoods as UserRiceCardGoodsModel;
- class RiceCardPay implements IOrder {
- private $error = '';
- public function getError(){
- return $this->error;
- }
- public function prePay($args){
-
- $card_id = $args['card_id'];
- $price_values_id = $args['price_values_id'];
- $rice_card = RiceCardModel::where("id",$card_id)->where("status",1)->where("is_delete",0)->find();
- $buy_num = $args['buy_num'];
- if(empty($rice_card)){
- $this->error = '米卡不存在';
- return false;
- }
- $price_value = PriceValuesModel::where("id",$price_values_id)->where("card_id",$card_id)->find();
- if(empty($price_value)){
- $this->error = '请选择对应的面值';
- return false;
- }
- if($rice_card->stock<$buy_num){
- $this->error = '当前库存不足';
- return false;
- }
- $order['order_no'] = Order::createOrderNoPrefix('');
- $order['user_id'] = $args['user_id'];
- $order['user_mobile'] = $args['user_mobile'];
- $order['rice_card_id'] = $card_id;
- $order['rice_card_name'] = $rice_card->name;
- $order['rice_card_remark'] = $rice_card->describe;
- $order['rice_card_img'] = $rice_card->image_text;
- $order['rice_card_price'] = $price_value->price;
- $order['rice_card_face_value'] = $price_value->face_value;
- $order['buy_num'] = $buy_num;
- $total_price = floatval($price_value->price)*intval($buy_num);
- $order['total_price'] = $total_price;
- $pay_price = $total_price;
- $order['pay_price'] = $pay_price;
- $order['disaccount_price'] = ($price_value->face_value-$price_value->price)*intval($buy_num);
- $order['pay_status'] = 0;
- $order['pay_type'] =20;
- $order['order_status'] =10;
- $order['create_time'] = Date("Y-m-d H:i:s",time());
- $order['rice_card_type'] = $rice_card->type;
- if($args['total_pay_price']!=$pay_price){
- $this->error = '价格有变动,请重新发起支付!';
- return false;
- }
- $model = new RiceCardOrder;
- $order_id = $model->createOrderEvent($order);
- if(!$order_id){
- $this->error = '生成订单出错';
- return false;
- }
- $order['order_id'] = $order_id;
- $checkOrder = new CheckOrder;
- $order_type = OrderTypeEnum::RCORDER;
- $payment = $checkOrder->onPrePayByWechat($order,$order_type);
- // $payment = null;
- $res = ['order_id' => $order['order_id'], // 订单id
- 'pay_type' => 20, // 支付方式
- 'payment' => $payment // 微信支付参数
- ];
- return $res;
- }
- //重新支付
- public function repay($args){
- $order_id = $args['order_id'];
- $riceOrder = RiceCardOrder::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::RCORDER;
- if($riceOrder->pay_status!=0||$riceOrder->order_status!=10){
- $this->error = '当前订单不能支付';
- return false;
- }
-
- $checkOrder = new CheckOrder;
- $payment = $checkOrder->onPrePayByWechat($order,$order_type);
-
- $res = ['order_id' => $order['order_id'], // 订单id
- 'pay_type' => 20, // 支付方式
- 'payment' => $payment // 微信支付参数
- ];
- return $res;
- }
- //回调逻辑处理
- public function notifyPay($pay_data){
-
- $order_no = $pay_data['out_trade_no'];
- $model = RiceCardOrder::getPayDetail($order_no);
- if(empty($model)){
- return false;
- }
- $user = UserModel::detail($model['user_id']);
- return $model->transaction(function () use($model,$pay_data,$user) {
- $model->save([
- 'pay_status'=> 1,
- 'pay_time' => Date("Y-m-d H:i:s",time()),
- 'order_status' =>30,
- 'transaction_id'=>$pay_data['transaction_id']??''
- ]
- );
- $rice_card = RiceCardModel::where("id", $model['rice_card_id'])->find();
- $rice_card->sale_num += $model['buy_num']; // 销量增加
- $rice_card->save();
- $now = Date("Y-m-d H:i:s",time());
- for($i=0;$i<$model['buy_num'];$i++){
- $data['user_id'] = $model['user_id'];
- $data['user_mobile'] = $user['mobile'];
- $data['coupon_no'] = '';
- $data['coupon_code'] = '';
- $data['card_id'] = $model['rice_card_id'];
- $data['card_name'] = $model['rice_card_name'];
-
- $data['type'] = $rice_card->type??2;
- $data['describe'] = $rice_card->describe??'';
- $data['content'] = $rice_card->content??'';
- $data['image_id'] = $rice_card->image_id??0;
- $data['expire_time'] = date("Y-m-d",strtotime("+20 year"));
- $data['face_value'] = $model['rice_card_face_value'];
- $data['balance'] = $data['face_value'];
- $data['dk_cat_ids'] = $rice_card->dk_cat_ids??'';
- $data['effect_state'] = 1;
- $data['order_id'] = $model['id'];
- $data['create_time'] = $now;
- $urcModel = new UserRiceCardModel;
- $urcModel->save($data);
- $user_rice_card_id = $urcModel->id;
- $goodList = RiceCardGoodsModel::where('card_id',$model['rice_card_id'])->select();
- foreach($goodList as $row){
- $gdata['user_rice_card_id'] = $user_rice_card_id;
- $gdata['goods_id'] = $row->goods_id;
- $gdata['image_id'] = $row->image_id;
- $gdata['goods_sku_id'] = $row->goods_sku_id;
- $gdata['goods_sku_no'] = $row->goods_sku_no;
- $gdata['goods_name'] = $row->goods_name;
- $gdata['goods_props'] = isset($row->goods_props)?json_encode($row->goods_props):'';
- $gdata['goods_price'] = $row->goods_price;
- $gdata['goods_num'] = $row->goods_num;
- $gdata['total_price'] = $row->total_price;
- $gdata['is_except'] = $row->is_except;
- $gdata['create_time'] = $now;
- $gdata['update_time'] = $now;
- $ugood = new UserRiceCardGoodsModel;
- $ugood->save($gdata);
- }
- }
- return true;
- });
- }
- }
|