setConfig(); return $action; } /** * Notes: 查询订单 * * @Author: 玄尘 * @Date : 2021/4/30 9:39 * @return \XuanChen\WoUnicomWeb\Action\Query */ public function query() { $action = new Query(); $action->setConfig(); return $action; } /** * Notes: 退款 * * @Author: 玄尘 * @Date : 2021/4/30 9:37 */ public function refund() { $action = new Refund(); $action->setConfig(); return $action; } /** * Notes: 验签 * * @Author: 玄尘 * @Date : 2021/5/11 11:51 * @param $params */ public function sign() { $action = new Sign(); $action->setConfig(); return $action; } /** * Notes: 回调数据 * * @Author: 玄尘 * @Date : 2021/5/11 15:54 * @param $params */ public function callback($inputs) { info($inputs); if (empty($inputs)) { return '缺少必要参数'; } $params = str_replace('$', '&', $inputs); parse_str($params, $data); //验签 $res = $this->sign()->setParams($data)->start(); //日志 $this->createLog($data, $res); //验签成功 if ($res === true) { $channel = Helper::getChannel($data['orderid']); switch ($channel) { case 'welfare': $order = WelfareOrder::where('orderid', $data['orderid'])->first(); if ($order && $order->status == 'UNPAY') { $payment = $order->payment; $payment->paid([ 'type' => 'UNICOM', 'payfloodid' => $data['payfloodid'], ]); $order->paid(); } break; case 'school': $order = ActivitySchoolOrder::where('orderid', $data['orderid'])->first(); if ($order && $order->state == ActivitySchoolOrder::ORDER_UNPAY) { $payment = Payment::where('orderable_type', get_class($order)) ->where('orderable_id', $order->id) ->latest() ->first(); $payment->state = 'SUCCESS'; $payment->out_trade_no = $data['payfloodid']; $payment->type = 'UNICOM'; $payment->paid_at = Carbon::now(); $payment->save(); $order->paid(); } break; case 'petro': $order = ActivityPetroOrder::where('orderid', $data['orderid'])->first(); if ($order && $order->state == ActivityMonthOrder::ORDER_UNPAY) { $payment = Payment::where('orderable_type', get_class($order)) ->where('orderable_id', $order->id) ->latest() ->first(); $payment->state = Payment::STATE_SUCCESS; $payment->out_trade_no = $data['payfloodid']; $payment->type = Payment::TYPT_UNICOM_WEB; $payment->paid_at = Carbon::now(); $payment->save(); $order->paid(); } break; case 'unicom': $order = ActivityUnicomOrder::where('orderid', $data['orderid'])->first(); if ($order && $order->state == 'UNPAY') { $payment = Payment::where('orderable_type', get_class($order)) ->where('orderable_id', $order->id) ->latest() ->first(); $payment->state = 'SUCCESS'; $payment->out_trade_no = $data['payfloodid']; $payment->type = 'UNICOM'; $payment->paid_at = Carbon::now(); $payment->save(); $order->paid(); } break; case 'month': $order = ActivityMonthOrder::where('orderid', $data['orderid'])->first(); if ($order && $order->state == 'UNPAY') { $payment = Payment::where('orderable_type', get_class($order)) ->where('orderable_id', $order->id) ->latest() ->first(); $payment->state = 'SUCCESS'; $payment->out_trade_no = $data['payfloodid']; $payment->type = 'UNICOM'; $payment->paid_at = Carbon::now(); $payment->save(); $order->paid(); } break; case 'web': default: $order = \App\Models\Order::where('orderid', $data['orderid'])->first(); if ($order && $order->state == 'UNPAY') { $payment = Payment::where('orderable_type', get_class($order)) ->where('orderable_id', $order->id) ->latest() ->first(); $payment->state = 'SUCCESS'; $payment->out_trade_no = $data['payfloodid']; $payment->type = 'UNICOM'; $payment->paid_at = Carbon::now(); $payment->save(); $order->paid(); } break; } $this->updateLog(['SUCCESS']); return 'SUCCESS'; } else { $this->updateLog(['验签失败']); return '验签失败'; } } }