Giter Site home page Giter Site logo

sverraest / revolut-php Goto Github PK

View Code? Open in Web Editor NEW
44.0 44.0 15.0 69 KB

💳 PHP Bindings for the Revolut Business API

Home Page: https://revolutdev.github.io/business-api/#api-v1-0-introduction

License: Other

PHP 100.00%
api api-client php php7 revolut

revolut-php's People

Contributors

ahosker avatar aurawindsurfing avatar fuerbringer avatar sverraest avatar vdbelt avatar xpaw 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

revolut-php's Issues

Payment /pay authorization problem

Dears!

First of all thank you for this package! Really easy to integrate!

I ran into a problem, which i couldnt solve as of now.

I'm trying everything in sandbox mode. Authorization working perfectly. Counterparty creation is also flawless.

Altough when i try anything else it goes into forbidden.

During authoriazion i tried to add different scopes but does not change the permission that the app-confirm is giving (payments, accounts, etc).

All the time i try to do a transfer of payment i get back a 403:

"message": "Client error: POST https://sandbox-b2b.revolut.com/api/1.0/pay resulted in a 403 Forbidden response:\n{"message":"This action is forbidden","code":9002}\n"

I know that the problem is on my end, but i'm unable to figure it out.

Any help is appreciated!

Regards
Tom

Problem with access to the account

I do everything in sandbox mode but I'm blocked at this part: RevolutPHP\Auth\Provider

And I get this error: Undefined array key "code"

Thank you in advance for your help and advice.

Authentication Error

Hello, I'm trying to implemen this package in my app.
I wrote the following controller :

class RevolutAuthController extends Controller
{

    protected $authProvider;

    public function __construct()
    {
        $this->authProvider = new RevolutAuthProvider([
            'clientId' => getenv('REVOLUT_CLIENT_ID'),
            'privateKey' => file_get_contents(base_path('/privatecert.pem')),
            'redirectUri' => "http://my_domain/api/v1/revolut/auth/callback",
            'isSandbox' => true
        ]);
    }


    public function redirectToProvider()
    {
        return redirect($this->authProvider->getAuthorizationUrl(['scope' => "READ,WRITE,PAY"]));
    }




    public function handleRevolutCallback(Request $request)
    {
        $accessToken = $this->authProvider->getAccessToken('authorization_code', [
            'code' => $request->get('code')
        ]);

        if ($accessToken->hasExpired()) {
            $newAccessToken = $this->authProvider->getAccessToken('refresh_token', [
                'refresh_token' => $accessToken->getRefreshToken()
            ]);

            $accessToken = $newAccessToken;
        }
    }
}

The redirect to provider metod works properly and generates a link where I can authorize the app, the issue comes when i try to authorize the app with sms in the revolut side.

After filling in the authcode revolut says "Action is forbidden" and does not redirect to the redirect URI provided.

I have also tried to authorise the app manually via the revolut dashoboard and in that case it works properly.

Any idea on where the issue colud be?

Thank you

Problem with access to the account

Hey i set everything as you described, i think.

///php code

require "vendor/autoload.php";

$authProvider = new \RevolutPHP\Auth\Provider([
'clientId' => 'BLABLABLAmyid', // As shown when uploading your key
'privateKey' => 'blablabla/pathto my private key/privatekey.pem',
'redirectUri' => 'web link that i indicated into public key', // The URL to redirect the user to after the authorisation step
'isSandbox' => true
]);

$url = $authProvider->getAuthorizationUrl();

$accessToken = $authProvider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);

but still it's giving this error:
i will hide my path to the privacy reasons with "myDirectoryToSourceCOde*"

Fatal error: Uncaught BadMethodCallException: Required parameter not passed: "code" in myDirectoryToSourceCOdevendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php:35 Stack trace: #0 myDirectoryToSourceCOdevendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php(53): League\OAuth2\Client\Grant\AbstractGrant->checkRequiredParameter('code', Array) #1 myDirectoryToSourceCOdevendor/league/oauth2-client/src/Grant/AbstractGrant.php(76): League\OAuth2\Client\Grant\AbstractGrant->checkRequiredParameters(Array, Array) #2 myDirectoryToSourceCOdevendor/league/oauth2-client/src/Provider/AbstractProvider.php(535): League\OAuth2\Client\Grant\AbstractGrant->prepareRequestParameters(Array, Array) #3 myDirectoryToSourceCOdevendor/vdbelt/oauth2-revolut/src/Provider/Revolut.php(144): League\OAuth2\Client\Provider\AbstractProvider->getAccessToken(Object(League\OAuth2\Client\Grant\AuthorizationCode), Array) #4 /v in myDirectoryToSourceCOdevendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php on line 35

How does one check for the response

Hi, I using this package with Laravel and all is good, but I need to get the response back from Revolut, so I can save the UUID's they send to out database.

So this is the code I have:

// At the top I have     use RevolutPHP\Client as Revolut;
$pay = new Revolut($this->api_key); 
            $counterparty = $pay->counterparties->create(
                array (
                'company_name' => user()->companies()->first()->name,
                'bank_country' => 'GB',
                'currency' => 'GBP',
                'account_no' => $request->account_no,
                'sort_code' => $request->sort_code,
                "email" => user()->email,
                "phone" => user()->tel,
                'profile_type' => 'business',
                'address' => 
                    array (
                    'street_line1' => user()->companies()->first()->address_line_1,
                    'street_line2' => user()->companies()->first()->address_line_2,
                    'region' => '',
                    'postcode' => user()->companies()->first()->postcode,
                    'city' => user()->companies()->first()->city,
                    'country' => 'GB',
                    ),
                )
            );

Soon as the response is sent back from Revoult I want to be able to grab that data and do what I want with it, how can one achieve this?

Incorrect Request

Hi, at first, thank you for your work !

I'm trying to use your code to connect my Revolut account.
All's working fine on the first connect (i list my accounts successfully), but when i refresh my webpage, using the same code (code is persistant through GET), i can see an error 500 on my webpage, and in apache logs.

PHP Fatal error: Uncaught League\OAuth2\Client\Provider\Exception\IdentityProviderException: Incorrect request token in /var/www/erp/revolut/vendor/vdbelt/oauth2-revolut/src/Provider/Revolut.php:98\nStack trace:\n#0 /var/www/erp/revolut/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(628): League\OAuth2\Client\Provider\Revolut->checkResponse(Object(GuzzleHttp\Psr7\Response), Array)\n#1 /var/www/erp/revolut/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(537): League\OAuth2\Client\Provider\AbstractProvider->getParsedResponse(Object(GuzzleHttp\Psr7\Request))\n#2 /var/www/erp/revolut/vendor/vdbelt/oauth2-revolut/src/Provider/Revolut.php(144): League\OAuth2\Client\Provider\AbstractProvider->getAccessToken(Object(League\OAuth2\Client\Grant\AuthorizationCode), Array)\n#3 /var/www/erp/revolut/oauth.php(14): League\OAuth2\Client\Provider\Revolut->getAccessToken('authorization_c...', Array)\n#4 {main}\n thrown in /var/www/erp/revolut/vendor/vdbelt/oauth2-revolut/src/Provider/Revolut.php on line 98

So, when i authenticate, i am redirected to this php page, and i can get accounts.
When i refresh this same webpage ($_GET["code"] is still here), i get this error.

Any help ?
Thanks !

require "vendor/autoload.php";

$authProvider = new \RevolutPHP\Auth\Provider([
'clientId' => 'myclientid', // As shown when uploading your key
'privateKey' => 'myprivatekey,
'redirectUri' => 'myredirecturi(to this webpage)', // The URL to redirect the user to after the authorisation step
'isSandbox' => false
]);

if($_GET["code"]=='') {
$url = $authProvider->getAuthorizationUrl();
header("location:".$url);
}

$accessToken = $authProvider->getAccessToken('authorization_code', ['code' => $_GET['code']]);

use RevolutPHP\Client;

$client = new Client($accessToken);
$accounts = $client->accounts->all();

print_r($accounts);

Won't install above PHP 7.0

According to the packagist notes, this package should work for PHP >= 7.0. However, the sub-package lcobucci/jwt prevents installation above 7.0, as below:

Problem 1
   - lcobucci/jwt[3.3.0, ..., 3.4.x-dev] require php ^5.6 || ^7.0 -> your php version (8.0.1) does not satisfy that requirement.
   - sverraest/revolut-php dev-master requires vdbelt/oauth2-revolut ^1.0 -> satisfiable by vdbelt/oauth2-revolut[v1.0, v1.0.1, v1.0.2, v1.
0.3].
   - vdbelt/oauth2-revolut v1.0.3 requires lcobucci/jwt ^3.4.5 -> satisfiable by lcobucci/jwt[3.4.5, 3.4.6, 3.4.x-dev].
   - vdbelt/oauth2-revolut v1.0.2 requires lcobucci/jwt ^3.3.1 -> satisfiable by lcobucci/jwt[3.3.1, ..., 3.4.x-dev].
   - vdbelt/oauth2-revolut[v1.0, ..., v1.0.1] require lcobucci/jwt ^3.3 -> satisfiable by lcobucci/jwt[3.3.0, ..., 3.4.x-dev].
   - Root composer.json requires sverraest/revolut-php dev-master -> satisfiable by sverraest/revolut-php[dev-master].

Would appreciate a fix or clarification. Thanks!

counterparties->create does not work

Hello.

Did you check creation counterparty on working account? Very strange that it does not work.

$client->counterparties->create(['company_name' => 'RS PREHODNI DAVČNI PODRAČUN', 'bank_country' => 'SI' , 'currency' => 'EUR',
'address' => ['street_line1' => 'Gregorčičeva ulica 20', 'street_line2' => '1000 Ljubljana'],
'iban' => 'SI56011008883000073', 'bic' => 'BSLJSI2X']);

sends:

Authorization: Bearer oa_prod_qofi3bp****
User-Agent: GuzzleHttp/6.5.5 curl/7.72.0 PHP/7.3.21
Content-Type: application/json
Content-Length: 232

{"company_name":"RS PREHODNI DAV\u010cNI PODRA\u010cUN","bank_country":"SI","currency":"EUR","address":{"street_line1":"Gregor\u010di\u010deva ulica 20","street_line2":"1000 Ljubljana"},"iban":"SI56011008883000073","bic":"BSLJSI2X"}

Revolut responses: {"message":"Required 'country' is missing","code":3000}

I tried

curl -X POST https://b2b.revolut.com/api/1.0/counterparty
-H "Authorization: Bearer oa_prod_qof***"
-H "User-Agent: GuzzleHttp/6.5.5 curl/7.72.0 PHP/7.3.21"
-H "Content-Type: application/json"
--data @- << EOF

{"company_name":"RS PREHODNI DAV\u010cNI PODRA\u010cUN","bank_country":"SI","currency":"EUR","address":{"street_line1":"Gregor\u010di\u010deva ulica 20","street_line2":"1000 Ljubljana"},"iban":"SI56011008883000073","bic":"BSLJSI2X"}

EOF

Result is the same.

But this one works!
curl -X POST https://b2b.revolut.com/api/1.0/counterparty
-H "Authorization: Bearer oa_prod_li***"
--data @- << EOF

{
"company_name": "RS PREHODNI DAVČNI PODRAČUN",
"bank_country": "SI",
"currency": "EUR",
"iban": "SI56011008883000073",
"bic": "BSLJSI2X",
"address": {
"street_line1": "Gregorčičeva ulica 20",
"street_line2": "1000 Ljubljana",
"postcode": "1000",
"city": "Ljubljana",
"country": "SI"
}
}

EOF

The difference only in new line as I see.

The similar sitation with payment.

Token issue

Fatal error: Uncaught League\OAuth2\Client\Provider\Exception\IdentityProviderException: The Token can't be used before Fri Jun 12 10:08:12 UTC 2020. in C:\wamp64\www\revolt\vendor\vdbelt\oauth2-revolut\src\Provider\Revolut.php on line 98

I getting this error ..how to solve . my timezone is IST

New version of this package, help needed?

Hello,

I am interested in this package. I was looking for the "Rates" feature but it's missing from the stable version 1.1.1. When will you make a release with features from master?

Is there anything I can do to have another stable version of this library? Thanks!

Guzzle 7

Hi, we've been using your package to sync Revolut transactions into our system for a while now. Our application is built on top of Laravel 7. Laravel 7 is now deprecated (https://laravelversions.com/7), and we are switching to Laravel 8. Problem emerges from Laravel 8's requirement of Guzzle 7 (https://laravel.com/docs/8.x/upgrade#updating-dependencies) and we cannot upgrade any time soon unless we replace your package which might prove to be a lot more work than we estimated. Since Guzzle 7 is already in version 7.2, do you plan on supporting it?

Class "Lcobucci\JWT\Configuration" not found

It did work but now im getting the following:

 Error 

  Class "Lcobucci\JWT\Configuration" not found

  at vendor/vdbelt/oauth2-revolut/src/Provider/Revolut.php:134
    130▕      */
    131▕     public function getAccessToken($grant, array $options = [])
    132▕     {
    133▕         $time = new DateTimeImmutable();
  ➜ 134▕         $config = Configuration::forSymmetricSigner(new Sha256(), $this->getPrivateKey());
    135▕ 
    136▕         $token = $config->builder()
    137▕             ->issuedBy(parse_url($this->redirectUri, PHP_URL_HOST))
    138▕             ->permittedFor('https://revolut.com')

  1   app/Console/Commands/RevolutGet.php:133
      League\OAuth2\Client\Provider\Revolut::getAccessToken()

  2   app/Console/Commands/RevolutGet.php:108
      App\Console\Commands\RevolutGet::generateNewToken()

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.