15 Commits
核销 ... v1.2

Author SHA1 Message Date
6de6f5960c 微调 2021-01-29 16:53:37 +08:00
81a6d17ce0 链接sftp功能 2021-01-26 15:07:05 +08:00
e15b205d00 整理代码 2021-01-22 17:55:09 +08:00
dc32f39c57 提交正式的公钥密钥 2021-01-22 16:59:32 +08:00
0c4c8f7a00 [更新] 调整活动 2021-01-22 16:05:15 +08:00
cad079a9a7 微调 2021-01-14 10:17:29 +08:00
ef6e901edf 增加测试代码 2020-12-30 15:40:14 +08:00
ea2635a0e4 更新包 2020-12-21 15:12:43 +08:00
c1af490eff 调整代码 2020-12-16 11:43:48 +08:00
a94e39c07d 微调 2020-12-14 09:07:49 +08:00
e5b53e0fb1 测试 2020-12-07 10:52:52 +08:00
0be23ad9e7 修改config 2020-12-07 10:23:26 +08:00
8279083391 修改UserController 2020-12-07 09:53:12 +08:00
67834f3e29 增加说明 2020-11-27 11:13:06 +08:00
53dd1a984f 删除无用文件 2020-11-27 11:04:46 +08:00
36 changed files with 1082 additions and 1010 deletions

1
.gitignore vendored
View File

@@ -8,3 +8,4 @@
/storage/framework /storage/framework
/storage/debugbar/ /storage/debugbar/
/bootstrap/cache /bootstrap/cache
/upload

View File

@@ -93,6 +93,8 @@ class IndexController extends AdminController
$filter->column(1 / 2, function ($filter) { $filter->column(1 / 2, function ($filter) {
$filter->between('start_at', '开始时间')->datetime(); $filter->between('start_at', '开始时间')->datetime();
$filter->between('end_at', '结束时间')->datetime(); $filter->between('end_at', '结束时间')->datetime();
$filter->equal('channel', '核销途径')->select(Activity::CHANNELS);
}); });
}); });
@@ -107,6 +109,13 @@ class IndexController extends AdminController
return $this->type_text; return $this->type_text;
}); });
$grid->column('channel', '核销途径')
->using(Activity::CHANNELS)
->label([
Activity::CHANNEL_YSD => 'info',
Activity::CHANNEL_UNION => 'success',
]);
$grid->column('days', '延期(天)'); $grid->column('days', '延期(天)');
$grid->column('rule.full', '满足金额'); $grid->column('rule.full', '满足金额');
$grid->column('rule.take', '扣除金额'); $grid->column('rule.take', '扣除金额');
@@ -173,6 +182,12 @@ class IndexController extends AdminController
}) })
->required(); ->required();
$form->radio('channel', '核销途径')
->options(Activity::CHANNELS)
->default(Activity::CHANNEL_YSD)
->help('券码核销的途径亿时代是自己核销银联是银联pos核销')
->required();
$form->switch('status', '状态')->default(1); $form->switch('status', '状态')->default(1);
$form->switch('need_check', '多次校验') $form->switch('need_check', '多次校验')
->default(1) ->default(1)

View File

@@ -49,6 +49,7 @@ class IndexController extends AdminController
}); });
$grid->column('id', '#ID#'); $grid->column('id', '#ID#');
// $grid->column('path', '请求地址'); // $grid->column('path', '请求地址');
$grid->column('请求地址')->display(function ($title, $column) { $grid->column('请求地址')->display(function ($title, $column) {
return '展开'; return '展开';
@@ -58,6 +59,8 @@ class IndexController extends AdminController
return new Table($header, $array); return new Table($header, $array);
}); });
$grid->column('created_at', '提交时间');
$grid->column('method', '模式'); $grid->column('method', '模式');
// $grid->column('in_source', '请求参数') // $grid->column('in_source', '请求参数')
// ->display(function ($title, $column) { // ->display(function ($title, $column) {
@@ -96,7 +99,6 @@ class IndexController extends AdminController
return $out_source; return $out_source;
}); });
$grid->column('created_at', '提交时间');
return $grid; return $grid;
} }

View File

@@ -1,91 +0,0 @@
<?php
namespace App\Admin\Controllers\Unionpay;
use App\Admin\Actions\User\Callback;
use App\Admin\Actions\User\Profit;
use App\Admin\Actions\User\ReCode;
use App\Admin\Actions\User\RefD3Key;
use App\Admin\Exporters\UsersExport;
use App\Admin\Renderable\Unionpay\InData;
use App\Admin\Renderable\Unionpay\OutData;
use App\Models\Area;
use App\Models\UnionpayLog;
use App\Models\User;
use Auth;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Widgets\Table;
use Illuminate\Http\Request;
use RuLong\Identity\Models\Identity;
class IndexController extends AdminController
{
protected $title = '银联操作日志';
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new UnionpayLog);
$grid->disableActions();
$grid->disableCreateButton();
$grid->model()->orderBy('id', 'desc');
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('msg_txn_code', '交易类型')->select(config('unionpay.type'));
});
$filter->column(1 / 2, function ($filter) {
$filter->equal('req_serial_no', '流水号');
$filter->equal('orig_req_serial_no', '原流水号');
});
});
$grid->column('id', '#ID#');
$grid->column('msg_txn_code', '交易类型')
->using(config('unionpay.type'))
->label();
// $grid->column('msg_crrltn_id', '消息关联号');
$grid->column('msg_time', '报文日期');
$grid->column('mkt_code', '券码');
$grid->column('msg_sys_sn', '平台流水号');
$grid->column('req_serial_no', '流水号');
$grid->column('orig_req_serial_no', '原流水号');
$grid->column('status', '状态')
->using(UnionpayLog::STATUS)
->label([
0 => 'success',
1 => 'warning',
]);
$grid->column('in_source', '请求参数')
->display(function ($title, $column) {
return '点击展开';
})->modal(InData::class);
$grid->column('out_source', '返回参数')
->display(function ($title, $column) {
return '点击展开';
})->modal(OutData::class);
// $grid->column('sett_date', '清算日期');
$grid->column('created_at', '注册时间');
$grid->disableExport(false);
$grid->export(function ($export) {
$export->filename($this->title . date("YmdHis"));
});
return $grid;
}
}

View File

@@ -1,26 +0,0 @@
<?php
namespace App\Admin\Renderable\Unionpay;
use App\Models\UnionpayLog;
use App\Models\User;
use Encore\Admin\Widgets\Table;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
class InData implements Renderable
{
public function render($key = null)
{
$log = UnionpayLog::find($key);
$in_source = $log->in_source;
if (is_array($in_source) && count($in_source) > 1) {
$table = new Table(['名称', '值'], $in_source, ['panel', ' panel-default']);
return $table->render();
}
}
}

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Admin\Renderable\Unionpay;
use App\Models\UnionpayLog;
use Encore\Admin\Widgets\Table;
use Illuminate\Contracts\Support\Renderable;
class OutData implements Renderable
{
public function render($key = null)
{
$log = UnionpayLog::find($key);
$out_source = $log->out_source;
if (is_array($out_source) && count($out_source) > 1) {
unset($out_source['sign']);
$table = new Table(['名称', '值'], $out_source, ['panel ', 'panel-success']);
return $table->render();
}
}
}

View File

@@ -55,7 +55,4 @@ Route::group([
$router->resource('activitycoupons', 'Activity\CouponController'); $router->resource('activitycoupons', 'Activity\CouponController');
$router->resource('activitycouponlogs', 'Activity\LogController'); $router->resource('activitycouponlogs', 'Activity\LogController');
//银联日志
$router->resource('unionpays', 'Unionpay\IndexController');
}); });

View File

@@ -120,7 +120,7 @@ trait ApiResponse
* @Author :<C.Jason> * @Author :<C.Jason>
* @Date :2018-05-22 * @Date :2018-05-22
* @param [type] $data [description] * @param [type] $data [description]
* @param string $status [description] * @param string $log
* @return [type] [description] * @return [type] [description]
*/ */
public function success($data, $log = '') public function success($data, $log = '')

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Api\Controllers;
use Illuminate\Http\Request;
use XuanChen\UnionPay\UnionPay;
use Illuminate\Support\Facades\Http;
class UnionPayController extends Controller
{
public function index(Request $request)
{
$a = '0.1';
$b = '0.1';
dump($a > $b);
$action = new UnionPay($request->all());
// $sign = $action->getSign(false);
$sign = 'd8e5bf46d0d9f1da702170c2e141d85cf3ca785106886dbfedb3310ee9ce2ca3f18a2e6c179ec9908fc4f41d05df463634106918bdbefc63b8f199c7d2f3b0d45510b4dd6ccdf4549e11a8551a5098b14c01fdaa5840a4608f462fdafdc14b8f2a35471da315d8245a4ef6281b6e04bd22d5a266500a6caf6e5203202c37111d';
$action->sign = $sign;
$res = $action->checkSign(false, false);
dump('签名: ' . $sign);
$res_str = ($res === true) ? '成功' : '失败';
dump('验签结果:' . $res_str);
dd($action);
}
/**
* Notes: 银联接口
* @Author: 玄尘
* @Date : 2020/9/28 16:31
* @param Request $request
* @return mixed
*/
public function query(Request $request)
{
$inputs = $request->all();
$app = app('xuanchen.unionpay');
$app->setParams($inputs);
$app->start();
return $app->respond();
}
}

View File

@@ -41,7 +41,7 @@ class UserController extends Controller
{ {
$inputdata = $request->all(); $inputdata = $request->all();
$res = $this->checkSign($request); $res = $this->checkSign($request);
//获取解密后数据
$inputdata['jiemi'] = $res; $inputdata['jiemi'] = $res;
$log = $this->createLog($request->url(), 'POST', $inputdata, 'grant'); //添加日志 $log = $this->createLog($request->url(), 'POST', $inputdata, 'grant'); //添加日志
@@ -184,11 +184,20 @@ class UserController extends Controller
$total = $res['total'] ?? ''; //订单总额; $total = $res['total'] ?? ''; //订单总额;
$outletId = $res['outletId'] ?? ''; //网点id; $outletId = $res['outletId'] ?? ''; //网点id;
$orderid = $res['orderid'] ?? ''; //订单id; $orderid = $res['orderid'] ?? ''; //订单id;
$from = $res['from'] ?? ''; //来源;
$redemptionCode = trim($redemptionCode); $redemptionCode = trim($redemptionCode);
$outletId = trim($outletId); $outletId = trim($outletId);
$coupon = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId, $orderid); $coupon = Coupon::Redemption(
$this->user,
$redemptionCode,
$total,
$outletId,
$orderid,
$from
);
if (is_string($coupon)) { if (is_string($coupon)) {
return $this->error($coupon, $log); return $this->error($coupon, $log);
} }

View File

@@ -20,8 +20,4 @@ Route::group(['prefix' => 'V1'], function () {
Route::post('ticket/cancel', 'WoController@cancel'); //退业务 Route::post('ticket/cancel', 'WoController@cancel'); //退业务
Route::post('ticket/query', 'WoController@query'); //退业务 Route::post('ticket/query', 'WoController@query'); //退业务
//银联相关
Route::post('unionpay/index', 'UnionPayController@index');
Route::post('unionpay/query', 'UnionPayController@query');
}); });

View File

@@ -2,330 +2,72 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Coupon; use Illuminate\Http\Request;
use App\Models\TestLog; use League\Flysystem\Sftp\SftpAdapter;
use App\Models\User; use League\Flysystem\Filesystem;
use Illuminate\Queue\Jobs\Job; use XuanChen\UnionPay\Check;
use XuanChen\Coupon\Action\pingan\Query;
use XuanChen\Coupon\Action\ysd\YsdQuery;
class SkyxuController class SkyxuController extends Controller
{ {
public $user; /**
* Notes: 链接sftp
public $jiemi; * @Author: 玄尘
* @Date : 2021/1/26 8:18
public $query_coupon; */
public function sftp()
public $ticket;
public $type;
public function index()
{ {
$list = Job::get(); $app = app('xuanchen.unionpay.check');
dd($list); $app->date = '20190722';
Coupon::whereBetween('id', ['70091', '70513']) $app->login();
->orderBy('created_at', 'ASC') $app->hasFile();
->chunk(100, function ($logs) { $app->start();
foreach ($logs as $log) { dump($app->msg);
if (preg_match('/^YSD/', $log->redemptionCode, $matches)) {
$type = Coupon::TYPE_YSD; die();
} else { $path = '/home/wwwroot/pingan/upload/';
$type = Coupon::TYPE_PINGAN; $name = 'JYMX66007320190722.txt';
$adapter = new SftpAdapter([
'host' => '123.57.16.212',
'port' => 22,
'username' => 'root',
'password' => 'Anetadmin1',
'privateKey' => '',
'passphrase' => '',
'root' => $path,
'timeout' => 10,
'directoryPerm' => 0755,
]);
$filesystem = new Filesystem($adapter);
$lists = $filesystem->listContents();
$content = $filesystem->read($name);
$content = str_replace("\n", "br", $content);
dump($content);
$content = explode("br", $content);
foreach ($content as $item) {
$array = explode('|', $item);
foreach ($array as $item) {
echo $item . "<br>";
}
echo '----------------------------------------' . "<br>";
}
dd($content);
} }
$log->type = $type; public function index(Request $request)
$log->save();
}
});
dd();
$count = TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26'])
->where('type', 'freezecoupon')
->where('back', '0')
->orderBy('created_at', 'ASC')
->count();
dump($count);
// $list = TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26'])
// ->where('type', 'freezecoupon')
// ->where('back', '0')
// ->orderBy('created_at', 'ASC')
// ->get();
//
//// $data = [];
//// foreach ($list as $cou) {
//// $data[] = $cou->in_source['jiemi']['redemptionCode'];
//// }
//// dump($data);
if ($count > 1) {
try {
TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26'])
->where('type', 'freezecoupon')
->where('back', '0')
->orderBy('created_at', 'ASC')
->chunk(100, function ($logs) {
$su = $er = [];
foreach ($logs as $log) {
$this->jiemi = $log->in_source['jiemi'];
$this->user = User::where('outlet_id', $this->jiemi['outletId'])->first();
$this->getQuery();
if (is_string($this->queryData)) {
$er[$this->jiemi['redemptionCode']] = $this->queryData;
continue;
}
if ($this->jiemi['redemptionCode'] == '157922465040') {
dump($this->jiemi);
dump($this->ticket);
dump($this->queryData);
}
$this->checkCode();
if (is_string($this->ticket)) {
$er[$this->jiemi['redemptionCode']] = $this->ticket;
$er[] = $this->jiemi['redemptionCode'];
continue;
}
$status = isset($log->out_source['code']) ? 2 : 3;
$exists = Coupon::where('status', $status)
->where('redemptionCode', $this->jiemi['redemptionCode'])->exists();
if ($exists && $status != 3) {
$er[$this->jiemi['redemptionCode']] = [
$log->out_source,
];
continue;
}
$couponData = [
'user_id' => $this->user->parent->id,
'type' => Coupon::TYPE_YSD,
'outletId' => $this->user->outlet_id,
'orderid' => '',
'PaOutletId' => $this->queryData['PaOutletId'],
'redemptionCode' => $this->jiemi['redemptionCode'],
'thirdPartyGoodsId' => $this->queryData['thirdPartyGoodsId'],
'couponName' => $this->queryData['couponName'],
'price' => $this->ticket['price'],
'total' => $this->jiemi['total'],
'profit' => $this->ticket['profit'],
'status' => $status,
'remark' => isset($log->out_source['code']) ? '核销成功!' : $log->out_source[0],
'startTime' => $this->queryData['startTime'],
'endTime' => $this->queryData['endTime'],
'created_at' => $log->created_at->format('Y-m-d H:i:s'),
];
// dump($this->jiemi);
// dump($this->ticket);
// dump($couponData);
// dd($this->queryData);
$coupon = Coupon::create($couponData);
$coupon->profit();
$log->back = 1;
$log->save();
}
if (count($er) > 1) {
dump($er);
}
});
} catch (\Exception $e) {
dd($e->getMessage());
}
}
}
public function getQuery()
{ {
if (preg_match('/^YSD/', $this->jiemi['redemptionCode'], $matches)) { if (method_exists($this, $request->action)) {
$this->query_coupon = (new YsdQuery)->setOutletId($this->jiemi['outletId'])
->setCode($this->jiemi['redemptionCode'])
->start();
$this->type = 'ysd';
} else {
$this->query_coupon = (new Query)->setOutletId($this->jiemi['outletId'])
->setCode($this->jiemi['redemptionCode'])
->start();
$this->type = 'pingan';
} return call_user_func_array([$this, $request->action], [$request->all()]);
if ($this->type == 'ysd') {
return $this->getYsdPro();
} else { } else {
return $this->getPro(); dd('未找到方法');
} }
}
public function getYsdPro()
{
$rule_code = $this->query_coupon->activity->rule->code;
$code = $this->user->parent->code->where('code', $rule_code)->first();
if (!$code) {
$this->queryData = "核销失败,您没有权限使用此卡券优惠活动。";
}
$ticket = explode('-', $rule_code);
if (!is_array($ticket) || count($ticket) != 3) {
$this->queryData = "核销失败,卡券规则格式不正确";
}
$full = $ticket[1]; //full100
$price = $ticket[2];
// preg_match('/(\d{3}(\.\d+)?)/is', $full, $match);
preg_match('/\d+/', $full, $match);
if (!is_array($match)) {
$this->queryData = "核销失败,卡券规则格式不正确。";
}
if (!is_numeric($this->jiemi['total'])) {
$this->queryData = "核销失败,订单金额必须是数字";
}
if ($match[0] > $this->jiemi['total']) {
$this->queryData = '核销失败,订单金额不足。';
}
$this->queryData = [
'couponName' => $this->query_coupon->activity->title,
'thirdPartyGoodsId' => $rule_code,
'productId' => '',
'PaOutletId' => '',
'startTime' => $this->query_coupon->start_at->format('Y-m-d H:i:s'),
'endTime' => $this->query_coupon->end_at->format('Y-m-d H:i:s'),
];
return $this->ticket = [
'total' => $match[0],
'price' => $price,
'profit' => $code->profit,
];
}
public function getPro()
{
if (is_string($this->query_coupon)) {
return $this->query_coupon;
}
$profitOfferItemVersion = $this->query_coupon['profitOfferItemVersion'];
$productItemList = $this->query_coupon['productItemList'];
if (!is_array($productItemList) || !is_array($productItemList[0])) {
$this->queryData = '核销失败,平安券数据有误,可能是未配置网点。';
}
//循环查找
$first = '';
foreach ($productItemList as $key => $item) {
$productId = $item['productId'];
$thirdPartyGoodsId = $item['thirdPartyGoodsId'];
$outletList = $item['outletList'];
if (!is_array($outletList) || !is_array($outletList[0])) {
$this->queryData = '核销失败,网点信息有误!请检查平安券配置信息。';
break;
}
$outletList = collect($outletList);
//判断是新版还是旧版
if ($profitOfferItemVersion) {
//新版通过第三方查询
$first = $outletList->firstWhere('thirdOutletNo', $this->user->outlet_id);
if ($first) {
break;
}
} else {
//旧版通过平安网点查询
$first = $outletList->firstWhere('outletNo', $this->user->PaOutletId);
if ($first) {
break;
}
}
}
if (!$first) {
$this->queryData = '核销失败,未找到可用网点信息。';
}
if (!$thirdPartyGoodsId) {
$this->queryData = '核销失败,平安券编号规则有误。';
}
if (!$productId) {
$this->queryData = '核销失败未查询到平安券商品id。';
}
return $this->queryData = [
'couponName' => $this->query_coupon['couponName'],
'thirdPartyGoodsId' => $thirdPartyGoodsId,
'productId' => $productId,
'PaOutletId' => $first['outletNo'],
'startTime' => $this->query_coupon['startTime'],
'endTime' => $this->query_coupon['endTime'],
];
}
public function checkCode()
{
if ($this->type == 'ysd') {
return $this->ticket;
}
$code = $this->user->parent->code->where('code', $this->queryData['thirdPartyGoodsId'])->first();
if (!$code) {
$this->ticket = "核销失败,未找到此项平安券规则,请联系管理人员检查渠道配置。";
}
$ticket = explode('-', $this->queryData['thirdPartyGoodsId']);
if (!is_array($ticket) || count($ticket) != 3) {
$this->ticket = "核销失败,平安券规则格式不正确。";
}
$full = $ticket[1]; //full100
$price = $ticket[2];
preg_match('/\d+/', $full, $result);
if (empty($result) || !is_array($result)) {
$this->ticket = "核销失败,平安券规则格式不正确。";
}
if (!is_numeric($this->jiemi['total'])) {
$this->ticket = "核销失败,订单金额必须是数字";
}
if ($result[0] > $this->jiemi['total']) {
$this->ticket = '核销失败,订单金额不足,平安券不可使用。';
}
$this->ticket = [
'total' => $result[0],
'price' => $price,
'profit' => $code->profit,
];
return $this->ticket;
} }
} }

View File

@@ -168,6 +168,7 @@ class TestController
'total' => $request->total, 'total' => $request->total,
'outletId' => $request->outletId, 'outletId' => $request->outletId,
'orderid' => $request->orderid, 'orderid' => $request->orderid,
'from' => $request->from,
]); ]);
$url = $this->baseUrl . 'user/freezecoupon'; $url = $this->baseUrl . 'user/freezecoupon';
@@ -179,7 +180,16 @@ class TestController
$total = $request->total; $total = $request->total;
$outletId = $request->outletId; $outletId = $request->outletId;
$orderid = $request->orderid ?? ''; $orderid = $request->orderid ?? '';
$res = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId, $orderid); $from = $request->from ?? '';
$res = Coupon::Redemption(
$this->user,
$redemptionCode,
$total,
$outletId,
$orderid,
$from
);
if (is_string($res)) { if (is_string($res)) {
return $this->error($res); return $this->error($res);
@@ -248,4 +258,48 @@ class TestController
return number_format(microtime(true) - request()->server('REQUEST_TIME_FLOAT'), $decimals) . ' s'; return number_format(microtime(true) - request()->server('REQUEST_TIME_FLOAT'), $decimals) . ' s';
} }
/**
* Notes: 测试签名
* @Author: 玄尘
* @Date : 2020/12/30 11:47
* @param \Illuminate\Http\Request $request
*/
public function getSign(Request $request)
{
// $data = 'SMyBpCxqBnxAGr/Fk9LOB851Glkgc3ruZnu1Y0ft/R+Ng26ooLXok1Oi1SrwhSJaQ9U75zy3tI7fq3YfTLQxITwUmt4jBiShpeK1whMaYrI=';
// $addcode = '1234567812345678';
//
// return [
// 'sign' => $this->keysign($data, $addcode),
// 'server_id' => $this->user->server_id,
// 'server_key' => $this->user->server_key,
// 'data' => $data,
// 'addcode' => $addcode,
// ];
$server_id = $request->server_id;
$redemptionCode = $request->redemptionCode;
$total = $request->total;
$outletId = $request->outletId;
$this->user = User::whereNull('parent_id')
->where('server_id', $server_id)
->first();
if (!$this->user) {
return $this->error('未查到到渠道');
}
$ret = [
'redemptionCode' => $redemptionCode,
'total' => $total,
'outletId' => $outletId,
];
return json_encode($ret);
info(json_encode($ret));
return $this->success($ret);
}
} }

View File

@@ -10,6 +10,11 @@ class Activity extends Model
use BelongsToUser; use BelongsToUser;
protected $dates = [
'start_at',
'end_at',
];
const TYPE_EXTEND = 1; const TYPE_EXTEND = 1;
const TYPE_SCOPE = 2; const TYPE_SCOPE = 2;
const TYPES = [ const TYPES = [
@@ -24,9 +29,11 @@ class Activity extends Model
self::STATUS_CLOSE => '关闭', self::STATUS_CLOSE => '关闭',
]; ];
protected $dates = [ const CHANNEL_YSD = 1;
'start_at', const CHANNEL_UNION = 2;
'end_at', const CHANNELS = [
self::CHANNEL_YSD => '亿时代',
self::CHANNEL_UNION => '银联',
]; ];
/** /**
@@ -51,7 +58,7 @@ class Activity extends Model
} }
//活动状态 //活动状态
public function getStatusTextAttribute() public function getStatusTextAttribute(): string
{ {
return self::STATUS[$this->status] ?? '未知'; return self::STATUS[$this->status] ?? '未知';
} }
@@ -100,8 +107,13 @@ class Activity extends Model
{ {
try { try {
// $code = 'YSD' . date('ymd') . mt_rand(100000, 999999); //判断生成何种码
if ($this->channel == self::CHANNEL_UNION) {
$code = '66406' . date('ymdH') . mt_rand(1000000, 9999999); $code = '66406' . date('ymdH') . mt_rand(1000000, 9999999);
} else {
$code = 'YSD' . date('ymd') . mt_rand(100000, 999999);
}
if ($this->type == SELF::TYPE_EXTEND) { if ($this->type == SELF::TYPE_EXTEND) {
$start_at = now(); $start_at = now();
$end_at = now()->addDays($this->days); $end_at = now()->addDays($this->days);

View File

@@ -40,9 +40,9 @@ class Log extends Model
Schema::create($this->table, function (Blueprint $table) { Schema::create($this->table, function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->string('path', 255); $table->string('path', 255);
$table->string('method', 15); $table->string('method', 15)->index();
$table->text('in_source'); $table->text('in_source');
$table->string('type', 20); $table->string('type', 20)->index();
$table->text('out_source')->nullable(); $table->text('out_source')->nullable();
$table->timestamps(); $table->timestamps();
}); });

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Models;
class UnionpayLog extends Model
{
protected $casts = [
'in_source' => 'array',
'out_source' => 'array',
];
const STATUS_SUCCESS = 1;
const STATUS_ERROR = 0;
const STATUS = [
self::STATUS_SUCCESS => '成功',
self::STATUS_ERROR => '失败',
];
public function coupon()
{
return $this->hasOne(Coupon::class, 'redemptionCode', 'mkt_code');
}
}

View File

@@ -1,124 +0,0 @@
<?php return array (
'barryvdh/laravel-debugbar' =>
array (
'providers' =>
array (
0 => 'Barryvdh\\Debugbar\\ServiceProvider',
),
'aliases' =>
array (
'Debugbar' => 'Barryvdh\\Debugbar\\Facade',
),
),
'encore/laravel-admin' =>
array (
'providers' =>
array (
0 => 'Encore\\Admin\\AdminServiceProvider',
),
'aliases' =>
array (
'Admin' => 'Encore\\Admin\\Facades\\Admin',
),
),
'facade/ignition' =>
array (
'providers' =>
array (
0 => 'Facade\\Ignition\\IgnitionServiceProvider',
),
'aliases' =>
array (
'Flare' => 'Facade\\Ignition\\Facades\\Flare',
),
),
'fideloper/proxy' =>
array (
'providers' =>
array (
0 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
),
),
'intervention/image' =>
array (
'providers' =>
array (
0 => 'Intervention\\Image\\ImageServiceProvider',
),
'aliases' =>
array (
'Image' => 'Intervention\\Image\\Facades\\Image',
),
),
'laravel-admin-ext/wang-editor' =>
array (
'providers' =>
array (
0 => 'Encore\\WangEditor\\WangEditorServiceProvider',
),
),
'laravel/tinker' =>
array (
'providers' =>
array (
0 => 'Laravel\\Tinker\\TinkerServiceProvider',
),
),
'maatwebsite/excel' =>
array (
'providers' =>
array (
0 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
),
'aliases' =>
array (
'Excel' => 'Maatwebsite\\Excel\\Facades\\Excel',
),
),
'nesbot/carbon' =>
array (
'providers' =>
array (
0 => 'Carbon\\Laravel\\ServiceProvider',
),
),
'nunomaduro/collision' =>
array (
'providers' =>
array (
0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
),
),
'overtrue/laravel-query-logger' =>
array (
'providers' =>
array (
0 => 'Overtrue\\LaravelQueryLogger\\ServiceProvider',
),
),
'simplesoftwareio/simple-qrcode' =>
array (
'providers' =>
array (
0 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
),
'aliases' =>
array (
'QrCode' => 'SimpleSoftwareIO\\QrCode\\Facades\\QrCode',
),
),
'xuanchen/coupon' =>
array (
'providers' =>
array (
0 => 'XuanChen\\Coupon\\ServiceProvider',
),
),
'xuanchen/unionpay' =>
array (
'providers' =>
array (
0 => 'XuanChen\\UnionPay\\ServiceProvider',
),
),
);

View File

@@ -1,226 +0,0 @@
<?php return array (
'providers' =>
array (
0 => 'Illuminate\\Auth\\AuthServiceProvider',
1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
2 => 'Illuminate\\Bus\\BusServiceProvider',
3 => 'Illuminate\\Cache\\CacheServiceProvider',
4 => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
5 => 'Illuminate\\Cookie\\CookieServiceProvider',
6 => 'Illuminate\\Database\\DatabaseServiceProvider',
7 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
8 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
9 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
10 => 'Illuminate\\Hashing\\HashServiceProvider',
11 => 'Illuminate\\Mail\\MailServiceProvider',
12 => 'Illuminate\\Notifications\\NotificationServiceProvider',
13 => 'Illuminate\\Pagination\\PaginationServiceProvider',
14 => 'Illuminate\\Pipeline\\PipelineServiceProvider',
15 => 'Illuminate\\Queue\\QueueServiceProvider',
16 => 'Illuminate\\Redis\\RedisServiceProvider',
17 => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
18 => 'Illuminate\\Session\\SessionServiceProvider',
19 => 'Illuminate\\Translation\\TranslationServiceProvider',
20 => 'Illuminate\\Validation\\ValidationServiceProvider',
21 => 'Illuminate\\View\\ViewServiceProvider',
22 => 'Barryvdh\\Debugbar\\ServiceProvider',
23 => 'Encore\\Admin\\AdminServiceProvider',
24 => 'Facade\\Ignition\\IgnitionServiceProvider',
25 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
26 => 'Intervention\\Image\\ImageServiceProvider',
27 => 'Encore\\WangEditor\\WangEditorServiceProvider',
28 => 'Laravel\\Tinker\\TinkerServiceProvider',
29 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
30 => 'Carbon\\Laravel\\ServiceProvider',
31 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
32 => 'Overtrue\\LaravelQueryLogger\\ServiceProvider',
33 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
34 => 'XuanChen\\Coupon\\ServiceProvider',
35 => 'XuanChen\\UnionPay\\ServiceProvider',
36 => 'App\\Providers\\AppServiceProvider',
37 => 'App\\Providers\\AuthServiceProvider',
38 => 'App\\Providers\\EventServiceProvider',
39 => 'App\\Providers\\RouteServiceProvider',
40 => 'App\\Api\\ApiServiceProvider',
41 => 'App\\Merchant\\MerchantServiceProvider',
),
'eager' =>
array (
0 => 'Illuminate\\Auth\\AuthServiceProvider',
1 => 'Illuminate\\Cookie\\CookieServiceProvider',
2 => 'Illuminate\\Database\\DatabaseServiceProvider',
3 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
4 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
5 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
6 => 'Illuminate\\Notifications\\NotificationServiceProvider',
7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
8 => 'Illuminate\\Session\\SessionServiceProvider',
9 => 'Illuminate\\View\\ViewServiceProvider',
10 => 'Barryvdh\\Debugbar\\ServiceProvider',
11 => 'Encore\\Admin\\AdminServiceProvider',
12 => 'Facade\\Ignition\\IgnitionServiceProvider',
13 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
14 => 'Intervention\\Image\\ImageServiceProvider',
15 => 'Encore\\WangEditor\\WangEditorServiceProvider',
16 => 'Laravel\\Tinker\\TinkerServiceProvider',
17 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
18 => 'Carbon\\Laravel\\ServiceProvider',
19 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
20 => 'Overtrue\\LaravelQueryLogger\\ServiceProvider',
21 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
22 => 'XuanChen\\Coupon\\ServiceProvider',
23 => 'XuanChen\\UnionPay\\ServiceProvider',
24 => 'App\\Providers\\AppServiceProvider',
25 => 'App\\Providers\\AuthServiceProvider',
26 => 'App\\Providers\\EventServiceProvider',
27 => 'App\\Providers\\RouteServiceProvider',
28 => 'App\\Api\\ApiServiceProvider',
29 => 'App\\Merchant\\MerchantServiceProvider',
),
'deferred' =>
array (
'Illuminate\\Broadcasting\\BroadcastManager' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
'Illuminate\\Contracts\\Broadcasting\\Factory' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
'Illuminate\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Contracts\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'cache' => 'Illuminate\\Cache\\CacheServiceProvider',
'cache.store' => 'Illuminate\\Cache\\CacheServiceProvider',
'cache.psr6' => 'Illuminate\\Cache\\CacheServiceProvider',
'memcached.connector' => 'Illuminate\\Cache\\CacheServiceProvider',
'command.cache.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.cache.forget' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.clear-compiled' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.auth.resets.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.config.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.config.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.db.wipe' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.down' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.environment' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.list' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.key.generate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.optimize' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.optimize.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.package.discover' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.preset' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.failed' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.flush' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.forget' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.listen' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.restart' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.retry' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.work' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.route.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.route.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.route.list' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.seed' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.storage.link' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.up' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.view.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.view.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.cache.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.channel.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.console.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.controller.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.generate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.exception.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.factory.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.job.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.listener.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.mail.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.middleware.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.model.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.notification.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.notification.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.observer.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.policy.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.provider.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.failed-table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.request.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.resource.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.rule.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.seeder.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.session.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.serve' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.test.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.vendor.publish' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migration.repository' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migration.creator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.fresh' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.install' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.refresh' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.reset' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.rollback' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.status' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'composer' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'hash' => 'Illuminate\\Hashing\\HashServiceProvider',
'hash.driver' => 'Illuminate\\Hashing\\HashServiceProvider',
'mailer' => 'Illuminate\\Mail\\MailServiceProvider',
'swift.mailer' => 'Illuminate\\Mail\\MailServiceProvider',
'swift.transport' => 'Illuminate\\Mail\\MailServiceProvider',
'Illuminate\\Mail\\Markdown' => 'Illuminate\\Mail\\MailServiceProvider',
'Illuminate\\Contracts\\Pipeline\\Hub' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
'queue' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.worker' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.listener' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.failer' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.connection' => 'Illuminate\\Queue\\QueueServiceProvider',
'redis' => 'Illuminate\\Redis\\RedisServiceProvider',
'redis.connection' => 'Illuminate\\Redis\\RedisServiceProvider',
'auth.password' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
'auth.password.broker' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
'translator' => 'Illuminate\\Translation\\TranslationServiceProvider',
'translation.loader' => 'Illuminate\\Translation\\TranslationServiceProvider',
'validator' => 'Illuminate\\Validation\\ValidationServiceProvider',
'validation.presence' => 'Illuminate\\Validation\\ValidationServiceProvider',
),
'when' =>
array (
'Illuminate\\Broadcasting\\BroadcastServiceProvider' =>
array (
),
'Illuminate\\Bus\\BusServiceProvider' =>
array (
),
'Illuminate\\Cache\\CacheServiceProvider' =>
array (
),
'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' =>
array (
),
'Illuminate\\Hashing\\HashServiceProvider' =>
array (
),
'Illuminate\\Mail\\MailServiceProvider' =>
array (
),
'Illuminate\\Pipeline\\PipelineServiceProvider' =>
array (
),
'Illuminate\\Queue\\QueueServiceProvider' =>
array (
),
'Illuminate\\Redis\\RedisServiceProvider' =>
array (
),
'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider' =>
array (
),
'Illuminate\\Translation\\TranslationServiceProvider' =>
array (
),
'Illuminate\\Validation\\ValidationServiceProvider' =>
array (
),
),
);

View File

@@ -17,13 +17,14 @@
"laravel-admin-ext/wang-editor": "^1.1", "laravel-admin-ext/wang-editor": "^1.1",
"laravel/framework": "^6.2", "laravel/framework": "^6.2",
"laravel/tinker": "^1.0", "laravel/tinker": "^1.0",
"league/flysystem-sftp": "1.0.22",
"maatwebsite/excel": "^3.1", "maatwebsite/excel": "^3.1",
"php-parallel-lint/php-console-color": "^0.3.0", "php-parallel-lint/php-console-color": "^0.3.0",
"php-parallel-lint/php-console-highlighter": "^0.5.0", "php-parallel-lint/php-console-highlighter": "^0.5.0",
"predis/predis": "^1.1", "predis/predis": "^1.1",
"simplesoftwareio/simple-qrcode": "^2.0", "simplesoftwareio/simple-qrcode": "^2.0",
"xuanchen/coupon": "^1.01", "xuanchen/coupon": "^1.0",
"xuanchen/unionpay": "^1.1" "xuanchen/unionpay": "^2.0"
}, },
"require-dev": { "require-dev": {
"facade/ignition": "^1.4", "facade/ignition": "^1.4",

205
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "13d36c80a80c6a5377c75bac63e5ee5a", "content-hash": "77c9572f4ee66fb91028f756bb43f217",
"packages": [ "packages": [
{ {
"name": "bacon/bacon-qr-code", "name": "bacon/bacon-qr-code",
@@ -1730,6 +1730,54 @@
], ],
"time": "2020-08-23T07:39:11+00:00" "time": "2020-08-23T07:39:11+00:00"
}, },
{
"name": "league/flysystem-sftp",
"version": "1.0.22",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-sftp.git",
"reference": "cab59dd2277e02fe46f5f23195672a02ed49774d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/cab59dd2277e02fe46f5f23195672a02ed49774d",
"reference": "cab59dd2277e02fe46f5f23195672a02ed49774d",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"league/flysystem": "~1.0",
"php": ">=5.6.0",
"phpseclib/phpseclib": "~2.0"
},
"require-dev": {
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "^5.7.25"
},
"type": "library",
"autoload": {
"psr-4": {
"League\\Flysystem\\Sftp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Frank de Jonge",
"email": "info@frenky.net"
}
],
"description": "Flysystem adapter for SFTP",
"time": "2019-10-16T20:05:49+00:00"
},
{ {
"name": "league/mime-type-detection", "name": "league/mime-type-detection",
"version": "1.5.1", "version": "1.5.1",
@@ -2883,6 +2931,117 @@
], ],
"time": "2020-07-20T17:29:33+00:00" "time": "2020-07-20T17:29:33+00:00"
}, },
{
"name": "phpseclib/phpseclib",
"version": "2.0.30",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/136b9ca7eebef78be14abf90d65c5e57b6bc5d36",
"reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phing/phing": "~2.7",
"phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
"squizlabs/php_codesniffer": "~2.0"
},
"suggest": {
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
},
"type": "library",
"autoload": {
"files": [
"phpseclib/bootstrap.php"
],
"psr-4": {
"phpseclib\\": "phpseclib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jim Wigginton",
"email": "terrafrost@php.net",
"role": "Lead Developer"
},
{
"name": "Patrick Monnerat",
"email": "pm@datasphere.ch",
"role": "Developer"
},
{
"name": "Andreas Fischer",
"email": "bantu@phpbb.com",
"role": "Developer"
},
{
"name": "Hans-Jürgen Petrich",
"email": "petrich@tronic-media.com",
"role": "Developer"
},
{
"name": "Graham Campbell",
"email": "graham@alt-three.com",
"role": "Developer"
}
],
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
"homepage": "http://phpseclib.sourceforge.net",
"keywords": [
"BigInteger",
"aes",
"asn.1",
"asn1",
"blowfish",
"crypto",
"cryptography",
"encryption",
"rsa",
"security",
"sftp",
"signature",
"signing",
"ssh",
"twofish",
"x.509",
"x509"
],
"funding": [
{
"url": "https://github.com/terrafrost",
"type": "github"
},
{
"url": "https://www.patreon.com/phpseclib",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
"type": "tidelift"
}
],
"time": "2020-12-17T05:42:04+00:00"
},
{ {
"name": "predis/predis", "name": "predis/predis",
"version": "v1.1.6", "version": "v1.1.6",
@@ -5908,16 +6067,16 @@
}, },
{ {
"name": "xuanchen/coupon", "name": "xuanchen/coupon",
"version": "1.01", "version": "1.0.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/xuanchen120/coupon.git", "url": "https://github.com/xuanchen120/coupon.git",
"reference": "96fb631176e5308a207d932e1f89b4d105d46165" "reference": "df39cde6667291bd9f2e22245fe3f964593c8ac5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/xuanchen120/coupon/zipball/96fb631176e5308a207d932e1f89b4d105d46165", "url": "https://api.github.com/repos/xuanchen120/coupon/zipball/df39cde6667291bd9f2e22245fe3f964593c8ac5",
"reference": "96fb631176e5308a207d932e1f89b4d105d46165", "reference": "df39cde6667291bd9f2e22245fe3f964593c8ac5",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@@ -5955,19 +6114,27 @@
], ],
"description": "卡券核销相关", "description": "卡券核销相关",
"homepage": "https://github.com/xuanchen120/coupon.git", "homepage": "https://github.com/xuanchen120/coupon.git",
"support": { "time": "2021-01-14T02:23:33+00:00"
"issues": "https://github.com/xuanchen120/coupon/issues",
"source": "https://github.com/xuanchen120/coupon/tree/1.01"
},
"time": "2020-11-27T01:57:16+00:00"
}, },
{ {
"name": "xuanchen/unionpay", "name": "xuanchen/unionpay",
"version": "1.1.3", "version": "2.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://gitee.com/xdeepu/unionpay.git", "url": "https://github.com/xuanchen120/unionpay.git",
"reference": "519227eebfc06c20c2de954fdbf1b959bcdcbe9b" "reference": "84a4ddde232db360d8acdd3156d0e9cf7cf163c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/xuanchen120/unionpay/zipball/84a4ddde232db360d8acdd3156d0e9cf7cf163c9",
"reference": "84a4ddde232db360d8acdd3156d0e9cf7cf163c9",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "require": {
"laravel/framework": "*", "laravel/framework": "*",
@@ -5997,7 +6164,11 @@
} }
], ],
"description": "第三方银联对接", "description": "第三方银联对接",
"time": "2020-11-11T07:24:20+00:00" "support": {
"issues": "https://github.com/xuanchen120/unionpay/issues",
"source": "https://github.com/xuanchen120/unionpay/tree/2.5"
},
"time": "2021-01-22T09:53:03+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [
@@ -8281,12 +8452,12 @@
"version": "1.9.1", "version": "1.9.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozart/assert.git", "url": "https://github.com/webmozarts/assert.git",
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
@@ -8341,5 +8512,5 @@
"php": "^7.2" "php": "^7.2"
}, },
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.0.0" "plugin-api-version": "1.1.0"
} }

View File

@@ -46,4 +46,9 @@ return [
7 => '未激活', 7 => '未激活',
], ],
'froms' => [
'bsshop',//本时商城
'bslive',//本时生活
],
]; ];

687
config/unionpay.php Normal file
View File

@@ -0,0 +1,687 @@
<?php
return [
//环境变量
'this_type' => 'test',
//添加日志
'log' => true,
//对账单信息
'check' => [
'sftpadapter' => [
'host' => 'localhost',//地址
'port' => 22,//端口
'username' => 'root', //账号
'password' => 'Anetadmin1',//密码
'privateKey' => '',
'passphrase' => '',
'root' => '/home/wwwroot/pingan/upload/',//路径
'timeout' => 10,//超时时间
'directoryPerm' => 0755,
],
'type' => 'JYMX',
'file_type' => 'txt',
],
//获取微信侧的优惠券
'unionpay_url' => [
'test' => [
'code' => 'http://dev.spserv.yxlm.chinaums.com:25941/spapigateway/v2/markting/sp/coupon/order/get',
],
'dev' => [
'code' => 'https://mktos.chinaums.com/spapigateway/v2/markting/sp/coupon/order/get',
],
],
//不进行sign校验
'nosign' => [
// '002025',//查询
// '002100',//核销
// '002101',//冲正
// '002102',//撤销
'openid',//获取openid 封装数据
'code',//微信测获取优惠券
],
//分配的渠道号
'msg_sender' => '660134',
//打印在小票上,由活动标题、优惠金额、原始金额组合而成
'pos_receipt' => '本时生活,优惠生活',
//广告,用于打印在小票上
'pos_ad' => '',
//营销联盟广告,用于打印在小票上
'pos_mkt_ad' => '本时生活,优惠生活',
//银联渠道id
'agent_id' => '299',
//银联网点id
'outlet_id' => '2009300919918',
//用于银商与sp分润的金额(是佣金的一部分), 以分为单位
'serv_chg' => 0,
//佣金
'commission' => 0,
//证书
'certificate' => [
'dev' => [
'ysd' => [
'private' => storage_path('cert/unionpay/dev/ysd/private_rsa.pem'),
'public' => storage_path('cert/unionpay/dev/ysd/public_rsa.pem'),
],
'union' => [
'public' => storage_path('cert/unionpay/dev/union/public_rsa.pem'),
],
],
'test' => [
'ysd' => [
'private' => storage_path('cert/unionpay/test/ysd/private_rsa.pem'),
'public' => storage_path('cert/unionpay/test/ysd/public_rsa.pem'),
],
'union' => [
'public' => storage_path('cert/unionpay/test/union/public_rsa.pem'),
],
],
],
//接口类型
'type' => [
'002025' => '查询',
'002100' => '交易',
'002101' => '冲正',
'002102' => '撤销',
'openid' => '封装openid参数',
'106040' => '领券',
'012100' => '核销通知',
'code' => '生活请求发券',
],
//日志类型对应
'log_type' => [
'002025' => 'query',
'002100' => 'freezecoupon',
'002101' => 'reversal',
'002102' => 'annul',
'openid' => 'openid',
'106040' => 'getcode',
'012100' => 'notify',
],
// 签名检查数据 没有为全数据
'checksign' => [
'default' => [
'in' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
'sign_type',
],
'out' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_sys_sn',
'msg_time',
'msg_ver',
'msg_rsp_code',
'msg_rsp_desc',
],
],
'106040' => [
'in' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
'sign_type',
],
'out' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_sys_sn',
'msg_time',
'msg_ver',
'msg_rsp_code',
'msg_rsp_desc',
],
],
'012100' => [
'in' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
],
'out' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
'msg_rsp_code',
'msg_rsp_desc',
],
],
],
//需要校验的数据
'validator' => [
'002025' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_flg",
"msg_sender",
"msg_time",
"msg_ver",
"msg_sys_sn",
"req_serial_no",
"mkt_code",
"amount",
"avl_amt",
],
'002100' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_flg",
"msg_sender",
"msg_time",
"msg_sys_sn",
"msg_ver",
"req_serial_no",
"orig_req_serial_no",
"sett_date",
"txn_date",
"txn_time",
"orig_amt",
"discount_amt",
],
'002101' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_flg",
"msg_sender",
"msg_time",
"msg_sys_sn",
"msg_ver",
"req_serial_no",
"orig_req_serial_no",
],
'002102' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_flg",
"msg_sender",
"msg_time",
"msg_sys_sn",
"msg_ver",
"req_serial_no",
"orig_req_serial_no",
],
//封装openid参数
'openid' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_sender",
"callback_type",
"callback_url",
],
//本时生活领券
'code' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_sender",
"issue_user_id",
"event_no",
"mobile",
],
//本时生活领券
'106040' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
// 'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
'sp_chnl_no',
'sp_order_no',
'order_date',
'event_no',
'issue_user_id',
],
//回调核销信息 校验数据项目
'012100' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
'mchnt_no',
'term_no',
'shop_no',
'req_serial_no',
'coupon_no',
'coupon_type',
'enc_card_no',
'acq_term_sn',
'refer_no',
'sett_date',
'txn_date',
'txn_time',
'orig_amt',
'discount_amt',
'pay_amt',
'pay_mode',
'event_no',
],
],
//入库基础数据
'regular' => [
'002025' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
// "msg_flg",
"msg_sender",
"msg_time",
"msg_ver",
"msg_sys_sn",//自己添加的基础数据
"req_serial_no",//自己添加的基础数据
"mkt_code",//自己添加的基础数据
],
'002100' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
// "msg_flg",
"msg_sender",
"msg_time",
"msg_sys_sn",
"msg_ver",
"req_serial_no",//自己添加的基础数据
"orig_req_serial_no",//自己添加的基础数据
"sett_date",//自己添加的基础数据
],
'002101' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
// "msg_flg",
"msg_sender",
"msg_time",
"msg_sys_sn",
"msg_ver",
"req_serial_no",//自己添加的基础数据
"orig_req_serial_no",//自己添加的基础数据
],
'002102' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
// "msg_flg",
"msg_sender",
"msg_time",
"msg_sys_sn",
"msg_ver",
"req_serial_no",//自己添加的基础数据
"orig_req_serial_no",//自己添加的基础数据
],
//封装获取openid数据
'openid' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_sender",
],
//本时生活领券
'code' => [
"msg_type",
"msg_txn_code",
"msg_crrltn_id",
"msg_sender",
],
//去联盟领券
'106040' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
// 'msg_flg',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
],
//回调核销信息
'012100' => [
'msg_type',
'msg_txn_code',
'msg_crrltn_id',
'msg_sender',
'msg_time',
'msg_sys_sn',
'msg_ver',
'req_serial_no',
'sett_date',
],
],
'fields' => [
//聚合营销优惠查询接口
'002025' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "报文流水号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"req_serial_no" => "查询流水号",
"shop_no" => "门店号",
"term_no" => "受理终端号",
"service_code" => "受理方式",
"voucher_no" => "受理凭证号",
"mkt_code" => "聚合营销码",
"mkt_mode" => "聚合营销类型",
"embedded_mchnt_no" => "发起渠道商户号",
"currency_code" => "货币代码",
"amount" => "消费金额",
"avl_amt" => "可优惠金额",
"term_sp_chnl_no" => "终端指定SP渠道号",
"func_code" => "功能码",
"times" => "次数",
"pay_mode" => "支付方式",
//用户附加信息
"user_ext_info" => [
"mobile_no" => "手机号",
"user_code" => "用户号",
"user_code_type" => "用户号类型",
"dev_id" => "设备id",
],
"sign" => "签名域",
],
'out' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "报文流水号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_rsp_code" => "响应码",
"msg_rsp_desc" => "响应码描述",
"discount" => "折扣金额",
"actual_amt" => "折后应收金额",
"pos_display" => "POS显示",
"pos_receipt" => "POS小票",
"pos_ad" => "POS广告",
"pos_mkt_ad" => "Pos_营销联盟广告",
"sign" => "签名域",
],
],
//销账交易接口
'002100' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"shop_no" => "门店号",
"term_no" => "终端号",
"req_serial_no" => "销券流水号",
"orig_req_serial_no" => "原查询流水号",
"enc_card_no" => "加密卡号",
"part_card_no" => "部分卡号",
"acq_term_sn" => "受理终端流水号",
"refer_no" => "检索参考号",
"sett_date" => "清算日期",
"txn_date" => "交易日期",
"txn_time" => "交易时间",
"orig_amt" => "原始金额",
"discount_amt" => "优惠的金额",
"pay_amt" => "支付金额",
"pay_mode" => "支付方式",
"order_no" => "订单号",
"trans_crrltn_no" => "交易关联流水号",
"equity_no" => "权益号",
"card_no" => "全卡号",
"sign" => "签名数据",
],
'out' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"msg_rsp_code" => "响应码",
"msg_rsp_desc" => "响应码描述",
"orig_amt" => "原始金额",
"discount_amt" => "折扣金额",
"pay_amt" => "支付金额",
"serv_chg" => "服务费",
"commission" => "佣金",
"ad" => "广告",
"pos_receipt" => "POS优惠",
"coupon_no" => "凭证号",
"coupon_type" => "凭证类型",
"sp_biz_code" => "SP统计码",
"charge_code" => "计费码",
"pos_event_title" => "SP活动主题",
"sp_contact" => "SP联系电话",
"sp_name" => "SP名称",
"event_no" => "活动号",
"td_code" => "二维码",
"memo" => "附言",
"mkt_sp_chnl_no" => "营销渠道号",
"point_amt" => "积分抵扣金额",
"sign" => "签名数据",
],
],
//销账冲正通知接口
'002101' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"shop_no" => "门店号",
"term_no" => "终端号",
"req_serial_no" => "冲正流水号",
"orig_req_serial_no" => "原始销账流水号",
"trans_crrltn_no" => "交易关联流水号",
"sign" => "签名数据",
],
'out' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"msg_rsp_code" => "响应码",
"msg_rsp_desc" => "响应码描述",
"sign" => "签名数据",
],
],
'002102' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"shop_no" => "门店号",
"term_no" => "终端号",
"req_serial_no" => "撤销流水号",
"orig_req_serial_no" => "原始销账流水号",
"trans_crrltn_no" => "交易关联流水号",
"sign" => "签名数据",
],
'out' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"msg_rsp_code" => "响应码",
"msg_rsp_desc" => "响应码描述",
"ad" => "广告",
"td_code" => "二维码",
"sign" => "签名数据",
],
],
'openid' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_sender" => "报文发送方",
"callback_type" => "回调类型",
"callback_url" => "回调地址",
],
'out' => [
"msg_sender" => "报文类型",
"nonce_str" => "随机码",
"timestamp" => "时间戳",
"auth_scope" => "授权类型",
"callback_type" => "回调类型",
"callback_url" => "回调地址",
"sign" => "签名数据",
],
],
'code' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_sender" => "报文发送方",
"issue_user_id" => "发券平台渠道用户id",//领取微信活动的券码送微信的openid
"event_no" => "活动号",
"mobile" => "手机号",
],
'out' => [
"code" => "优惠券",
"sign" => "签名数据",
],
],
//去联盟领券
'106040' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"shop_no" => "门店号",
"term_no" => "终端号",
"req_serial_no" => "撤销流水号",
"orig_req_serial_no" => "原始销账流水号",
"trans_crrltn_no" => "交易关联流水号",
'sp_chnl_no' => "渠道方",
'sp_order_no' => "第三方订单号",
'order_date' => "订单日期",
'event_no' => "活动号",
'issue_user_id' => "发券平台渠道用户id",
],
'out' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"msg_rsp_code" => "响应码",
"msg_rsp_desc" => "响应码描述",
"sign" => "签名数据",
],
],
//回调核销信息
'012100' => [
'in' => [
"msg_type" => "报文类型",
"msg_txn_code" => "交易代码",
"msg_crrltn_id" => "消息关联号",
"msg_flg" => "报文请求应答标志",
"msg_sender" => "报文发送方",
"msg_time" => "报文日期",
"msg_sys_sn" => "平台流水号",
"msg_ver" => "报文版本号",
"mchnt_no" => "商户号",
"term_no" => "终端号",
"shop_no" => "门店号",
"req_serial_no" => "销券流水号",
"coupon_no" => "凭证号",
"coupon_type" => "凭证类型",
"enc_card_no" => "加密卡号",
"acq_term_sn" => "受理终端流水号",
"refer_no" => "检索参考号",
"sett_date" => "清算日期",
"txn_date" => "交易日期",
"txn_time" => "交易时间",
"orig_amt" => "原始金额",
"discount_amt" => "优惠的金额",
"pay_amt" => "支付金额",
"pay_mode" => "支付方式",
"event_no" => "活动号",
"trans_crrltn_no" => "交易关联流水号",
"equity_no" => "权益号",
"order_no" => "订单号",
"point" => "使用的积分数量",
"point_amt" => "积分抵扣金额",
"point_account_no" => "积分账户号",
"mkt_uuid" => "联盟码申请流水号",
"custom_info" => "第三方自定义域",
],
],
],
];

View File

@@ -4,10 +4,12 @@ return [
'coupon_model' => \App\Models\Coupon::class, 'coupon_model' => \App\Models\Coupon::class,
'rules' => [ 'rules' => [
'ysd' => [ 'ysd' => [
// 'pattern' => '/^YSD\d{12}/',
'pattern' => '/^YSD/', 'pattern' => '/^YSD/',
'model' => \XuanChen\Coupon\Action\YsdAction::class, 'model' => \XuanChen\Coupon\Action\YsdAction::class,
], ],
'unionpay' => [ 'unionpay' => [
// 'pattern' => '/^YSD\d{12}/',
'pattern' => '/^66406/', 'pattern' => '/^66406/',
'model' => \XuanChen\Coupon\Action\YsdAction::class, 'model' => \XuanChen\Coupon\Action\YsdAction::class,
], ],
@@ -17,5 +19,9 @@ return [
], ],
], ],
];
'froms' => [
'bsshop',//本时商城
'bslive',//本时生活
],
];

View File

@@ -6,6 +6,7 @@ Route::get('/test/grant', 'TestController@grant')->name('test.grant');
Route::get('/test/checkcoupon', 'TestController@checkcoupon')->name('test.checkcoupon'); Route::get('/test/checkcoupon', 'TestController@checkcoupon')->name('test.checkcoupon');
Route::get('/test/query', 'TestController@query')->name('test.query'); Route::get('/test/query', 'TestController@query')->name('test.query');
Route::get('/test/destroy', 'TestController@destroy')->name('test.destroy'); Route::get('/test/destroy', 'TestController@destroy')->name('test.destroy');
Route::get('/test/getsign', 'TestController@getSign')->name('test.getsign');
Route::get('/skyxu', 'SkyxuController@index')->name('skyxu'); Route::get('/skyxu', 'SkyxuController@index')->name('skyxu');
Route::get('/coupon', 'CouponController@index')->name('coupon'); Route::get('/coupon', 'CouponController@index')->name('coupon');

View File

@@ -0,0 +1,6 @@
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGBzj/rgW4kCZhzIxy29qp3mqY
9pV18hGK6v132RmJ9DYxGdzIwhCdlPvcSIczBcZ+OnQuqYeVVatXO7lc1MUgDPaA
FGgSQFwTTz+JwoPrn+x1ATs1jDgYucEFVzfNJagR44unFLIhZ1IP5Nn289wp3u6p
9ZtYOlmtQmwI4dHcPwIDAQAB
-----END PUBLIC KEY-----

View File

@@ -0,0 +1,17 @@
-----BEGIN RSA PRIVATE KEY-----
MIICwgIBAAKBlwr/0635gQVIE29ImQJuAs46csIvIp1AbPUAqwth+LKMRV1d5A7z
ipyO7uKfExt3Xdo94jx2j57Q1n9QubAkmJ2Wk+G2VVkf+OYgFc8rCo1URArt1Atu
QnWdGA3k0Ij2aHxI2d3LA8Ue7/WLWWqnas/FVJkcnTPtC2rSv4JO4nCMVdsXkZdj
ghKc8OTdiO6ue/QhrBlY/5cCAwEAAQKBlwQf9kEa/UB+zBMClabsnI68KocZ6BAy
temXS42kOwCyS9z8tebJfCTEEV/ZKfA17nNGm83y5F85kAcEve4Je1Y1vtV5bD5V
GCEszR57eYiRaEuYvi58zzDS6BZJwCEvj0eLNydhRBUP1gCex9IVwgjfN684TRMM
PgFOlBbQHBF1rnlff0TwcDcTvRexvhn5U65s/vM9vqkCTAN1T7Tpw5gpLQyM0hpK
S8a24mudenNS6biPUcbSlAqWeP2Ol0Zi9taX+8KUmAAoCnYIGa/PjrfB9tcUCilX
reugrOKdp0CLn3/mrIUCTAMuPDb0V2CEvZYH43saNRrm0xMh3V4xEFX6EXHDX9cI
VGGUvJfxisjh76+Zn+4SculBSSCMcnwSFxMvYoAeeuzVbatOB6Zhts8KlGsCTANi
Lucp5FYmy03BJfvU/0jgPK3f+SOGVuhdSTyHYZLuYFhsv7N9NlcFgqyBaCqXAo0z
JbavE8rUeuc6UyrZ/29P2Hcsmqx7L0YbcmUCTAI6ELZ5A+Pzi7jK9R1vD9cx3H38
q7wSpdlMJ4J6w1MN5eYb+J544i4a4XEUIcDQ8dsVdllve4gaMkWgW1pP/Mhr9UiG
bRy0NQVn5tkCTAFK+hDf5ViHZZncGmiFArUNPRZMhfdg1rqpUzs/yEKc06flZY67
irE8EaiGRWfmwMqLGqfrW/bzMOWG1O5z9qf1Dg0ViimoUKNHEog=
-----END RSA PRIVATE KEY-----

View File

@@ -0,0 +1,6 @@
-----BEGIN PUBLIC KEY-----
MIG1MA0GCSqGSIb3DQEBAQUAA4GjADCBnwKBlwr/0635gQVIE29ImQJuAs46csIv
Ip1AbPUAqwth+LKMRV1d5A7zipyO7uKfExt3Xdo94jx2j57Q1n9QubAkmJ2Wk+G2
VVkf+OYgFc8rCo1URArt1AtuQnWdGA3k0Ij2aHxI2d3LA8Ue7/WLWWqnas/FVJkc
nTPtC2rSv4JO4nCMVdsXkZdjghKc8OTdiO6ue/QhrBlY/5cCAwEAAQ==
-----END PUBLIC KEY-----

View File

@@ -1,15 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC/1n0w5iwWPB4XuS+QX820prkO7iEFmXDh4OPTCT43HKV63Tk0
j1oEY7rzJizvQcGQRrxHrv7syeEjrzh6b/5flqRk2XYDOO4CNO1LNuhUsVn17sMH
4GQzrnZQDAnU1Jxlk9ttamNpkGyind071+B2azT8TdLwjGXe2e4x7M0AOwIDAQAB
AoGAaDCMKeS5CRJ5nZTcemMuC/GJDMzUboAZyPQliFa6zZ/nWEWSbjN1RnEL9kdD
nGZwRHXGiIBIwD4c4w6ldAojcsJB76pfdeok6gDlswk3McF2uMPUvn6Yc37nnkbz
crXI6wDy0aPX/MfcHq2UoX5GdDYVEnOBnictxWPBMZ6S4fECQQDkH8vfaO4wGKQ2
K1uiUHEIRv0qOUvGY/BKJtBcyE4wpHpMtlY8o2vGssvpTueBWXWp8XRShOLoo+J+
PXrBLvTVAkEA10eUTLIvTag2nKS1B3dCJaszYWAL2otf5F4EwEKmfkFNhk7qkVm+
Ain9h/RsKqBb9n3MeeqSqUvbSq8FzCTozwJBAM/OdzVIrNF7YPtHe+3cQVs875nr
H6/Vkiq6OMyMW03MRuxinSQX6jHS5hXeHt2h1KG+piwViW5K/CPrdUtNrxECQA3s
rFP1poegXL/vC2KLPTUQiMdAniOppi8wQaBp7zj1Yl1Ql22FX3vmWWbE0YZETw53
fpVYLdpTdMC052wX6xMCQEZHbKjv9odbN6vZAcz15RC0j21brEQQ3goXSxLtjkmQ
LkcLdiDZgqGiVjNXTnh81fVkoIh9CfTSZH0a7Zc/RvM=
-----END RSA PRIVATE KEY-----

View File

@@ -1,6 +0,0 @@
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/1n0w5iwWPB4XuS+QX820prkO
7iEFmXDh4OPTCT43HKV63Tk0j1oEY7rzJizvQcGQRrxHrv7syeEjrzh6b/5flqRk
2XYDOO4CNO1LNuhUsVn17sMH4GQzrnZQDAnU1Jxlk9ttamNpkGyind071+B2azT8
TdLwjGXe2e4x7M0AOwIDAQAB
-----END PUBLIC KEY-----

View File

@@ -1,22 +0,0 @@
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}

View File

@@ -1,21 +0,0 @@
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}

View File

@@ -1,10 +0,0 @@
<?php
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
}

View File

@@ -1,19 +0,0 @@
<?php
namespace Tests\Unit;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}