comsave/salesforce-mapper-bundle
Install the package via Composer:
composer require vendor/salesforce-package
Publish the configuration file (if needed) and ensure your .env includes Salesforce credentials:
SALESFORCE_CLIENT_ID=your_client_id
SALESFORCE_CLIENT_SECRET=your_client_secret
SALESFORCE_USERNAME=your_username
SALESFORCE_PASSWORD=your_password+security_token
SALESFORCE_DOMAIN=login.salesforce.com # or your custom domain
The package now enforces the new salesforce-bundle under the hood. Test basic connectivity with:
use Vendor\Salesforce\SalesforceFacade;
$connection = SalesforceFacade::connection();
$response = $connection->query("SELECT Id, Name FROM Account LIMIT 10");
The package now mandates the use of salesforce-bundle (likely guzzlehttp/salesforce or similar) for all connections. Update your config/salesforce.php to align with the new bundle’s requirements:
'salesforce' => [
'bundle' => 'salesforce-bundle', // Enforced
'client_id' => env('SALESFORCE_CLIENT_ID'),
'client_secret' => env('SALESFORCE_CLIENT_SECRET'),
// ... other bundle-specific configs
],
Workaround for Legacy Code:
If you rely on direct Salesforce_Client instantiation, wrap it in a service provider to delegate to the new bundle:
public function register()
{
$this->app->singleton(Salesforce_Client::class, function ($app) {
return (new \SalesforceBundle\Client())
->setConfig($app['config']['salesforce']);
});
}
Use dependency injection for connections (recommended):
public function __construct(private SalesforceFacade $salesforce) {}
public function syncAccounts()
{
$accounts = $this->salesforce->connection()->query("SELECT Id, Name FROM Account");
// ...
}
Dynamic Connections:
For multi-tenant apps, configure named connections in config/salesforce.php:
'connections' => [
'primary' => [...],
'sandbox' => [
'domain' => 'test.salesforce.com',
// ...
],
],
Access via:
$sandbox = SalesforceFacade::connection('sandbox');
Leverage the query builder for type safety:
$accounts = SalesforceFacade::query()
->select('Id', 'Name')
->from('Account')
->where('AnnualRevenue', '>', 1000000)
->limit(50)
->get();
Salesforce_Client Usage: The package no longer supports direct instantiation of Salesforce_Client. All connections must route through the new bundle. Fix: Update your code to use SalesforceFacade::connection() or inject the bundle’s client.SalesforceFacade::getClient() are removed. Use SalesforceFacade::connection() instead.salesforce-bundle is properly installed (composer require guzzlehttp/salesforce or equivalent)..env credentials match the bundle’s expected format (e.g., SALESFORCE_PASSWORD must include the security token).domain in config matches your Salesforce instance (e.g., login.salesforce.com vs. csXX.salesforce.com).$connection = SalesforceFacade::connection()->withOptions([
'debug' => true,
'logger' => new \Monolog\Logger('salesforce'),
]);
$batch = $connection->newBatch();
$batch->addQuery("SELECT Id FROM Account");
$results = $batch->execute();
$this->app->singleton(\SalesforceBundle\Client::class, function ($app) {
return new \SalesforceBundle\Client($app['config']['salesforce']);
});
class CustomSalesforceClient extends \SalesforceBundle\Client
{
public function customMethod()
{
// ...
}
}
Bind it in a service provider:
$this->app->bind(\SalesforceBundle\Client::class, function ($app) {
return new CustomSalesforceClient($app['config']['salesforce']);
});
salesforce.bundle.authenticated):
event(new \SalesforceBundle\Events\Authenticated($client));
composer.json to include the required bundle.Salesforce_Client with SalesforceFacade::connection().How can I help you explore Laravel packages today?