├── .gitignore
├── .styleci.yml
├── run-tests.sh
├── accesslint-test.html
├── src
├── Exceptions
│ └── RequestIntegrityException.php
├── DotpayApi
│ ├── Requests
│ │ ├── AbstractRequest.php
│ │ ├── CreateRefund.php
│ │ └── CreatePaymentLink.php
│ ├── Contracts
│ │ └── IRequest.php
│ ├── UrlCreator.php
│ ├── Client.php
│ ├── Response.php
│ ├── Validator.php
│ └── DotpayApi.php
├── Facades
│ └── Dotpay.php
├── config
│ └── dotpay.php
├── DotpayServiceProvider.php
└── DotpayManager.php
├── .editorconfig
├── CHANGELOG.md
├── ISSUE_TEMPLATE.md
├── LICENSE.md
├── CONTRIBUTING.md
├── tests
├── DotpayRefundTest.php
└── DotpaySignatureTest.php
├── composer.json
├── PULL_REQUEST_TEMPLATE.md
├── CODE_OF_CONDUCT.md
├── README.md
└── composer.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
2 | /vendor
--------------------------------------------------------------------------------
/.styleci.yml:
--------------------------------------------------------------------------------
1 | preset: psr2
2 |
--------------------------------------------------------------------------------
/run-tests.sh:
--------------------------------------------------------------------------------
1 | phpunit tests/
2 |
--------------------------------------------------------------------------------
/accesslint-test.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/Exceptions/RequestIntegrityException.php:
--------------------------------------------------------------------------------
1 | [
5 | 'api_version' => 'dev',
6 | 'username' => env('DOTPAY_USERNAME'),
7 | 'password' => env('DOTPAY_PASSWORD'),
8 | 'shop_id' => env('DOTPAY_SHOP_ID'),
9 | 'pin' => env('DOTPAY_PIN'),
10 | 'base_url' => env('DOTPAY_BASE_URL')
11 | ],
12 | 'options' => [
13 | 'url' => '127.0.0.1',
14 | 'curl' => 'callback_url',
15 | 'recipient' => [
16 | 'company' => 'YourCompany',
17 | 'address' => [
18 | 'street' => '',
19 | 'building_number' => '',
20 | 'postcode' => '',
21 | 'city' => "Warszawa"
22 | ]
23 | ],
24 | ]
25 | ];
26 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Detailed description
4 |
5 | Provide a detailed description of the change or addition you are proposing.
6 |
7 | Make it clear if the issue is a bug, an enhancement or just a question.
8 |
9 | ## Context
10 |
11 | Why is this change important to you? How would you use it?
12 |
13 | How can it benefit other users?
14 |
15 | ## Possible implementation
16 |
17 | Not obligatory, but suggest an idea for implementing addition or change.
18 |
19 | ## Your environment
20 |
21 | Include as many relevant details about the environment you experienced the bug in and how to reproduce it.
22 |
23 | * Version used (e.g. PHP 5.6, HHVM 3):
24 | * Operating system and version (e.g. Ubuntu 16.04, Windows 7):
25 | * Link to your project:
26 | * ...
27 | * ...
28 |
--------------------------------------------------------------------------------
/src/DotpayApi/UrlCreator.php:
--------------------------------------------------------------------------------
1 | pin = $pin;
23 | }
24 |
25 | /**
26 | * @param $payment
27 | * @return mixed
28 | */
29 | public function getPaymentUrl($payment)
30 | {
31 | return $payment->payment_url;
32 | }
33 |
34 | /**
35 | * @param $payment
36 | * @return string
37 | */
38 | public function getPaymentUrlWithCHK($payment)
39 | {
40 | return $payment->payment_url.'&chk='.hash('sha256', ($this->pin.$payment->token));
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/DotpayServiceProvider.php:
--------------------------------------------------------------------------------
1 | publishes([
18 | __DIR__.'/config/dotpay.php' => config_path('dotpay.php'),
19 | ]);
20 | }
21 |
22 | /**
23 | * Register any package services.
24 | *
25 | * @return void
26 | */
27 | public function register()
28 | {
29 | $this->app->singleton(DotpayApi::class, function ($app) {
30 | return new DotpayApi($app['config']['dotpay']['api']);
31 | });
32 |
33 | $this->app->bind('dotpay', function($app) {
34 | return new DotpayManager($app[DotpayApi::class]);
35 | });
36 | }
37 | }
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | # The MIT License (MIT)
2 |
3 | Copyright (c) 2017 Axotion
4 |
5 | > Permission is hereby granted, free of charge, to any person obtaining a copy
6 | > of this software and associated documentation files (the "Software"), to deal
7 | > in the Software without restriction, including without limitation the rights
8 | > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | > copies of the Software, and to permit persons to whom the Software is
10 | > furnished to do so, subject to the following conditions:
11 | >
12 | > The above copyright notice and this permission notice shall be included in
13 | > all copies or substantial portions of the Software.
14 | >
15 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | > THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | Contributions are **welcome** and will be fully **credited**.
4 |
5 | We accept contributions via Pull Requests on [Github](https://github.com/evilnet/dotpay).
6 |
7 |
8 | ## Pull Requests
9 |
10 | - **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - Check the code style with ``$ composer check-style`` and fix it with ``$ composer fix-style``.
11 |
12 | - **Add tests!** - Your patch won't be accepted if it doesn't have tests.
13 |
14 | - **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
15 |
16 | - **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option.
17 |
18 | - **Create feature branches** - Don't ask us to pull from your master branch.
19 |
20 | - **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
21 |
22 | - **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting.
23 |
24 |
25 | ## Running Tests
26 |
27 | ``` bash
28 | $ composer test
29 | ```
30 |
31 |
32 | **Happy coding**!
33 |
--------------------------------------------------------------------------------
/src/DotpayApi/Client.php:
--------------------------------------------------------------------------------
1 | username = $username;
39 | $this->password = $password;
40 | $this->base_url = $base_url;
41 | $this->client = new \GuzzleHttp\Client();
42 | }
43 |
44 | /**
45 | * @param IRequest $request
46 | * @return mixed
47 | * @throws \GuzzleHttp\Exception\GuzzleException
48 | */
49 | public function makeRequest(IRequest $request)
50 | {
51 | $options = [
52 | 'auth' => [
53 | $this->username,
54 | $this->password
55 | ],
56 | 'headers' => ['content-type' => 'application/json', 'Accept' => 'application/json'],
57 | 'body' => json_encode($request->toArray(), 320)
58 | ];
59 | return json_decode($this->client->request($request->method(),$this->base_url.$request->path(), $options)->getBody());
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/DotpayApi/Response.php:
--------------------------------------------------------------------------------
1 | data = $data;
23 | }
24 |
25 | /**
26 | * @return mixed
27 | */
28 | public function getControl()
29 | {
30 | return $this->data['control'];
31 | }
32 |
33 | /**
34 | * @return mixed
35 | */
36 | public function getOperationNumber()
37 | {
38 | return $this->data['operation_number'];
39 | }
40 |
41 | /**
42 | * @return mixed
43 | */
44 | public function getEmail()
45 | {
46 | return $this->data['email'];
47 | }
48 |
49 | /**
50 | * @return mixed
51 | */
52 | public function getOperationAmount()
53 | {
54 | return $this->data['operation_amount'];
55 | }
56 |
57 | /**
58 | * @return mixed
59 | */
60 | public function getOperationCurrency()
61 | {
62 | return $this->data['operation_currency'];
63 | }
64 |
65 | /**
66 | * @return mixed
67 | */
68 | public function getOperationDateTime()
69 | {
70 | return $this->data['operation_datetime'];
71 | }
72 |
73 | /**
74 | * @return mixed
75 | */
76 | public function getOperationStatus()
77 | {
78 | return $this->data['operation_status'];
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/DotpayApi/Requests/CreateRefund.php:
--------------------------------------------------------------------------------
1 | operation_number = $operation_number;
47 |
48 | foreach ($data as $key => $value) {
49 | if(!$value || is_numeric($value) && $value <= 0){
50 | throw new RequestIntegrityException();
51 | }
52 | $this->$key = $value;
53 | }
54 | }
55 |
56 | /**
57 | * @return string
58 | */
59 | public function method()
60 | {
61 | return 'POST';
62 | }
63 |
64 | /**
65 | * @return string
66 | */
67 | public function path()
68 | {
69 | return 'api/v1/payments/'.$this->operation_number.'/refund/';
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/tests/DotpayRefundTest.php:
--------------------------------------------------------------------------------
1 | 120,
24 | "description" => "Refund for payment",
25 | "control" => 123
26 | ]
27 | );
28 | $this->assertTrue(isset($request));
29 | }
30 |
31 | /**
32 | * @throws
33 | */
34 | public function test_behavior_when_amount_is_invalid(){
35 | $this->expectException(RequestIntegrityException::class);
36 | $request = new CreateRefund('M1006-4674',
37 | [
38 | "amount" => -1,
39 | "description" => "Refund for payment",
40 | "control" => 123
41 | ]
42 | );
43 | $this->assertTrue(isset($request));
44 | }
45 |
46 | /**
47 | * @throws
48 | */
49 | public function test_behavior_when_operation_number_is_null(){
50 | $this->expectException(RequestIntegrityException::class);
51 | $request = new CreateRefund(null,
52 | [
53 | "amount" => 120,
54 | "description" => "Refund for payment",
55 | "control" => 123
56 | ]
57 | );
58 | $this->assertTrue(isset($request));
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "evilnet/dotpay",
3 | "type": "library",
4 | "description": "Package for Dotpay payments via api instead of form",
5 | "keywords": [
6 | "Evilnet",
7 | "Dotpay",
8 | "laravel"
9 | ],
10 | "homepage": "https://github.com/Evilnet/Dotpay",
11 | "license": "MIT",
12 | "authors": [
13 | {
14 | "name": "Axotion",
15 | "email": "axotion@linux.pl",
16 | "homepage": "https://github.com/axotion",
17 | "role": "Developer"
18 | }
19 | ],
20 | "require": {
21 | "php" : "~5.6|~7.0|~8.0",
22 | "guzzlehttp/guzzle": "^6.3 || ^7.0.1"
23 | },
24 | "require-dev": {
25 | "phpunit/phpunit" : ">=5.4.3",
26 | "squizlabs/php_codesniffer": "^2.3"
27 | },
28 | "autoload": {
29 | "psr-4": {
30 | "Evilnet\\Dotpay\\": "src"
31 | }
32 | },
33 | "autoload-dev": {
34 | "psr-4": {
35 | "Evilnet\\Dotpay\\": "tests"
36 | }
37 | },
38 | "scripts": {
39 | "test": "phpunit",
40 | "check-style": "phpcs -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src tests",
41 | "fix-style": "phpcbf -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src tests"
42 | },
43 | "extra": {
44 | "branch-alias": {
45 | "dev-master": "1.0-dev"
46 | },
47 | "laravel": {
48 | "providers": [
49 | "Evilnet\\Dotpay\\DotpayServiceProvider"
50 | ],
51 | "aliases": {
52 | "Dotpay": "Evilnet\\Dotpay\\Facades\\Dotpay"
53 | }
54 | }
55 | },
56 | "config": {
57 | "sort-packages": true
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/DotpayApi/Validator.php:
--------------------------------------------------------------------------------
1 | pin = $pin;
54 | }
55 |
56 | /**
57 | * @param $data
58 | * @return bool
59 | */
60 | public function verify($data)
61 | {
62 | $concatData = '';
63 | foreach ($this->keys as $key) {
64 | if (isset($data[$key]) && strlen($data[$key])) {
65 | $concatData .= $data[$key];
66 | }
67 | }
68 | $hash = hash('sha256', $this->pin . $concatData);
69 |
70 | return $data['signature'] === $hash;
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/DotpayManager.php:
--------------------------------------------------------------------------------
1 | dotpayApi = $dotpayApi;
31 | }
32 |
33 | //It will return url for dotpay transaction
34 |
35 | /**
36 | * @param $data
37 | * @return mixed|string
38 | * @throws \GuzzleHttp\Exception\GuzzleException
39 | */
40 | public function createPayment($data)
41 | {
42 | return $this->dotpayApi->createPayment($data);
43 | }
44 |
45 | /**
46 | * @param $operation_number
47 | * @param $data
48 | * @return mixed
49 | * @throws Exceptions\RequestIntegrityException
50 | * @throws \GuzzleHttp\Exception\GuzzleException
51 | */
52 | public function refundPayment($operation_number, $data){
53 | return $this->dotpayApi->refundPayment($operation_number, $data);
54 | }
55 |
56 |
57 | /**
58 | * @return mixed
59 | */
60 | public function response()
61 | {
62 | return $this->response;
63 | }
64 |
65 | //It will listen for dotpay POST with status. We need to calculate hash and check status
66 |
67 | /**
68 | * @param array $data
69 | * @return Response
70 | */
71 | public function callback(array $data)
72 | {
73 | if ($this->dotpayApi->verifyCallback($data)) {
74 | return new Response($data);
75 | }
76 |
77 | throw new InvalidArgumentException('invalid_hash');
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Description
4 |
5 | Describe your changes in detail.
6 |
7 | ## Motivation and context
8 |
9 | Why is this change required? What problem does it solve?
10 |
11 | If it fixes an open issue, please link to the issue here (if you write `fixes #num`
12 | or `closes #num`, the issue will be automatically closed when the pull is accepted.)
13 |
14 | ## How has this been tested?
15 |
16 | Please describe in detail how you tested your changes.
17 |
18 | Include details of your testing environment, and the tests you ran to
19 | see how your change affects other areas of the code, etc.
20 |
21 | ## Screenshots (if appropriate)
22 |
23 | ## Types of changes
24 |
25 | What types of changes does your code introduce? Put an `x` in all the boxes that apply:
26 | - [ ] Bug fix (non-breaking change which fixes an issue)
27 | - [ ] New feature (non-breaking change which adds functionality)
28 | - [ ] Breaking change (fix or feature that would cause existing functionality to change)
29 |
30 | ## Checklist:
31 |
32 | Go over all the following points, and put an `x` in all the boxes that apply.
33 |
34 | Please, please, please, don't send your pull request until all of the boxes are ticked. Once your pull request is created, it will trigger a build on our [continuous integration](http://www.phptherightway.com/#continuous-integration) server to make sure your [tests and code style pass](https://help.github.com/articles/about-required-status-checks/).
35 |
36 | - [ ] I have read the **[CONTRIBUTING](CONTRIBUTING.md)** document.
37 | - [ ] My pull request addresses exactly one patch/feature.
38 | - [ ] I have created a branch for this patch/feature.
39 | - [ ] Each individual commit in the pull request is meaningful.
40 | - [ ] I have added tests to cover my changes.
41 | - [ ] If my change requires a change to the documentation, I have updated it accordingly.
42 |
43 | If you're unsure about any of these, don't hesitate to ask. We're here to help!
44 |
--------------------------------------------------------------------------------
/src/DotpayApi/Requests/CreatePaymentLink.php:
--------------------------------------------------------------------------------
1 | shop_id = $shop_id;
80 |
81 | foreach ($data as $key => $value) {
82 | $this->$key = $value;
83 | }
84 | }
85 |
86 | /**
87 | * @return string
88 | */
89 | public function method()
90 | {
91 | return 'POST';
92 | }
93 |
94 | /**
95 | * @return string
96 | */
97 | public function path()
98 | {
99 | return 'api/v1/accounts/'.$this->shop_id.'/payment_links/';
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/src/DotpayApi/DotpayApi.php:
--------------------------------------------------------------------------------
1 | config = $config;
38 | $this->client = new Client($this->config['username'], $this->config['password'], $this->config['base_url']);
39 | $this->validator = new Validator($this->config['pin']);
40 | $this->url_creator = new UrlCreator($this->config['pin']);
41 | }
42 |
43 | /**
44 | * @param $payment
45 | * @return mixed|string
46 | * @throws \GuzzleHttp\Exception\GuzzleException
47 | */
48 | public function createPayment($payment)
49 | {
50 | return $this->getPaymentUrl($this->client->makeRequest(new CreatePaymentLink($this->config['shop_id'], $payment)));
51 | }
52 |
53 | /**
54 | * @param $payment
55 | * @param $operation_number
56 | * @return mixed
57 | * @throws \Evilnet\Dotpay\Exceptions\RequestIntegrityException
58 | * @throws \GuzzleHttp\Exception\GuzzleException
59 | */
60 | public function refundPayment($operation_number, $payment){
61 | return $this->client->makeRequest(new CreateRefund($operation_number, $payment));
62 | }
63 |
64 | /**
65 | * @param $payment
66 | * @return mixed|string
67 | */
68 | public function getPaymentUrl($payment)
69 | {
70 | switch ($this->config['api_version']) {
71 | case 'dev':
72 | default:
73 | return $this->url_creator->getPaymentUrlWithCHK($payment);
74 | break;
75 | case 'legacy':
76 | return $this->url_creator->getPaymentUrl($payment);
77 | break;
78 | }
79 | }
80 |
81 | /**
82 | * @param $data
83 | * @return bool
84 | */
85 | public function verifyCallback($data)
86 | {
87 | return $this->validator->verify($data);
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to make participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, gender identity and expression, level of experience,
9 | nationality, personal appearance, race, religion, or sexual identity and
10 | orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at `axotion@linux.pl`. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at [http://contributor-covenant.org/version/1/4][version]
72 |
73 | [homepage]: http://contributor-covenant.org
74 | [version]: http://contributor-covenant.org/version/1/4/
75 |
--------------------------------------------------------------------------------
/tests/DotpaySignatureTest.php:
--------------------------------------------------------------------------------
1 | "12345",
16 | "operation_number" => "M0000-0000",
17 | "operation_type" => "payment",
18 | "operation_status" => "complete",
19 | "operation_amount" => "100.00",
20 | "operation_currency" => "PLN",
21 | "operation_original_amount" => "100.00",
22 | "operation_original_currency" => "PLN",
23 | "operation_datetime" => "2017-09-20 22=>12=>50",
24 | "control" => "12345",
25 | "description" => "Payment for internal_id order",
26 | "email" => "john.smith@example.com",
27 | "p_info" => "Test User (test@test.com)",
28 | "p_email" => "test@test.com",
29 | "channel" => "1",
30 | "signature" => "88be573b48612af19bf80a1bd43f7e3a219c8a6e70fd1215d596ac098b2b6733"
31 | ];
32 |
33 | $result = $validator->verify($response);
34 | $this->assertFalse($result);
35 | }
36 |
37 | public function test_signature_fail_invalid_hash()
38 | {
39 | $pin = 12345;
40 | $validator = new Validator($pin);
41 | $response = [
42 | "id" => "12345",
43 | "operation_number" => "M0000-0000",
44 | "operation_type" => "payment",
45 | "operation_status" => "complete",
46 | "operation_amount" => "100.00",
47 | "operation_currency" => "PLN",
48 | "operation_original_amount" => "100.00",
49 | "operation_original_currency" => "PLN",
50 | "operation_datetime" => "2017-09-20 22=>12=>50",
51 | "control" => "12345",
52 | "description" => "Payment for internal_id order",
53 | "email" => "john.smith@example.com",
54 | "p_info" => "Test User (test@test.com)",
55 | "p_email" => "test@test.com",
56 | "channel" => "1",
57 | "signature" => "dunno"
58 | ];
59 |
60 | $result = $validator->verify($response);
61 | $this->assertFalse($result);
62 | }
63 |
64 | public function test_signature_success()
65 | {
66 | $pin = 12345;
67 | $validator = new Validator($pin);
68 | $response = [
69 | "id" => "12345",
70 | "operation_number" => "M0000-0000",
71 | "operation_type" => "payment",
72 | "operation_status" => "complete",
73 | "operation_amount" => "100.00",
74 | "operation_currency" => "PLN",
75 | "operation_original_amount" => "100.00",
76 | "operation_original_currency" => "PLN",
77 | "operation_datetime" => "2017-09-20 22=>12=>50",
78 | "control" => "12345",
79 | "description" => "Payment for internal_id order",
80 | "email" => "john.smith@example.com",
81 | "p_info" => "Test User (test@test.com)",
82 | "p_email" => "test@test.com",
83 | "channel" => "1",
84 | "signature" => "88be573b48612af19bf80a1bd43f7e3a219c8a6e70fd1215d596ac098b2b6733"
85 | ];
86 |
87 | $result = $validator->verify($response);
88 | $this->assertTrue($result);
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # laravel-dotpay
2 |
3 | Paczka Dotpay do Laravela 5.x. Pozwala przesyłać dane bezpośrednio przez API zamiast formularza.
4 |
5 | [](https://scrutinizer-ci.com/g/axotion/laravel-dotpay/?branch=master)
6 | [](https://scrutinizer-ci.com/g/axotion/laravel-dotpay/build-status/master)
7 | [](https://packagist.org/packages/evilnet/dotpay)
8 | [](https://packagist.org/packages/evilnet/dotpay)
9 | [](https://packagist.org/packages/evilnet/dotpay)
10 | ## Struktura
11 |
12 | ```
13 | src/
14 | tests/
15 | ```
16 |
17 |
18 | ## Instalacja
19 |
20 | Przez composera
21 |
22 | ``` bash
23 | $ composer require evilnet/dotpay
24 | ```
25 |
26 | lub w przypadku używania aktualnej wersji z mastera (niezalecane jeżeli chcesz używać najbardziej stabilnej wersji która została ujęta w release) dodaj do pliku composera
27 |
28 | ```json
29 | "require": {
30 | "evilnet/dotpay": "dev-master"
31 | },
32 |
33 | ```
34 | Potem zarejestruj usługę i ewentualnie alias by móc używać fasady w config/app.php (Niepotrzebne od Laravela 5.5 i wzwyż)
35 |
36 |
37 | ```
38 | 'providers' => [
39 |
40 | Evilnet\Dotpay\DotpayServiceProvider::class,
41 |
42 |
43 | 'aliases' => [
44 | 'Dotpay' => Evilnet\Dotpay\Facades\Dotpay::class
45 | ```
46 |
47 |
48 | Opublikuj konfguracje i wprowadź w niej potrzebne dane
49 |
50 | ```
51 | php artisan vendor:publish --provider="Evilnet\Dotpay\DotpayServiceProvider"
52 | ```
53 |
54 | Dodaj wartości do pliku .env
55 |
56 | ```
57 | DOTPAY_USERNAME=
58 | DOTPAY_PASSWORD=
59 | DOTPAY_SHOP_ID=
60 | DOTPAY_PIN=
61 | DOTPAY_BASE_URL=https://ssl.dotpay.pl/test_seller/
62 | ```
63 | I dodaj swoją metodę do obsługi callbacku jako wyjątek w pliku VerifyCsrfToken (Potrzebne by uderzenia POST z dotpaya nie wymagały tego tokenu)
64 |
65 | ### Środowiska
66 |
67 | Produkcyjne:
68 | https://ssl.dotpay.pl/s2/login/
69 |
70 | Testowe:
71 | https://ssl.dotpay.pl/test_seller/
72 |
73 |
74 | ## Przykład użycia
75 |
76 | ``` php
77 | namespace App\Http\Controllers;
78 |
79 | use Evilnet\Dotpay\DotpayManager;
80 | use Illuminate\Http\Request;
81 | use Illuminate\Http\Response;
82 |
83 | class DotpayController extends Controller
84 | {
85 |
86 | private $dotpayManager;
87 |
88 | public function __construct(DotpayManager $dotpayManager)
89 | {
90 | $this->dotpayManager = $dotpayManager;
91 | }
92 |
93 | // Tutaj uderzy Dotpay z danymi o tym w jakim stanie jest transakcja. Zwrócenie OK jest wymagane by dotpay przyjął, że serwer odpowiada poprawnie
94 |
95 | public function callback(Request $request)
96 | {
97 | $response = $this->dotpayManager->callback($request->all());
98 |
99 | //Do whatever you want with this
100 |
101 | return new Response('OK');
102 | }
103 |
104 | public function pay()
105 | {
106 | $data = [
107 | 'amount' => '100',
108 | 'currency' => 'PLN',
109 | 'description' => 'Payment for internal_id order',
110 | 'control' => '12345', //ID that dotpay will pong you in the answer
111 | 'language' => 'pl',
112 | 'ch_lock' => '1',
113 | 'url' => config('dotpay.options.url'),
114 | 'urlc' => config('dotpay.options.curl'),
115 | 'expiration_datetime' => '2017-12-01T16:48:00',
116 | 'payer' => [
117 | 'first_name' => 'John',
118 | 'last_name' => 'Smith',
119 | 'email' => 'john.smith@example.com',
120 | 'phone' => '+48123123123'
121 | ],
122 | 'recipient' => config('dotpay.options.recipient')
123 |
124 | ];
125 |
126 | return redirect()->to($this->dotpayManager->createPayment($data));
127 | }
128 | }
129 | ```
130 |
131 | ## Change log
132 |
133 | Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
134 |
135 | ## Testing
136 |
137 | ``` bash
138 | $ phpunit vendor/evilnet/dotpay/tests
139 | ```
140 |
141 | ## Contributing
142 |
143 | Please see [CONTRIBUTING](CONTRIBUTING.md) and [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) for details.
144 |
145 | ## Security
146 |
147 | If you discover any security related issues, please email axotion@linux.pl instead of using the issue tracker.
148 |
149 | ## Credits
150 |
151 | - [Axotion][link-author]
152 | - [All Contributors][link-contributors]
153 |
154 | ## License
155 |
156 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
157 |
158 | [ico-version]: https://img.shields.io/packagist/v/evilnet/dotpay.svg?style=flat-square
159 | [ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square
160 | [ico-travis]: https://img.shields.io/travis/evilnet/dotpay/master.svg?style=flat-square
161 | [ico-scrutinizer]: https://img.shields.io/scrutinizer/coverage/g/evilnet/dotpay.svg?style=flat-square
162 | [ico-code-quality]: https://img.shields.io/scrutinizer/g/evilnet/dotpay.svg?style=flat-square
163 | [ico-downloads]: https://img.shields.io/packagist/dt/evilnet/dotpay.svg?style=flat-square
164 |
165 | [link-packagist]: https://packagist.org/packages/evilnet/dotpay
166 | [link-travis]: https://travis-ci.org/evilnet/dotpay
167 | [link-scrutinizer]: https://scrutinizer-ci.com/g/evilnet/dotpay/code-structure
168 | [link-code-quality]: https://scrutinizer-ci.com/g/evilnet/dotpay
169 | [link-downloads]: https://packagist.org/packages/evilnet/dotpay
170 | [link-author]: https://github.com/axotion
171 | [link-contributors]: ../../contributors
172 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "374b2d0be9ca18972be6ef0416c8c3c0",
8 | "packages": [
9 | {
10 | "name": "doctrine/inflector",
11 | "version": "v1.3.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/doctrine/inflector.git",
15 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
20 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": "^7.1"
25 | },
26 | "require-dev": {
27 | "phpunit/phpunit": "^6.2"
28 | },
29 | "type": "library",
30 | "extra": {
31 | "branch-alias": {
32 | "dev-master": "1.3.x-dev"
33 | }
34 | },
35 | "autoload": {
36 | "psr-4": {
37 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
38 | }
39 | },
40 | "notification-url": "https://packagist.org/downloads/",
41 | "license": [
42 | "MIT"
43 | ],
44 | "authors": [
45 | {
46 | "name": "Roman Borschel",
47 | "email": "roman@code-factory.org"
48 | },
49 | {
50 | "name": "Benjamin Eberlei",
51 | "email": "kontakt@beberlei.de"
52 | },
53 | {
54 | "name": "Guilherme Blanco",
55 | "email": "guilhermeblanco@gmail.com"
56 | },
57 | {
58 | "name": "Jonathan Wage",
59 | "email": "jonwage@gmail.com"
60 | },
61 | {
62 | "name": "Johannes Schmitt",
63 | "email": "schmittjoh@gmail.com"
64 | }
65 | ],
66 | "description": "Common String Manipulations with regard to casing and singular/plural rules.",
67 | "homepage": "http://www.doctrine-project.org",
68 | "keywords": [
69 | "inflection",
70 | "pluralize",
71 | "singularize",
72 | "string"
73 | ],
74 | "time": "2018-01-09T20:05:19+00:00"
75 | },
76 | {
77 | "name": "guzzlehttp/guzzle",
78 | "version": "6.3.3",
79 | "source": {
80 | "type": "git",
81 | "url": "https://github.com/guzzle/guzzle.git",
82 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
83 | },
84 | "dist": {
85 | "type": "zip",
86 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
87 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
88 | "shasum": ""
89 | },
90 | "require": {
91 | "guzzlehttp/promises": "^1.0",
92 | "guzzlehttp/psr7": "^1.4",
93 | "php": ">=5.5"
94 | },
95 | "require-dev": {
96 | "ext-curl": "*",
97 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
98 | "psr/log": "^1.0"
99 | },
100 | "suggest": {
101 | "psr/log": "Required for using the Log middleware"
102 | },
103 | "type": "library",
104 | "extra": {
105 | "branch-alias": {
106 | "dev-master": "6.3-dev"
107 | }
108 | },
109 | "autoload": {
110 | "files": [
111 | "src/functions_include.php"
112 | ],
113 | "psr-4": {
114 | "GuzzleHttp\\": "src/"
115 | }
116 | },
117 | "notification-url": "https://packagist.org/downloads/",
118 | "license": [
119 | "MIT"
120 | ],
121 | "authors": [
122 | {
123 | "name": "Michael Dowling",
124 | "email": "mtdowling@gmail.com",
125 | "homepage": "https://github.com/mtdowling"
126 | }
127 | ],
128 | "description": "Guzzle is a PHP HTTP client library",
129 | "homepage": "http://guzzlephp.org/",
130 | "keywords": [
131 | "client",
132 | "curl",
133 | "framework",
134 | "http",
135 | "http client",
136 | "rest",
137 | "web service"
138 | ],
139 | "time": "2018-04-22T15:46:56+00:00"
140 | },
141 | {
142 | "name": "guzzlehttp/promises",
143 | "version": "v1.3.1",
144 | "source": {
145 | "type": "git",
146 | "url": "https://github.com/guzzle/promises.git",
147 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
148 | },
149 | "dist": {
150 | "type": "zip",
151 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
152 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
153 | "shasum": ""
154 | },
155 | "require": {
156 | "php": ">=5.5.0"
157 | },
158 | "require-dev": {
159 | "phpunit/phpunit": "^4.0"
160 | },
161 | "type": "library",
162 | "extra": {
163 | "branch-alias": {
164 | "dev-master": "1.4-dev"
165 | }
166 | },
167 | "autoload": {
168 | "psr-4": {
169 | "GuzzleHttp\\Promise\\": "src/"
170 | },
171 | "files": [
172 | "src/functions_include.php"
173 | ]
174 | },
175 | "notification-url": "https://packagist.org/downloads/",
176 | "license": [
177 | "MIT"
178 | ],
179 | "authors": [
180 | {
181 | "name": "Michael Dowling",
182 | "email": "mtdowling@gmail.com",
183 | "homepage": "https://github.com/mtdowling"
184 | }
185 | ],
186 | "description": "Guzzle promises library",
187 | "keywords": [
188 | "promise"
189 | ],
190 | "time": "2016-12-20T10:07:11+00:00"
191 | },
192 | {
193 | "name": "guzzlehttp/psr7",
194 | "version": "1.4.2",
195 | "source": {
196 | "type": "git",
197 | "url": "https://github.com/guzzle/psr7.git",
198 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
199 | },
200 | "dist": {
201 | "type": "zip",
202 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
203 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
204 | "shasum": ""
205 | },
206 | "require": {
207 | "php": ">=5.4.0",
208 | "psr/http-message": "~1.0"
209 | },
210 | "provide": {
211 | "psr/http-message-implementation": "1.0"
212 | },
213 | "require-dev": {
214 | "phpunit/phpunit": "~4.0"
215 | },
216 | "type": "library",
217 | "extra": {
218 | "branch-alias": {
219 | "dev-master": "1.4-dev"
220 | }
221 | },
222 | "autoload": {
223 | "psr-4": {
224 | "GuzzleHttp\\Psr7\\": "src/"
225 | },
226 | "files": [
227 | "src/functions_include.php"
228 | ]
229 | },
230 | "notification-url": "https://packagist.org/downloads/",
231 | "license": [
232 | "MIT"
233 | ],
234 | "authors": [
235 | {
236 | "name": "Michael Dowling",
237 | "email": "mtdowling@gmail.com",
238 | "homepage": "https://github.com/mtdowling"
239 | },
240 | {
241 | "name": "Tobias Schultze",
242 | "homepage": "https://github.com/Tobion"
243 | }
244 | ],
245 | "description": "PSR-7 message implementation that also provides common utility methods",
246 | "keywords": [
247 | "http",
248 | "message",
249 | "request",
250 | "response",
251 | "stream",
252 | "uri",
253 | "url"
254 | ],
255 | "time": "2017-03-20T17:10:46+00:00"
256 | },
257 | {
258 | "name": "illuminate/contracts",
259 | "version": "v5.7.2",
260 | "source": {
261 | "type": "git",
262 | "url": "https://github.com/illuminate/contracts.git",
263 | "reference": "fd5d68eddfe49647f8354ac4c5f09cb88ccece7a"
264 | },
265 | "dist": {
266 | "type": "zip",
267 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/fd5d68eddfe49647f8354ac4c5f09cb88ccece7a",
268 | "reference": "fd5d68eddfe49647f8354ac4c5f09cb88ccece7a",
269 | "shasum": ""
270 | },
271 | "require": {
272 | "php": "^7.1.3",
273 | "psr/container": "^1.0",
274 | "psr/simple-cache": "^1.0"
275 | },
276 | "type": "library",
277 | "extra": {
278 | "branch-alias": {
279 | "dev-master": "5.7-dev"
280 | }
281 | },
282 | "autoload": {
283 | "psr-4": {
284 | "Illuminate\\Contracts\\": ""
285 | }
286 | },
287 | "notification-url": "https://packagist.org/downloads/",
288 | "license": [
289 | "MIT"
290 | ],
291 | "authors": [
292 | {
293 | "name": "Taylor Otwell",
294 | "email": "taylor@laravel.com"
295 | }
296 | ],
297 | "description": "The Illuminate Contracts package.",
298 | "homepage": "https://laravel.com",
299 | "time": "2018-09-05T21:56:43+00:00"
300 | },
301 | {
302 | "name": "illuminate/support",
303 | "version": "v5.7.2",
304 | "source": {
305 | "type": "git",
306 | "url": "https://github.com/illuminate/support.git",
307 | "reference": "3dabc8fe2eebf614ba133fa34a4c160119ec7241"
308 | },
309 | "dist": {
310 | "type": "zip",
311 | "url": "https://api.github.com/repos/illuminate/support/zipball/3dabc8fe2eebf614ba133fa34a4c160119ec7241",
312 | "reference": "3dabc8fe2eebf614ba133fa34a4c160119ec7241",
313 | "shasum": ""
314 | },
315 | "require": {
316 | "doctrine/inflector": "^1.1",
317 | "ext-mbstring": "*",
318 | "illuminate/contracts": "5.7.*",
319 | "nesbot/carbon": "^1.26.3",
320 | "php": "^7.1.3"
321 | },
322 | "conflict": {
323 | "tightenco/collect": "<5.5.33"
324 | },
325 | "suggest": {
326 | "illuminate/filesystem": "Required to use the composer class (5.7.*).",
327 | "moontoast/math": "Required to use ordered UUIDs (^1.1).",
328 | "ramsey/uuid": "Required to use Str::uuid() (^3.7).",
329 | "symfony/process": "Required to use the composer class (^4.1).",
330 | "symfony/var-dumper": "Required to use the dd function (^4.1)."
331 | },
332 | "type": "library",
333 | "extra": {
334 | "branch-alias": {
335 | "dev-master": "5.7-dev"
336 | }
337 | },
338 | "autoload": {
339 | "psr-4": {
340 | "Illuminate\\Support\\": ""
341 | },
342 | "files": [
343 | "helpers.php"
344 | ]
345 | },
346 | "notification-url": "https://packagist.org/downloads/",
347 | "license": [
348 | "MIT"
349 | ],
350 | "authors": [
351 | {
352 | "name": "Taylor Otwell",
353 | "email": "taylor@laravel.com"
354 | }
355 | ],
356 | "description": "The Illuminate Support package.",
357 | "homepage": "https://laravel.com",
358 | "time": "2018-09-06T13:40:39+00:00"
359 | },
360 | {
361 | "name": "nesbot/carbon",
362 | "version": "1.33.0",
363 | "source": {
364 | "type": "git",
365 | "url": "https://github.com/briannesbitt/Carbon.git",
366 | "reference": "55667c1007a99e82030874b1bb14d24d07108413"
367 | },
368 | "dist": {
369 | "type": "zip",
370 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/55667c1007a99e82030874b1bb14d24d07108413",
371 | "reference": "55667c1007a99e82030874b1bb14d24d07108413",
372 | "shasum": ""
373 | },
374 | "require": {
375 | "php": ">=5.3.9",
376 | "symfony/translation": "~2.6 || ~3.0 || ~4.0"
377 | },
378 | "require-dev": {
379 | "friendsofphp/php-cs-fixer": "~2",
380 | "phpunit/phpunit": "^4.8.35 || ^5.7"
381 | },
382 | "type": "library",
383 | "extra": {
384 | "laravel": {
385 | "providers": [
386 | "Carbon\\Laravel\\ServiceProvider"
387 | ]
388 | }
389 | },
390 | "autoload": {
391 | "psr-4": {
392 | "": "src/"
393 | }
394 | },
395 | "notification-url": "https://packagist.org/downloads/",
396 | "license": [
397 | "MIT"
398 | ],
399 | "authors": [
400 | {
401 | "name": "Brian Nesbitt",
402 | "email": "brian@nesbot.com",
403 | "homepage": "http://nesbot.com"
404 | }
405 | ],
406 | "description": "A simple API extension for DateTime.",
407 | "homepage": "http://carbon.nesbot.com",
408 | "keywords": [
409 | "date",
410 | "datetime",
411 | "time"
412 | ],
413 | "time": "2018-08-07T08:39:47+00:00"
414 | },
415 | {
416 | "name": "psr/container",
417 | "version": "1.0.0",
418 | "source": {
419 | "type": "git",
420 | "url": "https://github.com/php-fig/container.git",
421 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
422 | },
423 | "dist": {
424 | "type": "zip",
425 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
426 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
427 | "shasum": ""
428 | },
429 | "require": {
430 | "php": ">=5.3.0"
431 | },
432 | "type": "library",
433 | "extra": {
434 | "branch-alias": {
435 | "dev-master": "1.0.x-dev"
436 | }
437 | },
438 | "autoload": {
439 | "psr-4": {
440 | "Psr\\Container\\": "src/"
441 | }
442 | },
443 | "notification-url": "https://packagist.org/downloads/",
444 | "license": [
445 | "MIT"
446 | ],
447 | "authors": [
448 | {
449 | "name": "PHP-FIG",
450 | "homepage": "http://www.php-fig.org/"
451 | }
452 | ],
453 | "description": "Common Container Interface (PHP FIG PSR-11)",
454 | "homepage": "https://github.com/php-fig/container",
455 | "keywords": [
456 | "PSR-11",
457 | "container",
458 | "container-interface",
459 | "container-interop",
460 | "psr"
461 | ],
462 | "time": "2017-02-14T16:28:37+00:00"
463 | },
464 | {
465 | "name": "psr/http-message",
466 | "version": "1.0.1",
467 | "source": {
468 | "type": "git",
469 | "url": "https://github.com/php-fig/http-message.git",
470 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
471 | },
472 | "dist": {
473 | "type": "zip",
474 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
475 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
476 | "shasum": ""
477 | },
478 | "require": {
479 | "php": ">=5.3.0"
480 | },
481 | "type": "library",
482 | "extra": {
483 | "branch-alias": {
484 | "dev-master": "1.0.x-dev"
485 | }
486 | },
487 | "autoload": {
488 | "psr-4": {
489 | "Psr\\Http\\Message\\": "src/"
490 | }
491 | },
492 | "notification-url": "https://packagist.org/downloads/",
493 | "license": [
494 | "MIT"
495 | ],
496 | "authors": [
497 | {
498 | "name": "PHP-FIG",
499 | "homepage": "http://www.php-fig.org/"
500 | }
501 | ],
502 | "description": "Common interface for HTTP messages",
503 | "homepage": "https://github.com/php-fig/http-message",
504 | "keywords": [
505 | "http",
506 | "http-message",
507 | "psr",
508 | "psr-7",
509 | "request",
510 | "response"
511 | ],
512 | "time": "2016-08-06T14:39:51+00:00"
513 | },
514 | {
515 | "name": "psr/simple-cache",
516 | "version": "1.0.1",
517 | "source": {
518 | "type": "git",
519 | "url": "https://github.com/php-fig/simple-cache.git",
520 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
521 | },
522 | "dist": {
523 | "type": "zip",
524 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
525 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
526 | "shasum": ""
527 | },
528 | "require": {
529 | "php": ">=5.3.0"
530 | },
531 | "type": "library",
532 | "extra": {
533 | "branch-alias": {
534 | "dev-master": "1.0.x-dev"
535 | }
536 | },
537 | "autoload": {
538 | "psr-4": {
539 | "Psr\\SimpleCache\\": "src/"
540 | }
541 | },
542 | "notification-url": "https://packagist.org/downloads/",
543 | "license": [
544 | "MIT"
545 | ],
546 | "authors": [
547 | {
548 | "name": "PHP-FIG",
549 | "homepage": "http://www.php-fig.org/"
550 | }
551 | ],
552 | "description": "Common interfaces for simple caching",
553 | "keywords": [
554 | "cache",
555 | "caching",
556 | "psr",
557 | "psr-16",
558 | "simple-cache"
559 | ],
560 | "time": "2017-10-23T01:57:42+00:00"
561 | },
562 | {
563 | "name": "symfony/polyfill-mbstring",
564 | "version": "v1.9.0",
565 | "source": {
566 | "type": "git",
567 | "url": "https://github.com/symfony/polyfill-mbstring.git",
568 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
569 | },
570 | "dist": {
571 | "type": "zip",
572 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
573 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
574 | "shasum": ""
575 | },
576 | "require": {
577 | "php": ">=5.3.3"
578 | },
579 | "suggest": {
580 | "ext-mbstring": "For best performance"
581 | },
582 | "type": "library",
583 | "extra": {
584 | "branch-alias": {
585 | "dev-master": "1.9-dev"
586 | }
587 | },
588 | "autoload": {
589 | "psr-4": {
590 | "Symfony\\Polyfill\\Mbstring\\": ""
591 | },
592 | "files": [
593 | "bootstrap.php"
594 | ]
595 | },
596 | "notification-url": "https://packagist.org/downloads/",
597 | "license": [
598 | "MIT"
599 | ],
600 | "authors": [
601 | {
602 | "name": "Nicolas Grekas",
603 | "email": "p@tchwork.com"
604 | },
605 | {
606 | "name": "Symfony Community",
607 | "homepage": "https://symfony.com/contributors"
608 | }
609 | ],
610 | "description": "Symfony polyfill for the Mbstring extension",
611 | "homepage": "https://symfony.com",
612 | "keywords": [
613 | "compatibility",
614 | "mbstring",
615 | "polyfill",
616 | "portable",
617 | "shim"
618 | ],
619 | "time": "2018-08-06T14:22:27+00:00"
620 | },
621 | {
622 | "name": "symfony/translation",
623 | "version": "v4.1.4",
624 | "source": {
625 | "type": "git",
626 | "url": "https://github.com/symfony/translation.git",
627 | "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f"
628 | },
629 | "dist": {
630 | "type": "zip",
631 | "url": "https://api.github.com/repos/symfony/translation/zipball/fa2182669f7983b7aa5f1a770d053f79f0ef144f",
632 | "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f",
633 | "shasum": ""
634 | },
635 | "require": {
636 | "php": "^7.1.3",
637 | "symfony/polyfill-mbstring": "~1.0"
638 | },
639 | "conflict": {
640 | "symfony/config": "<3.4",
641 | "symfony/dependency-injection": "<3.4",
642 | "symfony/yaml": "<3.4"
643 | },
644 | "require-dev": {
645 | "psr/log": "~1.0",
646 | "symfony/config": "~3.4|~4.0",
647 | "symfony/console": "~3.4|~4.0",
648 | "symfony/dependency-injection": "~3.4|~4.0",
649 | "symfony/finder": "~2.8|~3.0|~4.0",
650 | "symfony/intl": "~3.4|~4.0",
651 | "symfony/yaml": "~3.4|~4.0"
652 | },
653 | "suggest": {
654 | "psr/log-implementation": "To use logging capability in translator",
655 | "symfony/config": "",
656 | "symfony/yaml": ""
657 | },
658 | "type": "library",
659 | "extra": {
660 | "branch-alias": {
661 | "dev-master": "4.1-dev"
662 | }
663 | },
664 | "autoload": {
665 | "psr-4": {
666 | "Symfony\\Component\\Translation\\": ""
667 | },
668 | "exclude-from-classmap": [
669 | "/Tests/"
670 | ]
671 | },
672 | "notification-url": "https://packagist.org/downloads/",
673 | "license": [
674 | "MIT"
675 | ],
676 | "authors": [
677 | {
678 | "name": "Fabien Potencier",
679 | "email": "fabien@symfony.com"
680 | },
681 | {
682 | "name": "Symfony Community",
683 | "homepage": "https://symfony.com/contributors"
684 | }
685 | ],
686 | "description": "Symfony Translation Component",
687 | "homepage": "https://symfony.com",
688 | "time": "2018-08-07T12:45:11+00:00"
689 | }
690 | ],
691 | "packages-dev": [
692 | {
693 | "name": "doctrine/instantiator",
694 | "version": "1.1.0",
695 | "source": {
696 | "type": "git",
697 | "url": "https://github.com/doctrine/instantiator.git",
698 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
699 | },
700 | "dist": {
701 | "type": "zip",
702 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
703 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
704 | "shasum": ""
705 | },
706 | "require": {
707 | "php": "^7.1"
708 | },
709 | "require-dev": {
710 | "athletic/athletic": "~0.1.8",
711 | "ext-pdo": "*",
712 | "ext-phar": "*",
713 | "phpunit/phpunit": "^6.2.3",
714 | "squizlabs/php_codesniffer": "^3.0.2"
715 | },
716 | "type": "library",
717 | "extra": {
718 | "branch-alias": {
719 | "dev-master": "1.2.x-dev"
720 | }
721 | },
722 | "autoload": {
723 | "psr-4": {
724 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
725 | }
726 | },
727 | "notification-url": "https://packagist.org/downloads/",
728 | "license": [
729 | "MIT"
730 | ],
731 | "authors": [
732 | {
733 | "name": "Marco Pivetta",
734 | "email": "ocramius@gmail.com",
735 | "homepage": "http://ocramius.github.com/"
736 | }
737 | ],
738 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
739 | "homepage": "https://github.com/doctrine/instantiator",
740 | "keywords": [
741 | "constructor",
742 | "instantiate"
743 | ],
744 | "time": "2017-07-22T11:58:36+00:00"
745 | },
746 | {
747 | "name": "myclabs/deep-copy",
748 | "version": "1.8.1",
749 | "source": {
750 | "type": "git",
751 | "url": "https://github.com/myclabs/DeepCopy.git",
752 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
753 | },
754 | "dist": {
755 | "type": "zip",
756 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
757 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
758 | "shasum": ""
759 | },
760 | "require": {
761 | "php": "^7.1"
762 | },
763 | "replace": {
764 | "myclabs/deep-copy": "self.version"
765 | },
766 | "require-dev": {
767 | "doctrine/collections": "^1.0",
768 | "doctrine/common": "^2.6",
769 | "phpunit/phpunit": "^7.1"
770 | },
771 | "type": "library",
772 | "autoload": {
773 | "psr-4": {
774 | "DeepCopy\\": "src/DeepCopy/"
775 | },
776 | "files": [
777 | "src/DeepCopy/deep_copy.php"
778 | ]
779 | },
780 | "notification-url": "https://packagist.org/downloads/",
781 | "license": [
782 | "MIT"
783 | ],
784 | "description": "Create deep copies (clones) of your objects",
785 | "keywords": [
786 | "clone",
787 | "copy",
788 | "duplicate",
789 | "object",
790 | "object graph"
791 | ],
792 | "time": "2018-06-11T23:09:50+00:00"
793 | },
794 | {
795 | "name": "phar-io/manifest",
796 | "version": "1.0.3",
797 | "source": {
798 | "type": "git",
799 | "url": "https://github.com/phar-io/manifest.git",
800 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
801 | },
802 | "dist": {
803 | "type": "zip",
804 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
805 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
806 | "shasum": ""
807 | },
808 | "require": {
809 | "ext-dom": "*",
810 | "ext-phar": "*",
811 | "phar-io/version": "^2.0",
812 | "php": "^5.6 || ^7.0"
813 | },
814 | "type": "library",
815 | "extra": {
816 | "branch-alias": {
817 | "dev-master": "1.0.x-dev"
818 | }
819 | },
820 | "autoload": {
821 | "classmap": [
822 | "src/"
823 | ]
824 | },
825 | "notification-url": "https://packagist.org/downloads/",
826 | "license": [
827 | "BSD-3-Clause"
828 | ],
829 | "authors": [
830 | {
831 | "name": "Arne Blankerts",
832 | "email": "arne@blankerts.de",
833 | "role": "Developer"
834 | },
835 | {
836 | "name": "Sebastian Heuer",
837 | "email": "sebastian@phpeople.de",
838 | "role": "Developer"
839 | },
840 | {
841 | "name": "Sebastian Bergmann",
842 | "email": "sebastian@phpunit.de",
843 | "role": "Developer"
844 | }
845 | ],
846 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
847 | "time": "2018-07-08T19:23:20+00:00"
848 | },
849 | {
850 | "name": "phar-io/version",
851 | "version": "2.0.1",
852 | "source": {
853 | "type": "git",
854 | "url": "https://github.com/phar-io/version.git",
855 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
856 | },
857 | "dist": {
858 | "type": "zip",
859 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
860 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
861 | "shasum": ""
862 | },
863 | "require": {
864 | "php": "^5.6 || ^7.0"
865 | },
866 | "type": "library",
867 | "autoload": {
868 | "classmap": [
869 | "src/"
870 | ]
871 | },
872 | "notification-url": "https://packagist.org/downloads/",
873 | "license": [
874 | "BSD-3-Clause"
875 | ],
876 | "authors": [
877 | {
878 | "name": "Arne Blankerts",
879 | "email": "arne@blankerts.de",
880 | "role": "Developer"
881 | },
882 | {
883 | "name": "Sebastian Heuer",
884 | "email": "sebastian@phpeople.de",
885 | "role": "Developer"
886 | },
887 | {
888 | "name": "Sebastian Bergmann",
889 | "email": "sebastian@phpunit.de",
890 | "role": "Developer"
891 | }
892 | ],
893 | "description": "Library for handling version information and constraints",
894 | "time": "2018-07-08T19:19:57+00:00"
895 | },
896 | {
897 | "name": "phpdocumentor/reflection-common",
898 | "version": "1.0.1",
899 | "source": {
900 | "type": "git",
901 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
902 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
903 | },
904 | "dist": {
905 | "type": "zip",
906 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
907 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
908 | "shasum": ""
909 | },
910 | "require": {
911 | "php": ">=5.5"
912 | },
913 | "require-dev": {
914 | "phpunit/phpunit": "^4.6"
915 | },
916 | "type": "library",
917 | "extra": {
918 | "branch-alias": {
919 | "dev-master": "1.0.x-dev"
920 | }
921 | },
922 | "autoload": {
923 | "psr-4": {
924 | "phpDocumentor\\Reflection\\": [
925 | "src"
926 | ]
927 | }
928 | },
929 | "notification-url": "https://packagist.org/downloads/",
930 | "license": [
931 | "MIT"
932 | ],
933 | "authors": [
934 | {
935 | "name": "Jaap van Otterdijk",
936 | "email": "opensource@ijaap.nl"
937 | }
938 | ],
939 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
940 | "homepage": "http://www.phpdoc.org",
941 | "keywords": [
942 | "FQSEN",
943 | "phpDocumentor",
944 | "phpdoc",
945 | "reflection",
946 | "static analysis"
947 | ],
948 | "time": "2017-09-11T18:02:19+00:00"
949 | },
950 | {
951 | "name": "phpdocumentor/reflection-docblock",
952 | "version": "4.3.0",
953 | "source": {
954 | "type": "git",
955 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
956 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
957 | },
958 | "dist": {
959 | "type": "zip",
960 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
961 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
962 | "shasum": ""
963 | },
964 | "require": {
965 | "php": "^7.0",
966 | "phpdocumentor/reflection-common": "^1.0.0",
967 | "phpdocumentor/type-resolver": "^0.4.0",
968 | "webmozart/assert": "^1.0"
969 | },
970 | "require-dev": {
971 | "doctrine/instantiator": "~1.0.5",
972 | "mockery/mockery": "^1.0",
973 | "phpunit/phpunit": "^6.4"
974 | },
975 | "type": "library",
976 | "extra": {
977 | "branch-alias": {
978 | "dev-master": "4.x-dev"
979 | }
980 | },
981 | "autoload": {
982 | "psr-4": {
983 | "phpDocumentor\\Reflection\\": [
984 | "src/"
985 | ]
986 | }
987 | },
988 | "notification-url": "https://packagist.org/downloads/",
989 | "license": [
990 | "MIT"
991 | ],
992 | "authors": [
993 | {
994 | "name": "Mike van Riel",
995 | "email": "me@mikevanriel.com"
996 | }
997 | ],
998 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
999 | "time": "2017-11-30T07:14:17+00:00"
1000 | },
1001 | {
1002 | "name": "phpdocumentor/type-resolver",
1003 | "version": "0.4.0",
1004 | "source": {
1005 | "type": "git",
1006 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
1007 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
1008 | },
1009 | "dist": {
1010 | "type": "zip",
1011 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
1012 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
1013 | "shasum": ""
1014 | },
1015 | "require": {
1016 | "php": "^5.5 || ^7.0",
1017 | "phpdocumentor/reflection-common": "^1.0"
1018 | },
1019 | "require-dev": {
1020 | "mockery/mockery": "^0.9.4",
1021 | "phpunit/phpunit": "^5.2||^4.8.24"
1022 | },
1023 | "type": "library",
1024 | "extra": {
1025 | "branch-alias": {
1026 | "dev-master": "1.0.x-dev"
1027 | }
1028 | },
1029 | "autoload": {
1030 | "psr-4": {
1031 | "phpDocumentor\\Reflection\\": [
1032 | "src/"
1033 | ]
1034 | }
1035 | },
1036 | "notification-url": "https://packagist.org/downloads/",
1037 | "license": [
1038 | "MIT"
1039 | ],
1040 | "authors": [
1041 | {
1042 | "name": "Mike van Riel",
1043 | "email": "me@mikevanriel.com"
1044 | }
1045 | ],
1046 | "time": "2017-07-14T14:27:02+00:00"
1047 | },
1048 | {
1049 | "name": "phpspec/prophecy",
1050 | "version": "1.8.0",
1051 | "source": {
1052 | "type": "git",
1053 | "url": "https://github.com/phpspec/prophecy.git",
1054 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
1055 | },
1056 | "dist": {
1057 | "type": "zip",
1058 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
1059 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
1060 | "shasum": ""
1061 | },
1062 | "require": {
1063 | "doctrine/instantiator": "^1.0.2",
1064 | "php": "^5.3|^7.0",
1065 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
1066 | "sebastian/comparator": "^1.1|^2.0|^3.0",
1067 | "sebastian/recursion-context": "^1.0|^2.0|^3.0"
1068 | },
1069 | "require-dev": {
1070 | "phpspec/phpspec": "^2.5|^3.2",
1071 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
1072 | },
1073 | "type": "library",
1074 | "extra": {
1075 | "branch-alias": {
1076 | "dev-master": "1.8.x-dev"
1077 | }
1078 | },
1079 | "autoload": {
1080 | "psr-0": {
1081 | "Prophecy\\": "src/"
1082 | }
1083 | },
1084 | "notification-url": "https://packagist.org/downloads/",
1085 | "license": [
1086 | "MIT"
1087 | ],
1088 | "authors": [
1089 | {
1090 | "name": "Konstantin Kudryashov",
1091 | "email": "ever.zet@gmail.com",
1092 | "homepage": "http://everzet.com"
1093 | },
1094 | {
1095 | "name": "Marcello Duarte",
1096 | "email": "marcello.duarte@gmail.com"
1097 | }
1098 | ],
1099 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1100 | "homepage": "https://github.com/phpspec/prophecy",
1101 | "keywords": [
1102 | "Double",
1103 | "Dummy",
1104 | "fake",
1105 | "mock",
1106 | "spy",
1107 | "stub"
1108 | ],
1109 | "time": "2018-08-05T17:53:17+00:00"
1110 | },
1111 | {
1112 | "name": "phpunit/php-code-coverage",
1113 | "version": "6.0.7",
1114 | "source": {
1115 | "type": "git",
1116 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1117 | "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a"
1118 | },
1119 | "dist": {
1120 | "type": "zip",
1121 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a",
1122 | "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a",
1123 | "shasum": ""
1124 | },
1125 | "require": {
1126 | "ext-dom": "*",
1127 | "ext-xmlwriter": "*",
1128 | "php": "^7.1",
1129 | "phpunit/php-file-iterator": "^2.0",
1130 | "phpunit/php-text-template": "^1.2.1",
1131 | "phpunit/php-token-stream": "^3.0",
1132 | "sebastian/code-unit-reverse-lookup": "^1.0.1",
1133 | "sebastian/environment": "^3.1",
1134 | "sebastian/version": "^2.0.1",
1135 | "theseer/tokenizer": "^1.1"
1136 | },
1137 | "require-dev": {
1138 | "phpunit/phpunit": "^7.0"
1139 | },
1140 | "suggest": {
1141 | "ext-xdebug": "^2.6.0"
1142 | },
1143 | "type": "library",
1144 | "extra": {
1145 | "branch-alias": {
1146 | "dev-master": "6.0-dev"
1147 | }
1148 | },
1149 | "autoload": {
1150 | "classmap": [
1151 | "src/"
1152 | ]
1153 | },
1154 | "notification-url": "https://packagist.org/downloads/",
1155 | "license": [
1156 | "BSD-3-Clause"
1157 | ],
1158 | "authors": [
1159 | {
1160 | "name": "Sebastian Bergmann",
1161 | "email": "sebastian@phpunit.de",
1162 | "role": "lead"
1163 | }
1164 | ],
1165 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1166 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1167 | "keywords": [
1168 | "coverage",
1169 | "testing",
1170 | "xunit"
1171 | ],
1172 | "time": "2018-06-01T07:51:50+00:00"
1173 | },
1174 | {
1175 | "name": "phpunit/php-file-iterator",
1176 | "version": "2.0.1",
1177 | "source": {
1178 | "type": "git",
1179 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1180 | "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c"
1181 | },
1182 | "dist": {
1183 | "type": "zip",
1184 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cecbc684605bb0cc288828eb5d65d93d5c676d3c",
1185 | "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c",
1186 | "shasum": ""
1187 | },
1188 | "require": {
1189 | "php": "^7.1"
1190 | },
1191 | "type": "library",
1192 | "extra": {
1193 | "branch-alias": {
1194 | "dev-master": "2.0.x-dev"
1195 | }
1196 | },
1197 | "autoload": {
1198 | "classmap": [
1199 | "src/"
1200 | ]
1201 | },
1202 | "notification-url": "https://packagist.org/downloads/",
1203 | "license": [
1204 | "BSD-3-Clause"
1205 | ],
1206 | "authors": [
1207 | {
1208 | "name": "Sebastian Bergmann",
1209 | "email": "sebastian@phpunit.de",
1210 | "role": "lead"
1211 | }
1212 | ],
1213 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1214 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1215 | "keywords": [
1216 | "filesystem",
1217 | "iterator"
1218 | ],
1219 | "time": "2018-06-11T11:44:00+00:00"
1220 | },
1221 | {
1222 | "name": "phpunit/php-text-template",
1223 | "version": "1.2.1",
1224 | "source": {
1225 | "type": "git",
1226 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1227 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
1228 | },
1229 | "dist": {
1230 | "type": "zip",
1231 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1232 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1233 | "shasum": ""
1234 | },
1235 | "require": {
1236 | "php": ">=5.3.3"
1237 | },
1238 | "type": "library",
1239 | "autoload": {
1240 | "classmap": [
1241 | "src/"
1242 | ]
1243 | },
1244 | "notification-url": "https://packagist.org/downloads/",
1245 | "license": [
1246 | "BSD-3-Clause"
1247 | ],
1248 | "authors": [
1249 | {
1250 | "name": "Sebastian Bergmann",
1251 | "email": "sebastian@phpunit.de",
1252 | "role": "lead"
1253 | }
1254 | ],
1255 | "description": "Simple template engine.",
1256 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1257 | "keywords": [
1258 | "template"
1259 | ],
1260 | "time": "2015-06-21T13:50:34+00:00"
1261 | },
1262 | {
1263 | "name": "phpunit/php-timer",
1264 | "version": "2.0.0",
1265 | "source": {
1266 | "type": "git",
1267 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1268 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f"
1269 | },
1270 | "dist": {
1271 | "type": "zip",
1272 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f",
1273 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f",
1274 | "shasum": ""
1275 | },
1276 | "require": {
1277 | "php": "^7.1"
1278 | },
1279 | "require-dev": {
1280 | "phpunit/phpunit": "^7.0"
1281 | },
1282 | "type": "library",
1283 | "extra": {
1284 | "branch-alias": {
1285 | "dev-master": "2.0-dev"
1286 | }
1287 | },
1288 | "autoload": {
1289 | "classmap": [
1290 | "src/"
1291 | ]
1292 | },
1293 | "notification-url": "https://packagist.org/downloads/",
1294 | "license": [
1295 | "BSD-3-Clause"
1296 | ],
1297 | "authors": [
1298 | {
1299 | "name": "Sebastian Bergmann",
1300 | "email": "sebastian@phpunit.de",
1301 | "role": "lead"
1302 | }
1303 | ],
1304 | "description": "Utility class for timing",
1305 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1306 | "keywords": [
1307 | "timer"
1308 | ],
1309 | "time": "2018-02-01T13:07:23+00:00"
1310 | },
1311 | {
1312 | "name": "phpunit/php-token-stream",
1313 | "version": "3.0.0",
1314 | "source": {
1315 | "type": "git",
1316 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1317 | "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace"
1318 | },
1319 | "dist": {
1320 | "type": "zip",
1321 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace",
1322 | "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace",
1323 | "shasum": ""
1324 | },
1325 | "require": {
1326 | "ext-tokenizer": "*",
1327 | "php": "^7.1"
1328 | },
1329 | "require-dev": {
1330 | "phpunit/phpunit": "^7.0"
1331 | },
1332 | "type": "library",
1333 | "extra": {
1334 | "branch-alias": {
1335 | "dev-master": "3.0-dev"
1336 | }
1337 | },
1338 | "autoload": {
1339 | "classmap": [
1340 | "src/"
1341 | ]
1342 | },
1343 | "notification-url": "https://packagist.org/downloads/",
1344 | "license": [
1345 | "BSD-3-Clause"
1346 | ],
1347 | "authors": [
1348 | {
1349 | "name": "Sebastian Bergmann",
1350 | "email": "sebastian@phpunit.de"
1351 | }
1352 | ],
1353 | "description": "Wrapper around PHP's tokenizer extension.",
1354 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1355 | "keywords": [
1356 | "tokenizer"
1357 | ],
1358 | "time": "2018-02-01T13:16:43+00:00"
1359 | },
1360 | {
1361 | "name": "phpunit/phpunit",
1362 | "version": "7.3.4",
1363 | "source": {
1364 | "type": "git",
1365 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1366 | "reference": "0356331bf62896dc56e3a15030b23b73f38b2935"
1367 | },
1368 | "dist": {
1369 | "type": "zip",
1370 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0356331bf62896dc56e3a15030b23b73f38b2935",
1371 | "reference": "0356331bf62896dc56e3a15030b23b73f38b2935",
1372 | "shasum": ""
1373 | },
1374 | "require": {
1375 | "doctrine/instantiator": "^1.1",
1376 | "ext-dom": "*",
1377 | "ext-json": "*",
1378 | "ext-libxml": "*",
1379 | "ext-mbstring": "*",
1380 | "ext-xml": "*",
1381 | "myclabs/deep-copy": "^1.7",
1382 | "phar-io/manifest": "^1.0.2",
1383 | "phar-io/version": "^2.0",
1384 | "php": "^7.1",
1385 | "phpspec/prophecy": "^1.7",
1386 | "phpunit/php-code-coverage": "^6.0.7",
1387 | "phpunit/php-file-iterator": "^2.0.1",
1388 | "phpunit/php-text-template": "^1.2.1",
1389 | "phpunit/php-timer": "^2.0",
1390 | "sebastian/comparator": "^3.0",
1391 | "sebastian/diff": "^3.0",
1392 | "sebastian/environment": "^3.1",
1393 | "sebastian/exporter": "^3.1",
1394 | "sebastian/global-state": "^2.0",
1395 | "sebastian/object-enumerator": "^3.0.3",
1396 | "sebastian/resource-operations": "^1.0",
1397 | "sebastian/version": "^2.0.1"
1398 | },
1399 | "conflict": {
1400 | "phpunit/phpunit-mock-objects": "*"
1401 | },
1402 | "require-dev": {
1403 | "ext-pdo": "*"
1404 | },
1405 | "suggest": {
1406 | "ext-soap": "*",
1407 | "ext-xdebug": "*",
1408 | "phpunit/php-invoker": "^2.0"
1409 | },
1410 | "bin": [
1411 | "phpunit"
1412 | ],
1413 | "type": "library",
1414 | "extra": {
1415 | "branch-alias": {
1416 | "dev-master": "7.3-dev"
1417 | }
1418 | },
1419 | "autoload": {
1420 | "classmap": [
1421 | "src/"
1422 | ]
1423 | },
1424 | "notification-url": "https://packagist.org/downloads/",
1425 | "license": [
1426 | "BSD-3-Clause"
1427 | ],
1428 | "authors": [
1429 | {
1430 | "name": "Sebastian Bergmann",
1431 | "email": "sebastian@phpunit.de",
1432 | "role": "lead"
1433 | }
1434 | ],
1435 | "description": "The PHP Unit Testing framework.",
1436 | "homepage": "https://phpunit.de/",
1437 | "keywords": [
1438 | "phpunit",
1439 | "testing",
1440 | "xunit"
1441 | ],
1442 | "time": "2018-09-05T09:58:53+00:00"
1443 | },
1444 | {
1445 | "name": "sebastian/code-unit-reverse-lookup",
1446 | "version": "1.0.1",
1447 | "source": {
1448 | "type": "git",
1449 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1450 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
1451 | },
1452 | "dist": {
1453 | "type": "zip",
1454 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
1455 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
1456 | "shasum": ""
1457 | },
1458 | "require": {
1459 | "php": "^5.6 || ^7.0"
1460 | },
1461 | "require-dev": {
1462 | "phpunit/phpunit": "^5.7 || ^6.0"
1463 | },
1464 | "type": "library",
1465 | "extra": {
1466 | "branch-alias": {
1467 | "dev-master": "1.0.x-dev"
1468 | }
1469 | },
1470 | "autoload": {
1471 | "classmap": [
1472 | "src/"
1473 | ]
1474 | },
1475 | "notification-url": "https://packagist.org/downloads/",
1476 | "license": [
1477 | "BSD-3-Clause"
1478 | ],
1479 | "authors": [
1480 | {
1481 | "name": "Sebastian Bergmann",
1482 | "email": "sebastian@phpunit.de"
1483 | }
1484 | ],
1485 | "description": "Looks up which function or method a line of code belongs to",
1486 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1487 | "time": "2017-03-04T06:30:41+00:00"
1488 | },
1489 | {
1490 | "name": "sebastian/comparator",
1491 | "version": "3.0.2",
1492 | "source": {
1493 | "type": "git",
1494 | "url": "https://github.com/sebastianbergmann/comparator.git",
1495 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
1496 | },
1497 | "dist": {
1498 | "type": "zip",
1499 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
1500 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
1501 | "shasum": ""
1502 | },
1503 | "require": {
1504 | "php": "^7.1",
1505 | "sebastian/diff": "^3.0",
1506 | "sebastian/exporter": "^3.1"
1507 | },
1508 | "require-dev": {
1509 | "phpunit/phpunit": "^7.1"
1510 | },
1511 | "type": "library",
1512 | "extra": {
1513 | "branch-alias": {
1514 | "dev-master": "3.0-dev"
1515 | }
1516 | },
1517 | "autoload": {
1518 | "classmap": [
1519 | "src/"
1520 | ]
1521 | },
1522 | "notification-url": "https://packagist.org/downloads/",
1523 | "license": [
1524 | "BSD-3-Clause"
1525 | ],
1526 | "authors": [
1527 | {
1528 | "name": "Jeff Welch",
1529 | "email": "whatthejeff@gmail.com"
1530 | },
1531 | {
1532 | "name": "Volker Dusch",
1533 | "email": "github@wallbash.com"
1534 | },
1535 | {
1536 | "name": "Bernhard Schussek",
1537 | "email": "bschussek@2bepublished.at"
1538 | },
1539 | {
1540 | "name": "Sebastian Bergmann",
1541 | "email": "sebastian@phpunit.de"
1542 | }
1543 | ],
1544 | "description": "Provides the functionality to compare PHP values for equality",
1545 | "homepage": "https://github.com/sebastianbergmann/comparator",
1546 | "keywords": [
1547 | "comparator",
1548 | "compare",
1549 | "equality"
1550 | ],
1551 | "time": "2018-07-12T15:12:46+00:00"
1552 | },
1553 | {
1554 | "name": "sebastian/diff",
1555 | "version": "3.0.1",
1556 | "source": {
1557 | "type": "git",
1558 | "url": "https://github.com/sebastianbergmann/diff.git",
1559 | "reference": "366541b989927187c4ca70490a35615d3fef2dce"
1560 | },
1561 | "dist": {
1562 | "type": "zip",
1563 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce",
1564 | "reference": "366541b989927187c4ca70490a35615d3fef2dce",
1565 | "shasum": ""
1566 | },
1567 | "require": {
1568 | "php": "^7.1"
1569 | },
1570 | "require-dev": {
1571 | "phpunit/phpunit": "^7.0",
1572 | "symfony/process": "^2 || ^3.3 || ^4"
1573 | },
1574 | "type": "library",
1575 | "extra": {
1576 | "branch-alias": {
1577 | "dev-master": "3.0-dev"
1578 | }
1579 | },
1580 | "autoload": {
1581 | "classmap": [
1582 | "src/"
1583 | ]
1584 | },
1585 | "notification-url": "https://packagist.org/downloads/",
1586 | "license": [
1587 | "BSD-3-Clause"
1588 | ],
1589 | "authors": [
1590 | {
1591 | "name": "Kore Nordmann",
1592 | "email": "mail@kore-nordmann.de"
1593 | },
1594 | {
1595 | "name": "Sebastian Bergmann",
1596 | "email": "sebastian@phpunit.de"
1597 | }
1598 | ],
1599 | "description": "Diff implementation",
1600 | "homepage": "https://github.com/sebastianbergmann/diff",
1601 | "keywords": [
1602 | "diff",
1603 | "udiff",
1604 | "unidiff",
1605 | "unified diff"
1606 | ],
1607 | "time": "2018-06-10T07:54:39+00:00"
1608 | },
1609 | {
1610 | "name": "sebastian/environment",
1611 | "version": "3.1.0",
1612 | "source": {
1613 | "type": "git",
1614 | "url": "https://github.com/sebastianbergmann/environment.git",
1615 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
1616 | },
1617 | "dist": {
1618 | "type": "zip",
1619 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
1620 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
1621 | "shasum": ""
1622 | },
1623 | "require": {
1624 | "php": "^7.0"
1625 | },
1626 | "require-dev": {
1627 | "phpunit/phpunit": "^6.1"
1628 | },
1629 | "type": "library",
1630 | "extra": {
1631 | "branch-alias": {
1632 | "dev-master": "3.1.x-dev"
1633 | }
1634 | },
1635 | "autoload": {
1636 | "classmap": [
1637 | "src/"
1638 | ]
1639 | },
1640 | "notification-url": "https://packagist.org/downloads/",
1641 | "license": [
1642 | "BSD-3-Clause"
1643 | ],
1644 | "authors": [
1645 | {
1646 | "name": "Sebastian Bergmann",
1647 | "email": "sebastian@phpunit.de"
1648 | }
1649 | ],
1650 | "description": "Provides functionality to handle HHVM/PHP environments",
1651 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1652 | "keywords": [
1653 | "Xdebug",
1654 | "environment",
1655 | "hhvm"
1656 | ],
1657 | "time": "2017-07-01T08:51:00+00:00"
1658 | },
1659 | {
1660 | "name": "sebastian/exporter",
1661 | "version": "3.1.0",
1662 | "source": {
1663 | "type": "git",
1664 | "url": "https://github.com/sebastianbergmann/exporter.git",
1665 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
1666 | },
1667 | "dist": {
1668 | "type": "zip",
1669 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
1670 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
1671 | "shasum": ""
1672 | },
1673 | "require": {
1674 | "php": "^7.0",
1675 | "sebastian/recursion-context": "^3.0"
1676 | },
1677 | "require-dev": {
1678 | "ext-mbstring": "*",
1679 | "phpunit/phpunit": "^6.0"
1680 | },
1681 | "type": "library",
1682 | "extra": {
1683 | "branch-alias": {
1684 | "dev-master": "3.1.x-dev"
1685 | }
1686 | },
1687 | "autoload": {
1688 | "classmap": [
1689 | "src/"
1690 | ]
1691 | },
1692 | "notification-url": "https://packagist.org/downloads/",
1693 | "license": [
1694 | "BSD-3-Clause"
1695 | ],
1696 | "authors": [
1697 | {
1698 | "name": "Jeff Welch",
1699 | "email": "whatthejeff@gmail.com"
1700 | },
1701 | {
1702 | "name": "Volker Dusch",
1703 | "email": "github@wallbash.com"
1704 | },
1705 | {
1706 | "name": "Bernhard Schussek",
1707 | "email": "bschussek@2bepublished.at"
1708 | },
1709 | {
1710 | "name": "Sebastian Bergmann",
1711 | "email": "sebastian@phpunit.de"
1712 | },
1713 | {
1714 | "name": "Adam Harvey",
1715 | "email": "aharvey@php.net"
1716 | }
1717 | ],
1718 | "description": "Provides the functionality to export PHP variables for visualization",
1719 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1720 | "keywords": [
1721 | "export",
1722 | "exporter"
1723 | ],
1724 | "time": "2017-04-03T13:19:02+00:00"
1725 | },
1726 | {
1727 | "name": "sebastian/global-state",
1728 | "version": "2.0.0",
1729 | "source": {
1730 | "type": "git",
1731 | "url": "https://github.com/sebastianbergmann/global-state.git",
1732 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
1733 | },
1734 | "dist": {
1735 | "type": "zip",
1736 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
1737 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
1738 | "shasum": ""
1739 | },
1740 | "require": {
1741 | "php": "^7.0"
1742 | },
1743 | "require-dev": {
1744 | "phpunit/phpunit": "^6.0"
1745 | },
1746 | "suggest": {
1747 | "ext-uopz": "*"
1748 | },
1749 | "type": "library",
1750 | "extra": {
1751 | "branch-alias": {
1752 | "dev-master": "2.0-dev"
1753 | }
1754 | },
1755 | "autoload": {
1756 | "classmap": [
1757 | "src/"
1758 | ]
1759 | },
1760 | "notification-url": "https://packagist.org/downloads/",
1761 | "license": [
1762 | "BSD-3-Clause"
1763 | ],
1764 | "authors": [
1765 | {
1766 | "name": "Sebastian Bergmann",
1767 | "email": "sebastian@phpunit.de"
1768 | }
1769 | ],
1770 | "description": "Snapshotting of global state",
1771 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
1772 | "keywords": [
1773 | "global state"
1774 | ],
1775 | "time": "2017-04-27T15:39:26+00:00"
1776 | },
1777 | {
1778 | "name": "sebastian/object-enumerator",
1779 | "version": "3.0.3",
1780 | "source": {
1781 | "type": "git",
1782 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
1783 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
1784 | },
1785 | "dist": {
1786 | "type": "zip",
1787 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
1788 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
1789 | "shasum": ""
1790 | },
1791 | "require": {
1792 | "php": "^7.0",
1793 | "sebastian/object-reflector": "^1.1.1",
1794 | "sebastian/recursion-context": "^3.0"
1795 | },
1796 | "require-dev": {
1797 | "phpunit/phpunit": "^6.0"
1798 | },
1799 | "type": "library",
1800 | "extra": {
1801 | "branch-alias": {
1802 | "dev-master": "3.0.x-dev"
1803 | }
1804 | },
1805 | "autoload": {
1806 | "classmap": [
1807 | "src/"
1808 | ]
1809 | },
1810 | "notification-url": "https://packagist.org/downloads/",
1811 | "license": [
1812 | "BSD-3-Clause"
1813 | ],
1814 | "authors": [
1815 | {
1816 | "name": "Sebastian Bergmann",
1817 | "email": "sebastian@phpunit.de"
1818 | }
1819 | ],
1820 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
1821 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
1822 | "time": "2017-08-03T12:35:26+00:00"
1823 | },
1824 | {
1825 | "name": "sebastian/object-reflector",
1826 | "version": "1.1.1",
1827 | "source": {
1828 | "type": "git",
1829 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
1830 | "reference": "773f97c67f28de00d397be301821b06708fca0be"
1831 | },
1832 | "dist": {
1833 | "type": "zip",
1834 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
1835 | "reference": "773f97c67f28de00d397be301821b06708fca0be",
1836 | "shasum": ""
1837 | },
1838 | "require": {
1839 | "php": "^7.0"
1840 | },
1841 | "require-dev": {
1842 | "phpunit/phpunit": "^6.0"
1843 | },
1844 | "type": "library",
1845 | "extra": {
1846 | "branch-alias": {
1847 | "dev-master": "1.1-dev"
1848 | }
1849 | },
1850 | "autoload": {
1851 | "classmap": [
1852 | "src/"
1853 | ]
1854 | },
1855 | "notification-url": "https://packagist.org/downloads/",
1856 | "license": [
1857 | "BSD-3-Clause"
1858 | ],
1859 | "authors": [
1860 | {
1861 | "name": "Sebastian Bergmann",
1862 | "email": "sebastian@phpunit.de"
1863 | }
1864 | ],
1865 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
1866 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
1867 | "time": "2017-03-29T09:07:27+00:00"
1868 | },
1869 | {
1870 | "name": "sebastian/recursion-context",
1871 | "version": "3.0.0",
1872 | "source": {
1873 | "type": "git",
1874 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1875 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
1876 | },
1877 | "dist": {
1878 | "type": "zip",
1879 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
1880 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
1881 | "shasum": ""
1882 | },
1883 | "require": {
1884 | "php": "^7.0"
1885 | },
1886 | "require-dev": {
1887 | "phpunit/phpunit": "^6.0"
1888 | },
1889 | "type": "library",
1890 | "extra": {
1891 | "branch-alias": {
1892 | "dev-master": "3.0.x-dev"
1893 | }
1894 | },
1895 | "autoload": {
1896 | "classmap": [
1897 | "src/"
1898 | ]
1899 | },
1900 | "notification-url": "https://packagist.org/downloads/",
1901 | "license": [
1902 | "BSD-3-Clause"
1903 | ],
1904 | "authors": [
1905 | {
1906 | "name": "Jeff Welch",
1907 | "email": "whatthejeff@gmail.com"
1908 | },
1909 | {
1910 | "name": "Sebastian Bergmann",
1911 | "email": "sebastian@phpunit.de"
1912 | },
1913 | {
1914 | "name": "Adam Harvey",
1915 | "email": "aharvey@php.net"
1916 | }
1917 | ],
1918 | "description": "Provides functionality to recursively process PHP variables",
1919 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1920 | "time": "2017-03-03T06:23:57+00:00"
1921 | },
1922 | {
1923 | "name": "sebastian/resource-operations",
1924 | "version": "1.0.0",
1925 | "source": {
1926 | "type": "git",
1927 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
1928 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
1929 | },
1930 | "dist": {
1931 | "type": "zip",
1932 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
1933 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
1934 | "shasum": ""
1935 | },
1936 | "require": {
1937 | "php": ">=5.6.0"
1938 | },
1939 | "type": "library",
1940 | "extra": {
1941 | "branch-alias": {
1942 | "dev-master": "1.0.x-dev"
1943 | }
1944 | },
1945 | "autoload": {
1946 | "classmap": [
1947 | "src/"
1948 | ]
1949 | },
1950 | "notification-url": "https://packagist.org/downloads/",
1951 | "license": [
1952 | "BSD-3-Clause"
1953 | ],
1954 | "authors": [
1955 | {
1956 | "name": "Sebastian Bergmann",
1957 | "email": "sebastian@phpunit.de"
1958 | }
1959 | ],
1960 | "description": "Provides a list of PHP built-in functions that operate on resources",
1961 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
1962 | "time": "2015-07-28T20:34:47+00:00"
1963 | },
1964 | {
1965 | "name": "sebastian/version",
1966 | "version": "2.0.1",
1967 | "source": {
1968 | "type": "git",
1969 | "url": "https://github.com/sebastianbergmann/version.git",
1970 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
1971 | },
1972 | "dist": {
1973 | "type": "zip",
1974 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
1975 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
1976 | "shasum": ""
1977 | },
1978 | "require": {
1979 | "php": ">=5.6"
1980 | },
1981 | "type": "library",
1982 | "extra": {
1983 | "branch-alias": {
1984 | "dev-master": "2.0.x-dev"
1985 | }
1986 | },
1987 | "autoload": {
1988 | "classmap": [
1989 | "src/"
1990 | ]
1991 | },
1992 | "notification-url": "https://packagist.org/downloads/",
1993 | "license": [
1994 | "BSD-3-Clause"
1995 | ],
1996 | "authors": [
1997 | {
1998 | "name": "Sebastian Bergmann",
1999 | "email": "sebastian@phpunit.de",
2000 | "role": "lead"
2001 | }
2002 | ],
2003 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2004 | "homepage": "https://github.com/sebastianbergmann/version",
2005 | "time": "2016-10-03T07:35:21+00:00"
2006 | },
2007 | {
2008 | "name": "squizlabs/php_codesniffer",
2009 | "version": "2.9.1",
2010 | "source": {
2011 | "type": "git",
2012 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
2013 | "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
2014 | },
2015 | "dist": {
2016 | "type": "zip",
2017 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
2018 | "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
2019 | "shasum": ""
2020 | },
2021 | "require": {
2022 | "ext-simplexml": "*",
2023 | "ext-tokenizer": "*",
2024 | "ext-xmlwriter": "*",
2025 | "php": ">=5.1.2"
2026 | },
2027 | "require-dev": {
2028 | "phpunit/phpunit": "~4.0"
2029 | },
2030 | "bin": [
2031 | "scripts/phpcs",
2032 | "scripts/phpcbf"
2033 | ],
2034 | "type": "library",
2035 | "extra": {
2036 | "branch-alias": {
2037 | "dev-master": "2.x-dev"
2038 | }
2039 | },
2040 | "autoload": {
2041 | "classmap": [
2042 | "CodeSniffer.php",
2043 | "CodeSniffer/CLI.php",
2044 | "CodeSniffer/Exception.php",
2045 | "CodeSniffer/File.php",
2046 | "CodeSniffer/Fixer.php",
2047 | "CodeSniffer/Report.php",
2048 | "CodeSniffer/Reporting.php",
2049 | "CodeSniffer/Sniff.php",
2050 | "CodeSniffer/Tokens.php",
2051 | "CodeSniffer/Reports/",
2052 | "CodeSniffer/Tokenizers/",
2053 | "CodeSniffer/DocGenerators/",
2054 | "CodeSniffer/Standards/AbstractPatternSniff.php",
2055 | "CodeSniffer/Standards/AbstractScopeSniff.php",
2056 | "CodeSniffer/Standards/AbstractVariableSniff.php",
2057 | "CodeSniffer/Standards/IncorrectPatternException.php",
2058 | "CodeSniffer/Standards/Generic/Sniffs/",
2059 | "CodeSniffer/Standards/MySource/Sniffs/",
2060 | "CodeSniffer/Standards/PEAR/Sniffs/",
2061 | "CodeSniffer/Standards/PSR1/Sniffs/",
2062 | "CodeSniffer/Standards/PSR2/Sniffs/",
2063 | "CodeSniffer/Standards/Squiz/Sniffs/",
2064 | "CodeSniffer/Standards/Zend/Sniffs/"
2065 | ]
2066 | },
2067 | "notification-url": "https://packagist.org/downloads/",
2068 | "license": [
2069 | "BSD-3-Clause"
2070 | ],
2071 | "authors": [
2072 | {
2073 | "name": "Greg Sherwood",
2074 | "role": "lead"
2075 | }
2076 | ],
2077 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
2078 | "homepage": "http://www.squizlabs.com/php-codesniffer",
2079 | "keywords": [
2080 | "phpcs",
2081 | "standards"
2082 | ],
2083 | "time": "2017-05-22T02:43:20+00:00"
2084 | },
2085 | {
2086 | "name": "theseer/tokenizer",
2087 | "version": "1.1.0",
2088 | "source": {
2089 | "type": "git",
2090 | "url": "https://github.com/theseer/tokenizer.git",
2091 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
2092 | },
2093 | "dist": {
2094 | "type": "zip",
2095 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2096 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2097 | "shasum": ""
2098 | },
2099 | "require": {
2100 | "ext-dom": "*",
2101 | "ext-tokenizer": "*",
2102 | "ext-xmlwriter": "*",
2103 | "php": "^7.0"
2104 | },
2105 | "type": "library",
2106 | "autoload": {
2107 | "classmap": [
2108 | "src/"
2109 | ]
2110 | },
2111 | "notification-url": "https://packagist.org/downloads/",
2112 | "license": [
2113 | "BSD-3-Clause"
2114 | ],
2115 | "authors": [
2116 | {
2117 | "name": "Arne Blankerts",
2118 | "email": "arne@blankerts.de",
2119 | "role": "Developer"
2120 | }
2121 | ],
2122 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2123 | "time": "2017-04-07T12:08:54+00:00"
2124 | },
2125 | {
2126 | "name": "webmozart/assert",
2127 | "version": "1.3.0",
2128 | "source": {
2129 | "type": "git",
2130 | "url": "https://github.com/webmozart/assert.git",
2131 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
2132 | },
2133 | "dist": {
2134 | "type": "zip",
2135 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
2136 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
2137 | "shasum": ""
2138 | },
2139 | "require": {
2140 | "php": "^5.3.3 || ^7.0"
2141 | },
2142 | "require-dev": {
2143 | "phpunit/phpunit": "^4.6",
2144 | "sebastian/version": "^1.0.1"
2145 | },
2146 | "type": "library",
2147 | "extra": {
2148 | "branch-alias": {
2149 | "dev-master": "1.3-dev"
2150 | }
2151 | },
2152 | "autoload": {
2153 | "psr-4": {
2154 | "Webmozart\\Assert\\": "src/"
2155 | }
2156 | },
2157 | "notification-url": "https://packagist.org/downloads/",
2158 | "license": [
2159 | "MIT"
2160 | ],
2161 | "authors": [
2162 | {
2163 | "name": "Bernhard Schussek",
2164 | "email": "bschussek@gmail.com"
2165 | }
2166 | ],
2167 | "description": "Assertions to validate method input/output with nice error messages.",
2168 | "keywords": [
2169 | "assert",
2170 | "check",
2171 | "validate"
2172 | ],
2173 | "time": "2018-01-29T19:49:41+00:00"
2174 | }
2175 | ],
2176 | "aliases": [],
2177 | "minimum-stability": "stable",
2178 | "stability-flags": [],
2179 | "prefer-stable": false,
2180 | "prefer-lowest": false,
2181 | "platform": {
2182 | "php": "~5.6|~7.0"
2183 | },
2184 | "platform-dev": []
2185 | }
2186 |
--------------------------------------------------------------------------------