RiceCardPay.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace app\api\model\order;
  3. use app\api\model\card\RiceCard as RiceCardModel;
  4. use app\api\model\card\RiceCardPriceValues as PriceValuesModel;
  5. use app\common\service\Order;
  6. use app\api\model\order\RiceCardOrder;
  7. use app\api\model\Order as CheckOrder;
  8. use app\common\enum\OrderType as OrderTypeEnum;
  9. use app\api\model\User as UserModel;
  10. use app\api\model\card\UserRiceCard as UserRiceCardModel;
  11. use app\api\model\card\RiceCardGoods as RiceCardGoodsModel;
  12. use app\api\model\card\UserRiceCardGoods as UserRiceCardGoodsModel;
  13. class RiceCardPay implements IOrder {
  14. private $error = '';
  15. public function getError(){
  16. return $this->error;
  17. }
  18. public function prePay($args){
  19. $card_id = $args['card_id'];
  20. $price_values_id = $args['price_values_id'];
  21. $rice_card = RiceCardModel::where("id",$card_id)->where("status",1)->where("is_delete",0)->find();
  22. $buy_num = $args['buy_num'];
  23. if(empty($rice_card)){
  24. $this->error = '米卡不存在';
  25. return false;
  26. }
  27. $price_value = PriceValuesModel::where("id",$price_values_id)->where("card_id",$card_id)->find();
  28. if(empty($price_value)){
  29. $this->error = '请选择对应的面值';
  30. return false;
  31. }
  32. if($rice_card->stock<$buy_num){
  33. $this->error = '当前库存不足';
  34. return false;
  35. }
  36. $order['order_no'] = Order::createOrderNoPrefix('');
  37. $order['user_id'] = $args['user_id'];
  38. $order['user_mobile'] = $args['user_mobile'];
  39. $order['rice_card_id'] = $card_id;
  40. $order['rice_card_name'] = $rice_card->name;
  41. $order['rice_card_remark'] = $rice_card->describe;
  42. $order['rice_card_img'] = $rice_card->image_text;
  43. $order['rice_card_price'] = $price_value->price;
  44. $order['rice_card_face_value'] = $price_value->face_value;
  45. $order['buy_num'] = $buy_num;
  46. $total_price = floatval($price_value->price)*intval($buy_num);
  47. $order['total_price'] = $total_price;
  48. $pay_price = $total_price;
  49. $order['pay_price'] = $pay_price;
  50. $order['disaccount_price'] = ($price_value->face_value-$price_value->price)*intval($buy_num);
  51. $order['pay_status'] = 0;
  52. $order['pay_type'] =20;
  53. $order['order_status'] =10;
  54. $order['create_time'] = Date("Y-m-d H:i:s",time());
  55. $order['rice_card_type'] = $rice_card->type;
  56. if($args['total_pay_price']!=$pay_price){
  57. $this->error = '价格有变动,请重新发起支付!';
  58. return false;
  59. }
  60. $model = new RiceCardOrder;
  61. $order_id = $model->createOrderEvent($order);
  62. if(!$order_id){
  63. $this->error = '生成订单出错';
  64. return false;
  65. }
  66. $order['order_id'] = $order_id;
  67. $checkOrder = new CheckOrder;
  68. $order_type = OrderTypeEnum::RCORDER;
  69. $payment = $checkOrder->onPrePayByWechat($order,$order_type);
  70. // $payment = null;
  71. $res = ['order_id' => $order['order_id'], // 订单id
  72. 'pay_type' => 20, // 支付方式
  73. 'payment' => $payment // 微信支付参数
  74. ];
  75. return $res;
  76. }
  77. //重新支付
  78. public function repay($args){
  79. $order_id = $args['order_id'];
  80. $riceOrder = RiceCardOrder::where("id",$order_id)->find();
  81. $order['order_id'] = $order_id;
  82. $order['order_no'] = $riceOrder->order_no;
  83. $order['pay_price'] = $riceOrder->pay_price;
  84. $order_type = OrderTypeEnum::RCORDER;
  85. if($riceOrder->pay_status!=0||$riceOrder->order_status!=10){
  86. $this->error = '当前订单不能支付';
  87. return false;
  88. }
  89. $checkOrder = new CheckOrder;
  90. $payment = $checkOrder->onPrePayByWechat($order,$order_type);
  91. $res = ['order_id' => $order['order_id'], // 订单id
  92. 'pay_type' => 20, // 支付方式
  93. 'payment' => $payment // 微信支付参数
  94. ];
  95. return $res;
  96. }
  97. //回调逻辑处理
  98. public function notifyPay($pay_data){
  99. $order_no = $pay_data['out_trade_no'];
  100. $model = RiceCardOrder::getPayDetail($order_no);
  101. if(empty($model)){
  102. return false;
  103. }
  104. $user = UserModel::detail($model['user_id']);
  105. return $model->transaction(function () use($model,$pay_data,$user) {
  106. $model->save([
  107. 'pay_status'=> 1,
  108. 'pay_time' => Date("Y-m-d H:i:s",time()),
  109. 'order_status' =>30,
  110. 'transaction_id'=>$pay_data['transaction_id']??''
  111. ]
  112. );
  113. $rice_card = RiceCardModel::where("id", $model['rice_card_id'])->find();
  114. $rice_card->sale_num += $model['buy_num']; // 销量增加
  115. $rice_card->save();
  116. $now = Date("Y-m-d H:i:s",time());
  117. for($i=0;$i<$model['buy_num'];$i++){
  118. $data['user_id'] = $model['user_id'];
  119. $data['user_mobile'] = $user['mobile'];
  120. $data['coupon_no'] = '';
  121. $data['coupon_code'] = '';
  122. $data['card_id'] = $model['rice_card_id'];
  123. $data['card_name'] = $model['rice_card_name'];
  124. $data['type'] = $rice_card->type??2;
  125. $data['describe'] = $rice_card->describe??'';
  126. $data['content'] = $rice_card->content??'';
  127. $data['image_id'] = $rice_card->image_id??0;
  128. $data['expire_time'] = date("Y-m-d",strtotime("+20 year"));
  129. $data['face_value'] = $model['rice_card_face_value'];
  130. $data['balance'] = $data['face_value'];
  131. $data['dk_cat_ids'] = $rice_card->dk_cat_ids??'';
  132. $data['effect_state'] = 1;
  133. $data['order_id'] = $model['id'];
  134. $data['create_time'] = $now;
  135. $urcModel = new UserRiceCardModel;
  136. $urcModel->save($data);
  137. $user_rice_card_id = $urcModel->id;
  138. $goodList = RiceCardGoodsModel::where('card_id',$model['rice_card_id'])->select();
  139. foreach($goodList as $row){
  140. $gdata['user_rice_card_id'] = $user_rice_card_id;
  141. $gdata['goods_id'] = $row->goods_id;
  142. $gdata['image_id'] = $row->image_id;
  143. $gdata['goods_sku_id'] = $row->goods_sku_id;
  144. $gdata['goods_sku_no'] = $row->goods_sku_no;
  145. $gdata['goods_name'] = $row->goods_name;
  146. $gdata['goods_props'] = isset($row->goods_props)?json_encode($row->goods_props):'';
  147. $gdata['goods_price'] = $row->goods_price;
  148. $gdata['goods_num'] = $row->goods_num;
  149. $gdata['total_price'] = $row->total_price;
  150. $gdata['is_except'] = $row->is_except;
  151. $gdata['create_time'] = $now;
  152. $gdata['update_time'] = $now;
  153. $ugood = new UserRiceCardGoodsModel;
  154. $ugood->save($gdata);
  155. }
  156. }
  157. return true;
  158. });
  159. }
  160. }