where([['id','=',$post['id']],['status','=',1],['pay_way','=',$post['payWay']]])->find(); //订单状态是否已支付 if(!$resOrder){ return 2; } if($post['payWay'] == 1){ //退款参数赋值 $data['order_no'] = $resOrder['ord_no']; $data['total_price'] = $resOrder['money']; $data['reason'] = $post['reason']; $data['op_user_id'] = config('wxpay.mch_id'); $result = self::refund($data); if($result['result_code'] == 'SUCCESS'){ self::where([['id','=',$post['id']],['status','=',1]])->update(['status' => 2,'refund_time'=>time()]); return true; } return false; }else{ $data['order_no'] = $resOrder['ord_no']; $data['total_price'] = $resOrder['money']; $data['reason'] = $post['reason']; $result = self::aliRefund($data); if($result->code == 10000 && $result->msg == 'Success'){ self::where([['id','=',$post['id']],['status','=',1],['pay_way','=',$post['payWay']]])->update(['status' => 2,'refund_time'=>time()]); return true; } } } /** * 微信支付退款 * @param $orderInfo * @throws \WxPayException */ private static function refund($orderInfo) { $inputObj = new \WxPayUnifiedOrder(); $out_refund_no = date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); $inputObj->SetOut_trade_no($orderInfo['order_no']); $inputObj->SetOut_refund_no($out_refund_no); $inputObj->SetTotal_fee(intval($orderInfo['total_price']*100)); $inputObj->SetRefund_fee(intval($orderInfo['total_price']*100)); $inputObj->SetRefund_desc($orderInfo['reason']); $inputObj->SetOp_user_id( $orderInfo['op_user_id']); $wxOrder = \WxPayApi::refund($inputObj); return $wxOrder; } /** * 支付寶退款 * @param $orderInfo */ private static function aliRefund($orderInfo) { require '../extend/alipay/wappay/buildermodel/AlipayTradeRefundContentBuilder.php';// 加载交易服务 require '../extend/alipay/wappay/service/AlipayTradeService.php';// 加载交易服务 $out_trade_no = trim($orderInfo['order_no']); //退款金额,不能大于订单总金额 $refund_amount=trim($orderInfo['total_price']); //退款的原因说明 $refund_reason=trim($orderInfo['reason']); $config = config('alipay.'); $RequestBuilder = new \AlipayTradeRefundContentBuilder(); $RequestBuilder->setOutTradeNo($out_trade_no); $RequestBuilder->setRefundAmount($refund_amount); $RequestBuilder->setRefundReason($refund_reason); $Response = new \AlipayTradeService($config); $result=$Response->Refund($RequestBuilder); return $result; } /** * 获取订单列表信息 * @param int $page 当前页 * @param int $limit 每页显示数量 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function orderList($page = 1, $limit = 10, $search = []) { $where = []; //搜索条件 foreach ($search as $key => $value) { if (!empty($value)) { switch ($key) { case 'add_time': $value_list = explode(" - ", $value); $value_list[0] = strtotime($value_list[0]); $value_list[1] = strtotime($value_list[1]); $where[] = [$key, 'BETWEEN', ["$value_list[0]", "$value_list[1]"]]; break; case 'stu_yzy_province': $where[] = [$key, '=', $value]; break; case 'telnum': $where[] = [$key, '=', $value]; break; case 'ord_no': $where[] = [$key, '=', $value]; break; case 'pay_way': $where[] = [$key, '=', $value]; break; case 'status': if($value > 0){ $where[] = [$key, '=', $value-1]; } break; default: !empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%']; } } } $count = self::where($where)->count(); $data = self::field('id,score,add_time,pay_time,vip,wenli,mykemustr,wenli,province_title,telnum,money,ord_no,refund_time,status,user_id,pay_way')->where($where)->page($page, $limit)->order([ 'add_time' => 'desc'])->select(); empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!'; //获取配置权限名称 $vipNameArr = config('product.vipName'); foreach ($data as $key => $val){ $data[$key]['order_time'] = ''; $data[$key]['vipName'] = $vipNameArr[$val['vip']]; $data[$key]['order_time'] .= "下单:".date('Y-m-d H:i:s',$val['add_time']); if($val['pay_time']){ $data[$key]['order_time'] .="_支付:". date('Y-m-d H:i:s',$val['pay_time']); } if($val['refund_time']){ $data[$key]['order_time'] .="_退款:". date('Y-m-d H:i:s',$val['refund_time']); } $val['wenli'] = $val['wenli'] = config('setSub.subTypeName')[$val['wenli']]; //拼接用户信息 $data[$key]['userInfo'] = $val['province_title']."_".$val['score']."_".$val['wenli']."_".$val['mykemustr']; } $info = [ 'limit' => $limit, 'page_current' => $page, 'page_sum' => ceil($count / $limit), ]; $list = [ 'code' => 0, 'msg' => $msg, 'count' => $count, 'info' => $info, 'data' => $data, ]; return $list; } }