Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Composer autoload path not working: ../vendor/autoload.php #42

Open
jukwahewa opened this issue Jan 20, 2020 · 5 comments
Open

Composer autoload path not working: ../vendor/autoload.php #42

jukwahewa opened this issue Jan 20, 2020 · 5 comments

Comments

@jukwahewa
Copy link

Warning: include_once(../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/mpesa/src/Mpesa.php on line 10

I get this error message whenever I am trying to use your PHP SDK. I think this is a bug for your relative paths to composer autoload file. I have also run composer install but issue is still persistent.

I am using your PHP SDK version 1.0.8. Please help as it does not work out of the box and I am stuck on this error
mpesa-autoload-failure
.

Thank you.

@LiamKarlMitchell
Copy link

I suspect it should be this on line 10 of Mpesa.php

require 'vendor/autoload.php';

@LiamKarlMitchell
Copy link

LiamKarlMitchell commented Mar 16, 2022

Or possibly something like Carbon.php does?

$dir = __DIR__.'/..';

if (!file_exists($dir.'/autoload.php')) {
    $dir = __DIR__.'/../vendor';
}

if (!file_exists($dir.'/autoload.php')) {
    $dir = __DIR__.'/../../..';
}

if (!file_exists($dir.'/autoload.php')) {
    echo 'Autoload not found.';
    exit(1);
}

require $dir.'/autoload.php';

Or ../../autoload.php ?

I'm attempting to use this with Laravel.

@jukwahewa
Copy link
Author

Lia

Or possibly something like Carbon.php does?

$dir = __DIR__.'/..';

if (!file_exists($dir.'/autoload.php')) {
    $dir = __DIR__.'/../vendor';
}

if (!file_exists($dir.'/autoload.php')) {
    $dir = __DIR__.'/../../..';
}

if (!file_exists($dir.'/autoload.php')) {
    echo 'Autoload not found.';
    exit(1);
}

require $dir.'/autoload.php';

Or ../../autoload.php ?

I'm attempting to use this with Laravel.

I gave up on this MPESA SDK as the developer(s) never replied to my opened bug request. I ended up writing custom PHP code to interact with the API. Please see MPESA API guiding docs here: https://developer.safaricom.co.ke/APIs

I wish you luck and all the best with your integration.

@LiamKarlMitchell
Copy link

LiamKarlMitchell commented Mar 18, 2022

Thanks @jukwahewa , I will probably be forced to do the same as this is not the only issue I have noticed with this code.

  1. The way env variables are loaded does not let us cache the config in Laravel.
  2. Dotenv used in the function similar to laravel, looks like it might not actually load the .env file when used in a Laravel project wrong path?
  3. self::env should be used put all the conditional checks in it.
  4. What if json_decode fails in the TransactionCallback methods?
  5. No confirmation that the response comes from their servers.
  6. No hash in response/headers to verify the message has not been tampered with.

@nipunTharuksha
Copy link

Certainly! Here’s a more polished version of your comment:


We encountered the same issue after deploying to Lambda, but we were able to resolve it with the following steps:

  1. Relocated the Mpesa Class: We moved the Mpesa class from the vendor directory to a new directory we created, packages/safaricom/mpesa.

  2. Updated the include_once Statement: We modified the include_once function in the Mpesa class to point to the new location:

    include_once("vendor/autoload.php");
  3. Updated composer.json: We adjusted the autoload section in composer.json to include the new directory:

    "autoload": {
        "psr-4": {
            "Safaricom\\Mpesa\\": "packages/safaricom/mpesa/"
        }
    }

After making these changes, everything worked as expected. Hope this helps!


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants