{"id":25514342,"url":"https://github.com/swisscat/salesforcebundle","last_synced_at":"2025-10-25T04:02:11.661Z","repository":{"id":57063138,"uuid":"105471338","full_name":"swisscat/SalesforceBundle","owner":"swisscat","description":"(Yet another) Salesforce synchronization tool, using a RabbitMQ engine to defer and bulk synchronization. Using Streaming API to fetch back records from Salesforce.","archived":false,"fork":false,"pushed_at":"2017-10-31T13:25:25.000Z","size":72,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-10T03:09:44.152Z","etag":null,"topics":["amqp","salesforce","salesforce-synchronization","streaming-api","sylius","symfony","symfony-bundle"],"latest_commit_sha":null,"homepage":"https://packagist.org/packages/swisscat/salesforce-bundle","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swisscat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-01T20:16:43.000Z","updated_at":"2022-06-04T07:09:06.000Z","dependencies_parsed_at":"2022-08-24T14:00:45.463Z","dependency_job_id":null,"html_url":"https://github.com/swisscat/SalesforceBundle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/swisscat/SalesforceBundle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swisscat%2FSalesforceBundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swisscat%2FSalesforceBundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swisscat%2FSalesforceBundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swisscat%2FSalesforceBundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swisscat","download_url":"https://codeload.github.com/swisscat/SalesforceBundle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swisscat%2FSalesforceBundle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280901420,"owners_count":26410586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amqp","salesforce","salesforce-synchronization","streaming-api","sylius","symfony","symfony-bundle"],"created_at":"2025-02-19T12:18:01.359Z","updated_at":"2025-10-25T04:02:11.645Z","avatar_url":"https://github.com/swisscat.png","language":"PHP","readme":"# [WORK IN PROGRESS] - SalesforceBundle\n(Yet another) Salesforce synchronization tool, using a RabbitMQ engine to defer and bulk synchronization.\nUsing Streaming API to fetch back records from Salesforce.\n\n# Installation\nRequire the bundle:\n```\ncomposer require swisscat/salesforce-bundle\n```\nRegister the bundle:\n```\n// app/AppKernel.php\n\npublic function registerBundles()\n{\n    $bundles = [\n        // ... ,\n        new \\OldSound\\RabbitMqBundle\\OldSoundRabbitMqBundle(),\n        new \\Swisscat\\SalesforceBundle\\SalesforceBundle(),\n    ];\n}\n```\n[Generate a Salesforce Enterprise WSDL](https://www.google.ch/url?sa=t\u0026rct=j\u0026q=\u0026esrc=s\u0026source=web\u0026cd=2\u0026ved=0ahUKEwj1iIaG4urWAhVLOMAKHbmLB8IQFggtMAE\u0026url=https%3A%2F%2Fdeveloper.salesforce.com%2Fdocs%2Fatlas.en-us.api_meta.meta%2Fapi_meta%2Fmeta_quickstart_get_WSDLs.htm\u0026usg=AOvVaw3b146uriu3vh1Jhv5Gnt4p)\n\nFill in basic config\n\n```\nsalesforce:\n    soap_client:\n        wsdl: \"%kernel.root_dir%/config/sf.wsdl\"\n        username: \u003cusername\u003e\n        password: \u003cpassword\u003e\n        token: \u003ctoken\u003e\n```\n\nUpdate schema:\n```\nbin/console doctrine:migrations:diff\nbin/console doctrine:migrations:migrate\n```\n\n# Configuration\nEdit config.yml\n```\nsalesforce:\n    soap_client:\n        wsdl: \"%kernel.root_dir%/config/sf.wsdl\"\n        username: \u003cusername\u003e\n        password: \u003cpassword\u003e\n        token: \u003ctoken\u003e\n\nold_sound_rabbit_mq:\n    connections:\n        default:\n            host:     'localhost'\n            port:     5672\n            user:     'guest'\n            password: 'guest'\n            vhost:    '/'\n            lazy:     true\n            connection_timeout: 60\n            keepalive: true\n            use_socket: false # default false\n    producers:\n        sync_salesforce:\n            connection:       default\n            exchange_options: {name: 'sync-salesforce', type: direct}\n            service_alias:    sync_salesforce # no alias by default\n    consumers:\n        salesforce_back:\n            connection:       default\n            exchange_options: {name: 'salesforce', type: direct}\n            queue_options:    {name: 'salesforce'}\n            callback:         sylius.consumer.salesforce_back\n    batch_consumers:\n        sync_salesforce:\n            connection:       default\n            exchange_options: {name: 'sync-salesforce', type: direct}\n            queue_options:    {name: 'sync-salesforce'}\n            callback:         sylius.consumer.salesforce\n            qos_options:      {prefetch_size: 0, prefetch_count: 2, global: false}\n```\n\nRun the command to process records\n```\nbin/console rabbitmq:batch:consumer sync_salesforce\n```\n\nRun the command to fetch Topic Updates (See https://github.com/swisscat/salesforce-amqp-connector)\n```\nbin/console rabbitmq:consumer salesforce_back\n```\n\n# Roadmap\n\n- [ ] Refactor / cleanup\n- [ ] Complete tests\n- [ ] Improve RabbitMQ exchange configuration\n- [ ] Provide queue configurability on ecommerce\n- [ ] Handle failures on ecommerce publish\n- [ ] Generalize bundle for other providers (i.e magento)\n- [ ] Authentication with Token for Java API\n- [ ] Implement bundle logic for reconciliation (Master: SF/ECOM/storing conflicts)\n- [ ] Improve mapping definition (custom functions)\n- [ ] Implement mapping associations (entity relations)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswisscat%2Fsalesforcebundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswisscat%2Fsalesforcebundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswisscat%2Fsalesforcebundle/lists"}