The last year, I wrote about how to consume a ASMX SOAP service to be precise I am talking about the Banco Central de Costa Rica webservice to grab the exchange rate (Official documentation: https://www.bccr.fi.cr/seccion-indicadores-economicos/servicio-web/gu%C3%ADa-de-uso).
It looks like they now changed their services, so I am writing this up to be explain how consume it now. I updated the repository with the new version here: https://github.com/kenneth-bolivar-castro/exchange-rate
The custom module codebase is almost the same one, so for sake of this article I won't explain everything again, nevertheless I will mention the main changes I made in order to make it work once again! In order to do that we gonna follow along the commit I made to fix it: https://github.com/kenneth-bolivar-castro/exchange-rate/commit/918bfefb5bd5f61e5f128320e45ef5e7a1d04b0f
On info YML file: exchange_rate.info.yml what I included was the compatibility with Drupal 9 plus I added a version definition.
The service now requires to you to register up in order to have access here, after that they will provide you a token to consume the service. So, I decided to create a settings form to store all those credentials. I've also storing the URL to consume the service (The last version I hardcoded it).
That being said, I included a new link on admin menu exchange_rate.links.menu.yml to expose the new settings form.
Of course, I created the new route for the new settings form here exchange_rate.routing.yml as well.
By using this form the module is able to store the endpoint, email and token in order to consume the service. Now those are settings the exchange_rate.services.yml needs some updates in order to inject the configuration as dependency.
Another thing that I noticed there was not feedback when the webservice was not available, so I made few changes on the controller src/Controller/ExchangeRateController.php too.
The major changes were into src/ExchangeRateManager.php where two new properties was included:
- $config It will have the configuration `exchange_rate.settings`.
- $siteName It will have the system site name.
The parameters required by the webservice are named in a different way now on the top of that the method to consume the service is now by POST method.
At last but not least, I create the settings form class src/Form/ExchangeRateSettingsForm.php per se.
Easy peasy, isn't it? Well, it works again. The demo is still available:
I hope it helps somebody somehow!