链接sftp功能
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,3 +8,4 @@
|
|||||||
/storage/framework
|
/storage/framework
|
||||||
/storage/debugbar/
|
/storage/debugbar/
|
||||||
/bootstrap/cache
|
/bootstrap/cache
|
||||||
|
/upload
|
||||||
|
|||||||
@@ -2,330 +2,63 @@
|
|||||||
|
|
||||||
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\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();
|
$path = '/home/wwwroot/pingan/upload/';
|
||||||
dd($list);
|
$name = 'JYMX66007320190722.txt';
|
||||||
Coupon::whereBetween('id', ['70091', '70513'])
|
$adapter = new SftpAdapter([
|
||||||
->orderBy('created_at', 'ASC')
|
'host' => '123.57.16.212',
|
||||||
->chunk(100, function ($logs) {
|
'port' => 22,
|
||||||
foreach ($logs as $log) {
|
'username' => 'root',
|
||||||
if (preg_match('/^YSD/', $log->redemptionCode, $matches)) {
|
'password' => 'Anetadmin1',
|
||||||
$type = Coupon::TYPE_YSD;
|
'privateKey' => '',
|
||||||
} else {
|
'passphrase' => '',
|
||||||
$type = Coupon::TYPE_PINGAN;
|
'root' => $path,
|
||||||
}
|
'timeout' => 10,
|
||||||
|
'directoryPerm' => 0755,
|
||||||
|
]);
|
||||||
|
|
||||||
$log->type = $type;
|
$filesystem = new Filesystem($adapter);
|
||||||
$log->save();
|
$lists = $filesystem->listContents();
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
dd();
|
$content = $filesystem->read($name);
|
||||||
$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) {
|
$content = str_replace("\n", "br", $content);
|
||||||
try {
|
dump($content);
|
||||||
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) {
|
$content = explode("br", $content);
|
||||||
|
|
||||||
$this->jiemi = $log->in_source['jiemi'];
|
foreach ($content as $item) {
|
||||||
$this->user = User::where('outlet_id', $this->jiemi['outletId'])->first();
|
$array = explode('|', $item);
|
||||||
$this->getQuery();
|
foreach ($array as $item) {
|
||||||
|
echo $item . "<br>";
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
|
echo '----------------------------------------' . "<br>";
|
||||||
}
|
}
|
||||||
|
dd($content);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getQuery()
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
"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",
|
||||||
|
|||||||
179
composer.lock
generated
179
composer.lock
generated
@@ -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": "788568f7f8b8a7cf65cee74489ef958c",
|
"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",
|
||||||
@@ -5959,16 +6118,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "xuanchen/unionpay",
|
"name": "xuanchen/unionpay",
|
||||||
"version": "2.4",
|
"version": "2.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/xuanchen120/unionpay.git",
|
"url": "https://github.com/xuanchen120/unionpay.git",
|
||||||
"reference": "906c9c7f45d7d3c1b095de5deb24127692c28c7d"
|
"reference": "84a4ddde232db360d8acdd3156d0e9cf7cf163c9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/xuanchen120/unionpay/zipball/906c9c7f45d7d3c1b095de5deb24127692c28c7d",
|
"url": "https://api.github.com/repos/xuanchen120/unionpay/zipball/84a4ddde232db360d8acdd3156d0e9cf7cf163c9",
|
||||||
"reference": "906c9c7f45d7d3c1b095de5deb24127692c28c7d",
|
"reference": "84a4ddde232db360d8acdd3156d0e9cf7cf163c9",
|
||||||
"shasum": "",
|
"shasum": "",
|
||||||
"mirrors": [
|
"mirrors": [
|
||||||
{
|
{
|
||||||
@@ -6005,7 +6164,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "第三方银联对接",
|
"description": "第三方银联对接",
|
||||||
"time": "2021-01-14T02:13:55+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": [
|
||||||
@@ -8289,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": [
|
||||||
|
|||||||
Reference in New Issue
Block a user