219 lines
7.0 KiB
PHP
219 lines
7.0 KiB
PHP
<?php
|
|
|
|
namespace XuanChen\WoUnicomWeb;
|
|
|
|
use App\Helpers\Helper;
|
|
use App\Models\ActivityMonthOrder;
|
|
use App\Models\ActivitySchoolOrder;
|
|
use App\Models\ActivityPetroOrder;
|
|
use App\Models\ActivityUnicomOrder;
|
|
use App\Models\Payment;
|
|
use App\Models\Welfare;
|
|
use App\Models\WelfareOrder;
|
|
use App\Models\WelfarePayment;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Str;
|
|
use XuanChen\WoUnicomWeb\Action\Init;
|
|
use XuanChen\WoUnicomWeb\Action\Order;
|
|
use XuanChen\WoUnicomWeb\Action\Query;
|
|
use XuanChen\WoUnicomWeb\Action\Refund;
|
|
use XuanChen\WoUnicomWeb\Action\Sign;
|
|
use XuanChen\WoUnicomWeb\Traits\Log;
|
|
|
|
/**
|
|
* 沃钱包支付
|
|
*/
|
|
class WoUnicomWeb
|
|
{
|
|
|
|
use Log;
|
|
|
|
/**
|
|
* Notes: 下单
|
|
*
|
|
* @Author: 玄尘
|
|
* @Date : 2021/4/30 9:36
|
|
* @return \XuanChen\WoUnicomWeb\Action\Order
|
|
*/
|
|
public function order()
|
|
{
|
|
$action = new Order();
|
|
$action->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)
|
|
{
|
|
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 = Payment::TYPE_UNICOM_WEB;
|
|
$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::TYPE_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 = Payment::TYPE_UNICOM_WEB;
|
|
$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 = Payment::TYPE_UNICOM_WEB;
|
|
$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 '验签失败';
|
|
}
|
|
}
|
|
|
|
}
|