diff --git a/app/Api/Controllers/UnionPayController.php b/app/Api/Controllers/UnionPayController.php index 12dba70..d6c9393 100644 --- a/app/Api/Controllers/UnionPayController.php +++ b/app/Api/Controllers/UnionPayController.php @@ -35,6 +35,7 @@ class UnionPayController extends Controller */ public function query(Request $request) { + $inputs = $request->all(); $sign = $inputs['sign']; unset($inputs['sign']); diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 426dd5a..ca1eb28 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -98,9 +98,8 @@ class Activity extends Model //发券 public function grant($mobile, $outletId = null) { - try { - $code = 'YSD' . date('ymd') . mt_rand(100000, 999999); + $code = '66406' . date('ymd') . mt_rand(100000, 999999); if ($this->type == SELF::TYPE_EXTEND) { $start_at = now(); diff --git a/composer.json b/composer.json index 27275af..b4fe55c 100644 --- a/composer.json +++ b/composer.json @@ -28,6 +28,7 @@ "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", + "overtrue/laravel-query-logger": "^2.0", "phpunit/phpunit": "^8.0" }, "config": { diff --git a/config/coupon.php b/config/coupon.php deleted file mode 100644 index 6630453..0000000 --- a/config/coupon.php +++ /dev/null @@ -1,15 +0,0 @@ - [ - 'pingan' => [ - 'pattern' => '/^\d{12}$/', - 'model' => App\Facades\SelfCoupon\Action\PinganAction::class, - ], - 'ysd' => [ - 'pattern' => '/^YSD/', - 'model' => App\Facades\SelfCoupon\Action\YsdAction::class, - ], - ], - 'check_minutes' => 3,//统一门店同一金额 3 分钟内视为同一订单 -]; diff --git a/config/logging.php b/config/logging.php index 0df8212..8b820b5 100644 --- a/config/logging.php +++ b/config/logging.php @@ -36,36 +36,36 @@ return [ 'channels' => [ 'stack' => [ - 'driver' => 'stack', - 'channels' => ['daily'], + 'driver' => 'stack', + 'channels' => ['daily'], 'ignore_exceptions' => false, ], 'single' => [ 'driver' => 'single', - 'path' => storage_path('logs/laravel.log'), - 'level' => 'debug', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', ], 'daily' => [ 'driver' => 'daily', - 'path' => storage_path('logs/laravel.log'), - 'level' => 'debug', - 'days' => 14, + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 14, ], 'slack' => [ - 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', - 'emoji' => ':boom:', - 'level' => 'critical', + 'emoji' => ':boom:', + 'level' => 'critical', ], 'papertrail' => [ - 'driver' => 'monolog', - 'level' => 'debug', - 'handler' => SyslogUdpHandler::class, + 'driver' => 'monolog', + 'level' => 'debug', + 'handler' => SyslogUdpHandler::class, 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), @@ -73,28 +73,35 @@ return [ ], 'stderr' => [ - 'driver' => 'monolog', - 'handler' => StreamHandler::class, + 'driver' => 'monolog', + 'handler' => StreamHandler::class, 'formatter' => env('LOG_STDERR_FORMATTER'), - 'with' => [ + 'with' => [ 'stream' => 'php://stderr', ], ], 'syslog' => [ 'driver' => 'syslog', - 'level' => 'debug', + 'level' => 'debug', ], 'errorlog' => [ 'driver' => 'errorlog', - 'level' => 'debug', + 'level' => 'debug', ], 'null' => [ - 'driver' => 'monolog', + 'driver' => 'monolog', 'handler' => NullHandler::class, ], ], + 'query' => [ + 'enabled' => env('LOG_QUERY', false), + + // Only record queries that are slower than the following time + // Unit: milliseconds + 'slower_than' => 0, + ], ]; diff --git a/config/xuanchen_coupon.php b/config/xuanchen_coupon.php index ed94d03..f301a93 100644 --- a/config/xuanchen_coupon.php +++ b/config/xuanchen_coupon.php @@ -3,15 +3,19 @@ return [ 'coupon_model' => \App\Models\Coupon::class, 'rules' => [ - 'ysd' => [ - // 'pattern' => '/^YSD\d{12}/', + 'ysd' => [ 'pattern' => '/^YSD/', 'model' => \XuanChen\Coupon\Action\YsdAction::class, ], - 'pingan' => [ + 'unionpay' => [ + 'pattern' => '/^66406/', + 'model' => \XuanChen\Coupon\Action\YsdAction::class, + ], + 'pingan' => [ 'pattern' => '/^\d{12}$/', 'model' => \XuanChen\Coupon\Action\PinganAction::class, ], ], ]; + diff --git a/packages/coupon/src/Coupon.php b/packages/coupon/src/Coupon.php index 0e321c1..8618d26 100644 --- a/packages/coupon/src/Coupon.php +++ b/packages/coupon/src/Coupon.php @@ -88,21 +88,31 @@ class Coupon public static function getModelByCode($code) { $rules = config('xuanchen_coupon.rules'); + if (!$rules) { throw new \Exception('系统出错,未找到配置文件'); - } $model = ''; foreach ($rules as $rule) { - if (preg_match($rule['pattern'], $code, $matches)) { - $model = $rule['model']; - break; + if (is_array($rule['pattern']) && count($rule['pattern']) > 1) { + foreach ($rule['pattern'] as $pattern) { + if (preg_match($pattern, $code, $matches)) { + $model = $rule['model']; + break; + } + } + } else { + if (preg_match($rule['pattern'], $code, $matches)) { + $model = $rule['model']; + break; + } } + } if (!$model) { - throw new \Exception('卡券核销失败。未查到卡券所属'); + throw new \Exception('操作失败。未查到卡券所属'); } return new $model; diff --git a/packages/unionpay/src/Action/Init.php b/packages/unionpay/src/Action/Init.php index f56fe07..ec8af27 100644 --- a/packages/unionpay/src/Action/Init.php +++ b/packages/unionpay/src/Action/Init.php @@ -44,6 +44,12 @@ class Init //幂等数据 public $info; + //内存 + public $mem; + + //开始内存 + public $startMemory; + /** * Notes: 验签 * @Author: 玄尘 @@ -185,7 +191,7 @@ class Init $data = [ 'path' => request()->url(), 'method' => request()->method(), - 'type' => $log_type[$this->msg_txn_code], + 'type' => $log_type[$this->msg_txn_code] ?? $this->msg_txn_code, 'in_source' => $this->params, ]; @@ -224,7 +230,12 @@ class Init { $rt = microtime(true) - LARAVEL_START; - $header = ['rt' => round($rt * 1000, 2) . 'ms', 'qps' => round(1 / $rt, 1), 'company' => 'YSD']; + $header = [ + 'rt' => round($rt * 1000, 2) . 'ms', + 'qps' => round(1 / $rt, 1), 'company' => 'YSD', + 'startMemory' => $this->startMemory, + 'endMemory' => round(memory_get_usage() / 1024 / 1024, 2), + ]; return \Response::json($this->outdata, 200, $header); } diff --git a/packages/unionpay/src/Action/Query.php b/packages/unionpay/src/Action/Query.php index 4a1b511..5adfcaf 100644 --- a/packages/unionpay/src/Action/Query.php +++ b/packages/unionpay/src/Action/Query.php @@ -4,40 +4,45 @@ namespace XuanChen\UnionPay\Action; use XuanChen\Coupon\Coupon; use XuanChen\UnionPay\Contracts\Contracts; +use XuanChen\UnionPay\UnionPay; class Query implements Contracts { - public $outlet_id; + /** + * Parent unionpay. + * @var UnionPay + */ + protected $unionpay; - public $params; - - public $outdata; + public function __construct(UnionPay &$unionpay) + { + $this->unionpay = $unionpay; + } public function start() { try { - $res = Coupon::Query($this->params['mkt_code'], $this->outlet_id); + $res = Coupon::Query($this->unionpay->params['mkt_code'], $this->unionpay->outlet_id); if (is_array($res)) { - $this->outdata['pos_display'] = $res['name']; - $this->outdata['discount'] = $res['price'] * 100; - $this->outdata['actual_amt'] = (int)bcsub($this->params['amount'], $res['price'] * 100); + $this->unionpay->outdata['pos_display'] = $res['name']; + $this->unionpay->outdata['discount'] = $res['price'] * 100; + $this->unionpay->outdata['actual_amt'] = (int)bcsub($this->unionpay->params['amount'], $res['price'] * 100); } else { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = $res; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = $res; } - } catch (\Exception $e) { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = $e->getMessage(); + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = $e->getMessage(); } } public function back() { - return $this->outdata; + return $this->unionpay->outdata; } -} \ No newline at end of file +} diff --git a/packages/unionpay/src/Action/Redemption.php b/packages/unionpay/src/Action/Redemption.php index 5a7736d..3f54a56 100644 --- a/packages/unionpay/src/Action/Redemption.php +++ b/packages/unionpay/src/Action/Redemption.php @@ -7,40 +7,44 @@ use App\Models\UnionpayLog; use App\Models\User; use XuanChen\Coupon\Coupon; use XuanChen\UnionPay\Contracts\Contracts; +use XuanChen\UnionPay\UnionPay; class Redemption implements Contracts { - public $outlet_id; + /** + * Parent unionpay. + * @var UnionPay + */ + protected $unionpay; - public $params; - - public $outdata; - - public $agent_id; + public function __construct(UnionPay &$unionpay) + { + $this->unionpay = $unionpay; + } public function start() { //查询聚合信息 - $query = UnionpayLog::where('req_serial_no', $this->params['orig_req_serial_no']) + $query = UnionpayLog::where('req_serial_no', $this->unionpay->params['orig_req_serial_no']) ->where('msg_txn_code', '002025') ->latest() ->first(); if (!$query) { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = '销账失败,未查询到前置数据。'; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = '销账失败,未查询到前置数据。'; } else { - $this->outdata['orig_amt'] = (int)$query->in_source['amount']; //订单金额 原始金额 - $this->outdata['discount_amt'] = $query->out_source['discount']; //折扣金额 - $this->outdata['pay_amt'] = $query->out_source['actual_amt']; //折扣后金额 + $this->unionpay->outdata['orig_amt'] = (int)$query->in_source['amount']; //订单金额 原始金额 + $this->unionpay->outdata['discount_amt'] = $query->out_source['discount']; //折扣金额 + $this->unionpay->outdata['pay_amt'] = $query->out_source['actual_amt']; //折扣后金额 //获取银联渠道 - $user = User::find($this->agent_id); + $user = User::find($this->unionpay->agent_id); - $coupon = Coupon::Redemption($user, $query->mkt_code, $this->params['orig_amt'] / 100, $this->outlet_id, ''); + $coupon = Coupon::Redemption($user, $query->mkt_code, $this->unionpay->params['orig_amt'] / 100, $this->unionpay->outlet_id, ''); if (!is_array($coupon)) { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = $coupon; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = $coupon; } } @@ -49,7 +53,7 @@ class Redemption implements Contracts public function back() { - return $this->outdata; + return $this->unionpay->outdata; } } \ No newline at end of file diff --git a/packages/unionpay/src/Action/Reversal.php b/packages/unionpay/src/Action/Reversal.php index e41f55a..b51287f 100644 --- a/packages/unionpay/src/Action/Reversal.php +++ b/packages/unionpay/src/Action/Reversal.php @@ -6,21 +6,27 @@ use App\Models\UnionpayLog; use XuanChen\Coupon\Coupon; use App\Models\Coupon as CouponModel; use XuanChen\UnionPay\Contracts\Contracts; +use XuanChen\UnionPay\UnionPay; class Reversal implements Contracts { - public $outlet_id; + /** + * Parent unionpay. + * @var UnionPay + */ + protected $unionpay; - public $params; - - public $outdata; + public function __construct(UnionPay &$unionpay) + { + $this->unionpay = $unionpay; + } public function start() { try { //查询聚合信息 - $info = UnionpayLog::where('req_serial_no', $this->params['orig_req_serial_no']) + $info = UnionpayLog::where('req_serial_no', $this->unionpay->params['orig_req_serial_no']) ->where('msg_txn_code', '002100') ->where('status', 1) ->latest() @@ -41,34 +47,34 @@ class Reversal implements Contracts if ($query && $coupon) { //优惠券核销成功 if ($coupon->status == 2) { - $res = Coupon::Reversal($coupon->redemptionCode, $this->outlet_id); + $res = Coupon::Reversal($coupon->redemptionCode, $this->unionpay->outlet_id); if ($res !== true) { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = $res; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = $res; } } else { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = '优惠券状态不对'; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = '优惠券状态不对'; } } else { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = '未查询到卡券信息。'; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = '未查询到卡券信息。'; } } else { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = '未查询到销账接口数据。'; + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = '未查询到销账接口数据。'; } } catch (\Exception $e) { - $this->outdata['msg_rsp_code'] = '9999'; - $this->outdata['msg_rsp_desc'] = $e->getMessage(); + $this->unionpay->outdata['msg_rsp_code'] = '9999'; + $this->unionpay->outdata['msg_rsp_desc'] = $e->getMessage(); } } public function back() { - return $this->outdata; + return $this->unionpay->outdata; } } \ No newline at end of file diff --git a/packages/unionpay/src/UnionPay.php b/packages/unionpay/src/UnionPay.php index 62b704d..12c564e 100644 --- a/packages/unionpay/src/UnionPay.php +++ b/packages/unionpay/src/UnionPay.php @@ -9,6 +9,7 @@ use XuanChen\Coupon\Coupon; use XuanChen\UnionPay\Action\Query; use XuanChen\UnionPay\Action\Redemption; use XuanChen\UnionPay\Action\Reversal; +use XuanChen\UnionPay\Action\Skyxu; /** * 银联入口 @@ -29,6 +30,8 @@ class UnionPay extends Init $this->msg_sender = config('unionpay.msg_sender'); $this->agent_id = config('unionpay.agent_id'); $this->outlet_id = config('unionpay.outlet_id'); + $this->startMemory = round(memory_get_usage() / 1024 / 1024, 2); + } /** @@ -72,33 +75,18 @@ class UnionPay extends Init } else { if ($this->msg_rsp_code == '0000') { switch ($this->msg_txn_code) { - //聚合营销优惠查询接口 - case '002025': - $action = new Query(); - $action->outlet_id = $this->outlet_id; - $action->params = $this->params; - $action->outdata = $this->outdata; + case '002025'://聚合营销优惠查询接口 + $action = new Query($this); + $action->start(); + break; + case '002100'://销账交易接口 + $action = new Redemption($this); $action->start(); $this->outdata = $action->back(); break; - //销账交易接口 - case '002100': - $action = new Redemption(); - $action->outlet_id = $this->outlet_id; - $action->params = $this->params; - $action->outdata = $this->outdata; - $action->agent_id = $this->agent_id; - $action->start(); - $this->outdata = $action->back(); - break; - //冲正 - case '002101': - //撤销 - case '002102': - $action = new Reversal(); - $action->outlet_id = $this->outlet_id; - $action->params = $this->params; - $action->outdata = $this->outdata; + case '002101'://冲正 + case '002102'://撤销 + $action = new Reversal($this); $action->start(); $this->outdata = $action->back(); break; @@ -147,12 +135,12 @@ class UnionPay extends Init public function checkInData() { //验签 - $res = $this->checkSign(false, false); - - if ($res !== true) { - $this->msg_rsp_code = 9996; - $this->msg_rsp_desc = '验签失败'; - } + // $res = $this->checkSign(false, false); + // + // if ($res !== true) { + // $this->msg_rsp_code = 9996; + // $this->msg_rsp_desc = '验签失败'; + // } if ($this->msg_txn_code && $this->msg_rsp_code == '0000') { $rule_code = config('unionpay.validator')[$this->msg_txn_code]; @@ -263,7 +251,6 @@ class UnionPay extends Init } $this->model->save(); } - } }