GithubHelp home page GithubHelp logo

omnipay-common's Introduction

Omnipay Common

Core components for the Omnipay PHP payment processing library

PHPUnit tests Latest Version on Packagist Software License Total Downloads

Omnipay is a framework agnostic, multi-gateway payment processing library for PHP. This package implements common classes required by Omnipay.

Documentation

Please see https://omnipay.thephpleague.com/ for the installation & usage documentation.

Change log

Please see UPGRADE for more information on how to upgrade to the latest version.

Support

If you are having general issues with Omnipay, we suggest posting on Stack Overflow. Be sure to add the omnipay tag so it can be easily found.

If you want to keep up to date with release announcements, discuss ideas for the project, or ask more detailed questions, there is also a mailing list which you can subscribe to.

If you believe you have found a bug, please report it using the GitHub issue tracker, or better yet, fork the library and submit a pull request.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

License

The MIT License (MIT). Please see License File for more information.

omnipay-common's People

Contributors

aderuwe avatar aimeos avatar amacneil avatar andrewcarteruk avatar anush avatar barryvdh avatar chris53897 avatar delatbabel avatar dercoder avatar eileenmcnaughton avatar greydnls avatar iamlucianojr avatar incarnate avatar jherbiere-giift avatar judgej avatar lucasmichot avatar mariano avatar mikeybeck avatar msvrtan avatar nickyr avatar nicolassing avatar php-cpm avatar pilot avatar pixelchutes avatar sergej-koscejev avatar tigr avatar timgws avatar vveselinov avatar w3guy avatar winzou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omnipay-common's Issues

Handle encrypted card details

Building out the eWay's new Rapid 3.1 Direct API. They have functionality to support client side encryption for those who don't want to forgo PCI-DSS compliance.

http://api-portal.anypoint.mulesoft.com/eway/api/eway-rapid-31-api/docs/client-side-encryption

The issue is I can't validate card as it doesn't contain any valid card details. This is what the card details turn up like.

["EWAY_CARDNUMBER"]=> string(353) "eCrypted:LkY4WI6HL/5JHWSLA4KIUnaGZCshOjxxQduNCkb59H3ZJCmKP3XoqsSxPbKak5Wr8VjQjGBV47fSsddLE+ks92gMBkj49QkrfjmMDUUrBl01biwNjNZ45Q7wQwi3UGBjTL19QIT5NLtzjXdwMfDl381ij0iR6Xc00fqG/OGPCg/2jsqDvuctRtQeJ0LhNA5Y1dJLH8BlY/DJL1L1K+cmg8bnM4InTXWUmTg/oTF4g+/kYdwYCBd6E64B+enZcuATFii79Jwz/EGfZcWGiyGjV2gpwCppSoIdXwVSrRu8l6tOnGXbqxxCNJpSvr0XLh9NzNulPr9hCKXP7cYxoyHnAA==" 
["EWAY_CARDCVN"]=> string(353) "eCrypted:KuvL5OuwKqfIyXBwMPTRQEw1LQFAAa1QJ5fI1oaj5Gk7Kr9TwjLKPC2tok7P7NfSlfvRMcAY3/lbx+zzKM9BYoDzDKHqezM8KutjR8DJ2NbPxs+ZhDoh9IdrYen7/dxIrQk4v9SmHAPHbGvF25jFEeHAnrg2ydI8NfJEqx83dSkgHzhLbXHxKnVB69LblzL0V+Nt3Qqy+UE7cfkU69ACuBJ1MfLrUXenLPHgdZWCCazGfhHa4kYBONXAgr90bb01N13KKP1KiZQIcGZt7XIB21CSTYDQ3twMXY/VO2H1A7yRFRRw/HpFsC7V6XAUdAc8IWHWFCBg6AbYp58cX/3ayA==" }

LGTM

Can we get some of the older PRs on this either merged or moved aside? Some have been hanging around for 2 years.

PRs that just add test coverage or docblocks should be a candidate for merging if they don't break anything.

Composer warning on guzzle/guzzle deprecation

Composer's throwing a warning saying that guzzle/guzzle has been deprecated and should be replaced with guzzlehttp/guzzle.

Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead.

Compatibility with Symfony 3.0

currently omnipay requires

"symfony/http-foundation": "~2.1"

which makes it currently unusable in Symfony 3.0 projects.
Symfony 3.0 was released yesterday.

Thank you for looking into this.

New PAYONE gateway

I have a new PAYONE gateway on packagist with these three gateway drivers:

        "Payone_ShopServer",
        "Payone_ShopFrontend",
        "Payone_ShopClient",

It needs to go into omnipy common composer.json just so it can appear in the example application. However, this is not an "official" gateway (yet) and is not fully covered by tests. Can it still go here, or are these just "official" gateways listed?

If these are just official, then perhaps the example application needs a way for all the non-official (i.e. third party) gateways to be listed so they can be run through the example application too?

Unable to use Omnipay with laravel 5.2

I am developing an eCommerce website using Laravel 5.2 and trying to install Omipay ( payment processing library ) via composer. But composer throwing the following errors when I tried.

`Your requirements could not be resolved to an installable set of packages.

Problem 1

  • Conclusion: don't install omnipay/omnipay 2.3.2
  • Conclusion: don't install omnipay/omnipay v2.3.1
  • Conclusion: remove symfony/http-foundation v3.0.1
  • Installation request for omnipay/omnipay ^2.3 -> satisfiable by omnipay/omnipay[2.3.2, v2.3.0, v2.3.1].
  • Conclusion: don't install symfony/http-foundation v3.0.1
  • omnipay/omnipay v2.3.0 requires omnipay/common ~2.3.0 -> satisfiable by omnipay/common[2.3.2, v2.3.0, v2.3.1, v2.3.3, v2.3.4].
  • omnipay/common 2.3.2 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.4, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2].`

Please suggest me the solution how could I fix that?

Thanks

Clarify getTransactionId vs getTransactionReference

I'm just wanting to check I'm right before I try to change my gateway to follow this - I believe that

getTransactionId
should return the ID generated by the client site (ie. the commerce site or other site that uses a payment gateway service).

getTransactionRef
should return a gateway generated unique ID. (e.g paypal reference)

I'm focussing on completePurchaseRequest at the moment but I think this should be the standard pattern are you able to confirm?

New MasterCard "2" series BIN range support?

It is my understanding that starting October 14, 2016 systems will need to begin accepting MasterCards starting with a 2. (This also includes any supported gateway providers.)

Sourced from wikipedia and this post:

On November 3, 2014, MasterCard announced that they were introducing a new series of BIN ranges that begin with a “2” (222100–272099). The “2” series BINs will be processed the same as the “51–55” series BINs are today. They will become active 14 October 2016.

I checked against omnipay/common (v2.5.0) and it seems to add this support, an update would be required to the $supported_cards regexes in CreditCard.php

    protected $supported_cards = array(
        self::BRAND_MASTERCARD => '/^(5[1-5]\d{4}|677189)\d{10}$/', // Regex to be updated?
        // ...
    );

Any reason this support should not be added to omnipay/common ahead of the Oct 2016 deadline?

Create a release

@delatbabel / @kayladnls Not sure what your policy is on creating releases, but could you please make one for some of the recent commits?

A couple PRs I'm going to open for Stripe and AuthorizeNet depend on #83. I feel it's cleaner using a proper version in composer.json rather than resorting to dev-master.

authorize amount 0

In Paypal, payments can be authorised with no initial payment.

See: https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/#id1055FM0B05Z

To do this, the PAYMENTREQUEST_n_AMT can be set to 0. Unfortunately the following is not working:

        $gateway = Omnipay::create('PayPal_Express');
// setusername, password etc.
        $request = $gateway->authorize(['amount' => '0', 'returnUrl' => 'http://google.com', 'cancelUrl' => 'http://boo.com']);
        $response = $request->send();

I'm getting the following error:

The amount parameter is required
Stack Trace
APP\Vendor\omnipay\paypal\src\Message\ExpressAuthorizeRequest.php line 14 → Omnipay\Common\Message\AbstractRequest->validate(string, string, string)
APP\Vendor\omnipay\common\src\Omnipay\Common\Message\AbstractRequest.php line 357 → Omnipay\PayPal\Message\ExpressAuthorizeRequest->getData()

Can anything be done about this?

Add getUserMessage() to the response object

This allows for situations where the displayable message might differ from the raw message or the processor returns more than one type of message e.g 'failed transaction' for user & 'fraudster alert' for the admin

Handling big numbers

Omnipay, when dealing with numbers, should not use the normal methods. It should use either BCMath or GMP

http://php.net/manual/en/book.gmp.php
http://php.net/manual/en/book.bc.php

Certain low value currencies such as the Vietnam's Dong can quickly get above the total number of digits that a 32 bit PHP system can handle and thus result in very very weird errors.

Omnipay should either:

  1. Allow developers to override ALL these methods when necessary
  2. Use one of those above libs to handle big numbers
  3. Avoid getting dirty dealing with the currency amount and do not assume the amount to be integer or float.

String > Float > String amount conversion breaks decimal place check

I have an amount of $79.10 that I am trying to charge via omnipay-stripe.

There are a number of actions in AbstractRequest.php starting at line 325 that cause this amount to fail.

If I pass the string '79.10' as an amount when creating the charge, line 325 converts it to float, which causes it to become a float of 79.09999999999999. But then at line 338, it takes that amount that was converted to float and puts it back to string ('79.09999999999999') which then fails the decimal place check, throwing the exception 'Amount precision is too high for currency.'

So as it stands, $79.10 is an impossible amount to charge with this library.

Test gateways against omnipay

We should enfore better testing with Omnipay Common.
1 thing we can do is test both dev, stable en lowest versions, like this:
thephpleague/omnipay-paypal#137

Second thing is that we might want to trigger the testcase for all gateways somehow. Not sure if that is even possible? Preferably before a PR is merged, but that would mean pulling down all gateways and running all tests..
Any ideas?

Commas in amount are not handled well

Making a payment for "1,234.56" will actually submit a payment to the gateway for "1.00".

The issue is caused by PHP's number conversion, meaning that the string conversion breaks at the first comma, and the remainder is not checked.

Now, validation and number checking and conversion should be done before the amount is passed OmniPay BUT OmniPay accepts a string, and how it handles that string should be a bit more predictable. "1,234.56" should either be sent to the gateway as "1234.56" or an exception should be raised. Sending "1.00" is just a surprise waiting to bite someone. Yes, it bit us.

Why not all support gateways in the list of the gateways in the composer.json?

https://github.com/thephpleague/omnipay-common/blob/master/composer.json#L41

It's clear that composer.json hold list of gateways supported by the omnipay itself, but this is bit strange as docs contain list of foreign gateways and would be correct also mention all of them in the package supported gateways.

There is fill list of support gates, where excluded all non native gates https://github.com/thephpleague/omnipay-common/blob/master/src/Omnipay/Common/GatewayFactory.php#L87

Does this is make sense?

Access to the Guzzle Client for debugging (or more abstract access to raw HTTP message logging)

I propose that a getHttpClient() method is added to Omnipay\Common\AbstractGateway to provide access to the Guzzle client used for messaging. At the moment - unless I have totally missed it - there is no general way to get at this client.

The reason is to support debugging and help development. With access to the HTTP client, all communications to and from the remote service can be logged. This helps immensely when developing and also when debugging in a production environment (with care taken on how and where the data is logged, obviously).

I asked the question on how to do this here:

https://groups.google.com/forum/#!topic/omnipay/O6pX48id2LE

and there are some examples on how to get access to the raw HTTP the data for debugging.

Is this a good idea? Or should it be abstracted a little more, perhaps using a way to inject/register a logging object direct to the gateway, so the Guzzle client is a little more protected?

This would only apply to drivers that use the Guzzle client, but if it is more abstracted as described above, then it should work with any client that overrides the HTTP logging functionality.

Any thoughts?

Introduce new redirect method - HTML

The Authorize.Net DPM gateway requires a redirect in the notify handler to handle data entry errors correctly. It does not use POST or GET redirect, but a HTML redirect. The method for doing that is here:

https://github.com/thephpleague/omnipay-authorizenet/blob/master/src/Message/SIMCompleteAuthorizeResponse.php#L93

I would like to suggest that these three redirect methods are pulled together in one place. For now, the HTML redirect method could be moved from AuthorizeNet to OmniPay common. How it would be handled in V3, I don't know.

The HTML redirect method happens to be the only one that will redirect a browser from a HTTPS to a HTTP page without a security warning, so it may be useful for other gateways.

Driver setter imposing limits causes test case breakage.

Hi.

What is the preferred/expected way to handle a particular gateway having limits on the content of a field.

For example, the \Omnipay\Common\Item::setDescription() does not impose a length limit. Obviously different gateways will have requirements to be matched (not just limited to description length, but maybe format, value ranges, etc.).

So, say you have a driver which has ...

    /**
     * @param string $value Max length of 5.
     * @return $this
     */
    public function setLanguage($value)
    {
        return parent::setLanguage(substr($value, 0, 5));
    }

This code works just fine. But unit test \Omnipay\Tests\GatewayTestCase::testPurchaseParameters() now fails as "Failed asserting that two strings are identical."

For the driver I'm working with, the gateway limits the language to 5 characters (as well as other limits on the values and lengths of properties of \Omnipay\Common\Item. The only option that makes sense is to use substr($value, 0, 5); in my driver. As our code base supports multiple payment gateways, we can't realistically code all the rules into our app - that's what OmniPay is for.

So, I think the testing of default parameters in this test (and potentially other tests in the common package) may not work correctly in all instances for all drivers.

One suggestion was to use the getter() as the guard, but that doesn't alter the external behaviour/view in any way, just an internal one.

I don't know the answer, so if anyone has any good ideas/suggestions/recommendations, I'd be happy to contribute code.

Compatible with Lumen (5.2.7) (Laravel Components 5.2.*)

Problem 1
- Conclusion: don't install lokielse/omnipay-alipay v1.4.8
- Conclusion: don't install lokielse/omnipay-alipay v1.4.7
- Conclusion: don't install lokielse/omnipay-alipay v1.4.6
- Conclusion: don't install lokielse/omnipay-alipay v1.4.5
- Conclusion: remove symfony/event-dispatcher v3.1.1
- Conclusion: don't install symfony/event-dispatcher v3.1.1
- omnipay/common 2.4.0 requires guzzle/guzzle ~3.9 -> satisfiable by guzzle/guzzle[v3.9.0, v3.9.1, v3.9.2, v3.9.3].
- omnipay/common v2.3.4 requires guzzle/guzzle ~3.9 -> satisfiable by guzzle/guzzle[v3.9.0, v3.9.1, v3.9.2, v3.9.3].
- omnipay/common v2.4.1 requires guzzle/guzzle ~3.9 -> satisfiable by guzzle/guzzle[v3.9.0, v3.9.1, v3.9.2, v3.9.3].
- omnipay/common v2.5.0 requires guzzle/guzzle ~3.9 -> satisfiable by guzzle/guzzle[v3.9.0, v3.9.1, v3.9.2, v3.9.3].
- guzzle/guzzle v3.9.0 requires symfony/event-dispatcher ~2.1 -> satisfiable by symfony/event-dispatcher[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- guzzle/guzzle v3.9.1 requires symfony/event-dispatcher ~2.1 -> satisfiable by symfony/event-dispatcher[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- guzzle/guzzle v3.9.2 requires symfony/event-dispatcher ~2.1 -> satisfiable by symfony/event-dispatcher[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- guzzle/guzzle v3.9.3 requires symfony/event-dispatcher ~2.1 -> satisfiable by symfony/event-dispatcher[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- Can only install one of: symfony/event-dispatcher[v2.6.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.11, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.12, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.13, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.11, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.12, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.13, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.14, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.7.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.8.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.11, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.12, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.13, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.1.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.11, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.2.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.11, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.12, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.13, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.14, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.15, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.16, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.17, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.18, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.19, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.20, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.21, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.22, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.23, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.24, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.25, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.26, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.27, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.28, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.29, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.30, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.31, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.32, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.33, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.34, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.35, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.36, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.37, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.38, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.39, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.40, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.41, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.42, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.3.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.4.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.10, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.11, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.12, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.6, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.7, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.8, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.5.9, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.0, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.1, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.2, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.3, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.4, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.5, v3.1.1].
- Can only install one of: symfony/event-dispatcher[v2.6.6, v3.1.1].
- Conclusion: don't install symfony/http-foundation v3.0.7|install omnipay/common 2.4.0|install omnipay/common v2.3.4|install omnipay/common v2.4.1|install omnipay/common v2.5.0
- Installation request for symfony/event-dispatcher (locked at v3.1.1) -> satisfiable by symfony/event-dispatcher[v3.1.1].
- Installation request for lokielse/omnipay-alipay ^1.4 -> satisfiable by lokielse/omnipay-alipay[v1.4.0, v1.4.5, v1.4.6, v1.4.7, v1.4.8].
- Conclusion: remove symfony/http-foundation v3.0.7|install omnipay/common 2.4.0|install omnipay/common v2.3.4|install omnipay/common v2.4.1|install omnipay/common v2.5.0
- lokielse/omnipay-alipay v1.4.0 requires omnipay/common ~2.0 -> satisfiable by omnipay/common[2.3.2, 2.4.0, v2.0.0, v2.1.0, v2.2.0, v2.3.0, v2.3.1, v2.3.3, v2.3.4, v2.4.1, v2.5.0].
- omnipay/common 2.3.2 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- omnipay/common v2.0.0 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- omnipay/common v2.1.0 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- omnipay/common v2.2.0 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- omnipay/common v2.3.0 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- omnipay/common v2.3.1 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- omnipay/common v2.3.3 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37, v2.3.38, v2.3.39, v2.3.4, v2.3.40, v2.3.41, v2.3.42, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2, v2.8.3, v2.8.4, v2.8.5, v2.8.6, v2.8.7].
- Can only install one of: symfony/http-foundation[v2.8.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.8.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.11, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.12, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.13, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.1.9, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.11, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.2.9, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.11, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.12, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.13, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.14, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.15, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.16, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.17, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.18, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.19, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.20, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.21, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.22, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.23, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.24, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.25, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.26, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.27, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.28, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.29, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.30, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.31, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.32, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.33, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.34, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.35, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.36, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.37, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.38, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.39, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.40, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.41, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.42, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.3.9, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.4.9, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.11, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.12, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.5.9, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.11, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.12, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.13, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.6.9, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.0, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.1, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.10, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.11, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.12, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.13, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.14, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.2, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.3, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.4, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.5, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.6, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.7, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.8, v3.0.7].
- Can only install one of: symfony/http-foundation[v2.7.9, v3.0.7].
- Installation request for symfony/http-foundation (locked at v3.0.7) -> satisfiable by symfony/http-foundation[v3.0.7].

AbstractRequest::validate() errors on fields that are set but evaluate to empty()

Similar to Issue #3, Helcim allows zero amounts to be submitted for authorisation (so long the correct flag is set).

Now, the AbstractRequest uses empty() to check if a field is set. This will raise an error on any field that is zero, "false", "", etc. and that includes an amount of "0.00". I strongly suspect that empty() is not the right check for this, since "0.00" is very much a set field.

The validation method can be overridden, which I suspect is the intention (not so easy with the CreditCard validation, which is another subject to tackle) but reporting a set field as not set is unexpected behaviour, I believe.

I'll not suggest an alternative until I understand a bit more about how this validation is used across the drivers (it could be that everyone overrides it).

Guzzle update

Hi,

Just wondering if the guzzle version could be updated as 3.9 is quite behind the current version?

CreditCard::setExpiryMonth sets an int but getExpiryMonth says it returns a string

CreditCard::setExpiryMonth sets the month as an int:

return $this->setParameter('expiryMonth', (int) $value);

CreditCard::getExpiryMonth claims to return a string but returns an int since the setter makes it one:

I'm opening this as an issue instead of a PR because I don't know if the desired behavior is int or string. I would vote for string probably since that's what expiryYear is.

[3.0] Plan of action / Upgrade path

I think we tackled most issues for Omnipay 3, so if no one has any breaking changes, I suggest we start to convert an actual gateway.

Biggest changes for upgrading:

  • Different namespace
  • Psr-7 client, methods changed a bit.
  • Psr-7 request/responses, different signatures.
  • Amount is now always an object, also needs to return an object from the PurchaseResponses
  • Creditcard object is split out to separate Customer object
  • Pre-defined onstants for Response statuses
  • ..?

We can convert a few, but we should probably try to let the community fix the rest..

Provide a gateway event dispatcher

@judgej started a discussion about driver-specific extensions in the following PR

thephpleague/omnipay-sagepay#39

It's a hard one to decide where the line is between what OmniPay offers, and what is an extension. The aim of OmniPay is to normalise all the gateways to the lowest common denominator (sort of), so too many custom features on gateways are going to make it more difficult to normalise those features that may be shared by an increasing number of gateways in the future.

This arose from my comment that my company is running production code from a fork of omnipay/sagepay due to specific requirements for several sites.

I'd like to propose that symfony/event-dispatcher is made available in gateway classes. I've already created a proof of concept.

Kyoushu@b05ba7a

As I state in the related PR...

It seems to me that the bulk of the work would be adding triggers to the transaction methods (i.e. purchase(), authorize(), refund() etc.)

Thoughts?

Unexpected exception for payment forms with uploaded file

When using Omnipay on pages that contains file uploads, a Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException is thrown when you have moved the uploaded file.

More specifically: the error is generated on this line. The createFromGlobals uses $_FILES which in turn contains a reference to a file that has been moved. This results in the following stack.

{
    "exception": {
        "class": "Symfony\\Component\\HttpFoundation\\File\\Exception\\FileNotFoundException",
        "message": "The file \"/tmp/phpNXhFUC\" does not exist",
        "file": "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/File.php:41",
        "trace": [
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php:100",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php:99",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php:62",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php:73",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php:48",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php:37",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php:256",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php:232",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php:1918",
            "/path-to-project/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php:295",
            "/path-to-project/vendor/omnipay/common/src/Omnipay/Common/AbstractGateway.php:238",
            "/path-to-project/vendor/omnipay/common/src/Omnipay/Common/AbstractGateway.php:47",
            [... project code ...]
            "/path-to-project/public/index.php:3"
        ]
    }
}

Set raw number

While easily extendable to add, I think the CreditCard class should ship with a 'rawNumber' attribute, thereby allowed a credit card number to be set without the code stripping non-numeric characters.

The reason being that many providers, such as Eway, allow for credit card numbers to be encrypted before being sent. The fact that this field unknowingly removes non-numeric characters is quite a "gotcha"

Card expiry dates do not honour empty dates

If an expiry date is not set in the card, then Omnipay\Common\CreditCard::getExpiryDate() will return "1299" as the date.

The setExpiryMonth() - but strangly not the setExpiryYear() - casts the value provided to an integer, which comes out as 0 (zero) for null and "".

The date string by default, then becomes:

gmdate($format, gmmktime(0, 0, 0, $this->getExpiryMonth(), 1, $this->getExpiryYear()));
gmdate("my", gmmktime(0, 0, 0, 0, 1, 0));
or
gmdate("my", gmmktime(0, 0, 0, 0, 1, null));

or "1299".

This causes a problem with the silent redirect type of gateways. With these gateways, you pre-populate the AuthorizeRequest object with what information is already know. This tends to be the billing and possibly the shipping person details, and maybe the cart details too. The AuthorizeRequest->send() will give you a AuthorizeResponse object that is used to populate the form. AuthorizeResponse->getData() gives you the data that goes into this form, with keys appropriately named for the remote gateway (remember - this is a silent POST, so the form on the merchant's site will POST direct to the gateway site).

So, this form starts with no credit card, and no CVV details, but an expiration date (and I assume start date) of "'1299".

Possible class loading issue for supported gateways

I was attempting to using Omnipay (with Payum) and the Realex gateway developed by - https://github.com/coatesap/omnipay-realex

For some reason, I continued to receive Fatal error: Uncaught exception 'Payum\Core\Exception\LogicException' with message 'Given type Realex_Remote is not supported. Try one of supported types: .' in /mnt/project/farmison/vendor/payum/omnipay-bridge/src/OmnipayDirectGatewayFactory.php on line 71

Tracking through the call stack, it appears that here https://github.com/thephpleague/omnipay-common/blob/master/src/Omnipay/Common/GatewayFactory.php#L81 a check is made using class_exists - but no classes were being found even though the Realex gateway is listed here
https://github.com/thephpleague/omnipay-common/blob/master/composer.json#L88

Upon var_dumping the $gateway and $class in the GatewayFactory::find method - it appears to be using
string 'Realex Remote => \Omnipay\Realex Remote\Gateway' (length=48) which doesnt appear to be a valid FQDN and once I had underscored the space in composer.json https://github.com/thephpleague/omnipay-common/blob/master/composer.json#L88 the class now loads.

require error in laravel 5.2

I require omnipay in my porject (laravel5.2),but it wrong

`
D:\users\www>composer require omnipay/common
Using version ^2.4 for omnipay/common
./composer.json has been updated

php artisan clear-compiled
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

Problem 1
- Conclusion: don't install omnipay/common v2.4.1
- Conclusion: remove symfony/http-foundation v3.0.2
- Installation request for omnipay/common ^2.4 -> satisfiable by omnipay/common[2.4.0, v2.4.1].
- Conclusion: don't install symfony/http-foundation v3.0.2
- omnipay/common 2.4.0 requires symfony/http-foundation ~2.1 -> satisfiable by symfony/http-foundation[v2.1.0, v2.1.1
, v2.1.10, v2.1.11, v2.1.12, v2.1.13, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7, v2.1.8, v2.1.9, v2.2.0, v2.2.1, v2.
2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12,
v2.3.13, v2.3.14, v2.3.15, v2.3.16, v2.3.17, v2.3.18, v2.3.19, v2.3.2, v2.3.20, v2.3.21, v2.3.22, v2.3.23, v2.3.24, v2.3
.25, v2.3.26, v2.3.27, v2.3.28, v2.3.29, v2.3.3, v2.3.30, v2.3.31, v2.3.32, v2.3.33, v2.3.34, v2.3.35, v2.3.36, v2.3.37,
v2.3.4, v2.3.5, v2.3.6, v2.3.7, v2.3.8, v2.3.9, v2.4.0, v2.4.1, v2.4.10, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7,
v2.4.8, v2.4.9, v2.5.0, v2.5.1, v2.5.10, v2.5.11, v2.5.12, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9
, v2.6.0, v2.6.1, v2.6.10, v2.6.11, v2.6.12, v2.6.13, v2.6.2, v2.6.3, v2.6.4, v2.6.5, v2.6.6, v2.6.7, v2.6.8, v2.6.9, v2.
7.0, v2.7.1, v2.7.2, v2.7.3, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.2].
- Can only install one of: symfony/http-foundation[v2.8.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.8.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.8.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.10, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.11, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.12, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.13, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.1.9, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.10, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.11, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.2.9, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.10, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.11, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.12, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.13, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.14, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.15, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.16, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.17, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.18, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.19, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.20, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.21, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.22, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.23, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.24, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.25, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.26, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.27, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.28, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.29, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.30, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.31, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.32, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.33, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.34, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.35, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.36, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.37, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.3.9, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.10, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.4.9, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.10, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.11, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.12, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.5.9, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.10, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.11, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.12, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.13, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.6.9, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.0, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.1, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.2, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.3, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.4, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.5, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.6, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.7, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.8, v3.0.2].
- Can only install one of: symfony/http-foundation[v2.7.9, v3.0.2].
- Installation request for symfony/http-foundation == 3.0.2.0 -> satisfiable by symfony/http-foundation[v3.0.2].
`

how can i do it?

why don't change guzzle/guzzle to guzzlehttp/guzzle

Package guzzle/common is abandoned, you should avoid using it. Use guzzle/guzzle instead.
Package guzzle/stream is abandoned, you should avoid using it. Use guzzle/guzzle instead.
Package guzzle/parser is abandoned, you should avoid using it. Use guzzle/guzzle instead.
Package guzzle/http is abandoned, you should avoid using it. Use guzzle/guzzle instead.

Address requirement

There are some cases in which the card has been sent over a JS api (Like Stripe) but the address is still required for risk check. The only place currently to put the address is the CreditCard class, but then calling validate on that will throw exceptions. Is there any way around this without passing the credit card information through my web server?

Update Guzzle repository

Recently guzzle repository was moved for other composer namespace when I tried to do composer update this error appear.

"Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead."

I think you must be update the guzzle package address.

Bank Account Support?

Are there plans to add bank account support to the common api so that it can be used in the sub apis?

Expose custom parameters for the cart/basket/Item

The Omnipay\Common\Item class has getParameter() and setParameter() methods, but both are protected. I think both these should be public.

The constructor of the class allows any custom properties to be set, so it makes sense that the property set/get should also allow this. I have already found that getSku()/setSku() is missing - it was there in an earlier version IIRC (or maybe it never got merged in?) so was hoping I could set $item->setParameter('sku', $mysku). But I can't.

The workaround is the constructor to set custom parameters, and getParameters() to get ALL parameters as an array and extract what is needed, which is a little clumsy.

What do you think?

Add isTransparent Redirect function

Further to discussion on google groups it seems that the first part of better support for transparent redirects is to have a simple way to check if the gateway is of this sort.

You mentioned adding the property $isTransparentRedirect - but the calling function would need to test whether that property exists - which seems less elegant than the pattern you have used elsewhere - so I propose adding a dummy function to the parent Gateway that looks like the isRedirect function

There is a Pull request in #10 - I thought opening an issue might make it more obvious & get an answer on if it is OK

Should Omnipay check for the decimal places?

I'm referring to this code:

https://github.com/thephpleague/omnipay-common/blob/master/src/Omnipay/Common/Message/AbstractRequest.php#L309

Lets say that in obscure cases I want to send more decimal digits that than normal, say a fraction of a US cent, then I don't think it's Omnipay position and responsibility to validate that. What if I need that and my payment gateway accepts that?

I think it should be up to the developer to validate the amount passed to the payment gateway, Omnipay should not worry too much about that.

Request: "get censored number"

Right now I'm using something like this:

$numberCensored = str_repeat('X', strlen($card->getNumber()) - 4) . $card->getNumberLastFour();

Besides having a builtin helper for this, it would be nice if there were a way to do this while maintaining some type of format (i.e. for visa a delimiter every 4 characters).

[3.0] Pass PSR-7 Request instead collecting data from environment

Currently, Omnipay collects the request data from the PHP superglobals but this has two downsides:

  • It doesn't work in environments where the superglobals are not populated
  • Testing is complicated

To improve the situation, developers should ba able to pass a PSR-7 Request object to Omnipay which contains all data. As a fallback, Omnipay can still use the superglobals if no request object is given.

Update Guzzle... Pretty please?

Current Guzzle implementation is 3.9 for omnipay-common. which is EOL for quite some time.

Maybe hide the specific transport client behind an interface so we can more easily upgrade/switch out older versions?

[3.0] Support CardHolderName/CardHolder

Most gateways now distinguish between the billing name and the card holder name. This is useful when, for example, a person is being billed but is using a company credit card - the names will be different.

The CreditCard class does not explicitly provide a named field for the card holder name. For the sake of standardisation and setting a convention that all the drivers can use, I believe it needs a card holder name parameter, whatever it is called.

The card holder name could fall back to the billing name if it is not explicitly set, so this would provide some backwards compatibility.

Any thoughts on that? Good idea? Perhaps I'm overlooking something?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.