From 8493c49476166b9e34fbbda9f2886ae20e28c403 Mon Sep 17 00:00:00 2001 From: Adam Boudreau Date: Tue, 25 Apr 2017 16:39:53 -0400 Subject: [PATCH 1/5] Add refresh_token_url and endpoint_service_url to be able to configure appropriate to environment --- lib/fuelsdk/client.rb | 7 +++++-- lib/fuelsdk/targeting.rb | 9 ++++++--- lib/fuelsdk/version.rb | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/fuelsdk/client.rb b/lib/fuelsdk/client.rb index b83747e..49a653f 100644 --- a/lib/fuelsdk/client.rb +++ b/lib/fuelsdk/client.rb @@ -39,7 +39,7 @@ def unpack raw class Client attr_accessor :debug, :auth_token, :internal_token, :refresh_token, - :id, :secret, :signature + :id, :secret, :signature, :refresh_token_url include FuelSDK::Soap include FuelSDK::Rest @@ -75,6 +75,9 @@ def initialize(params={}, debug=false) self.jwt = params['jwt'] if params['jwt'] self.refresh_token = params['refresh_token'] if params['refresh_token'] + # https://developer.salesforce.com/docs/atlas.en-us.mc-getting-started.meta/mc-getting-started/requestToken.htm + # Allow different request token urls to be used to specify sandbox / production environment + self.refresh_token_url = params['refresh_token_url'] if params['refresh_token_url'] self.wsdl = params["defaultwsdl"] if params["defaultwsdl"] end @@ -106,7 +109,7 @@ def refresh force=false if (self.auth_token.nil? || force) clear_client! options = request_token_options(request_token_data) - response = post("https://auth.exacttargetapis.com/v1/requestToken", options) + response = post(self.refresh_token_url || "https://auth.exacttargetapis.com/v1/requestToken", options) raise "Unable to refresh token: #{response['message']}" unless response.has_key?('accessToken') self.auth_token = response['accessToken'] diff --git a/lib/fuelsdk/targeting.rb b/lib/fuelsdk/targeting.rb index 4465bce..7360de9 100644 --- a/lib/fuelsdk/targeting.rb +++ b/lib/fuelsdk/targeting.rb @@ -1,6 +1,7 @@ module FuelSDK::Targeting attr_accessor :auth_token attr_accessor :endpoint + attr_accessor :endpoint_service_url include FuelSDK::HTTPRequest @@ -9,13 +10,15 @@ def refresh end def endpoint - @endpoint ||= determine_stack + @endpoint ||= determine_stack(@endpoint_service_url) end - def determine_stack + # https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/getting_started_developers_and_the_exacttarget_api.htm + # Allow different endpoint url to be used between sandbox / production ET environment + def determine_stack(endpoint_service_url=nil) refresh unless self.auth_token options = {'params' => {'access_token' => self.auth_token}} - response = get("https://www.exacttargetapis.com/platform/v1/endpoints/soap", options) + response = get(endpoint_service_url || "https://www.exacttargetapis.com/platform/v1/endpoints/soap", options) raise 'Unable to determine stack' unless response.success? response['url'] end diff --git a/lib/fuelsdk/version.rb b/lib/fuelsdk/version.rb index 6022137..a678ad0 100644 --- a/lib/fuelsdk/version.rb +++ b/lib/fuelsdk/version.rb @@ -1,3 +1,3 @@ module FuelSDK - VERSION = "0.1.10" + VERSION = "0.1.11" end From a663ef72fc5f3a0fc82287013d10b447ec0e48f0 Mon Sep 17 00:00:00 2001 From: Adam Boudreau Date: Fri, 28 Apr 2017 12:06:00 -0400 Subject: [PATCH 2/5] Update readme with notes on specifying different token / wsdl / endpoints for fuelsdk client. --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index b7a86ec..c12b1ba 100755 --- a/README.md +++ b/README.md @@ -32,6 +32,16 @@ Add a require statement to reference the Fuel SDK's functionality: Next, create an instance of the Client class: > myClient = FuelSDK::Client.new {'client' => { 'id' => CLIENTID, 'secret' => SECRET }} +https://developer.salesforce.com/docs/atlas.en-us.mc-getting-started.meta/mc-getting-started/requestToken.htm + +Note: Added new option to client initilizer 'refresh_token_url' (changes depending on ET environment) +> myClient = FuelSDK::Client.new { 'client' => {...}, 'refresh_token_url' => 'https://auth-test.exacttargetapis.com/v1/requestToken', 'defaultwsdl' => 'https://webservice.test.exacttarget.com/etframework.wsdl' } + +https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/getting_started_developers_and_the_exacttarget_api.htm + +Note: Added 'endpoint_service_url' accessor to Targeting to allow specifying different soap endpoint +> myClient.endpoint_service_url = 'https://webservice.test.exacttarget.com/Service.asmx' # depending on ET instance + Create an instance of the object type we want to work with: > list = FuelSDK::List.new From 193915ab6d1a4e6c4e252318f4861116ee310440 Mon Sep 17 00:00:00 2001 From: Adam Boudreau Date: Tue, 27 Feb 2018 14:06:19 -0500 Subject: [PATCH 3/5] Force refreshing auth token when determine soap stack fails and retry getting url before raising exception. --- lib/fuelsdk/targeting.rb | 10 +++++++++- lib/fuelsdk/version.rb | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/fuelsdk/targeting.rb b/lib/fuelsdk/targeting.rb index 7360de9..052f9e8 100644 --- a/lib/fuelsdk/targeting.rb +++ b/lib/fuelsdk/targeting.rb @@ -19,7 +19,15 @@ def determine_stack(endpoint_service_url=nil) refresh unless self.auth_token options = {'params' => {'access_token' => self.auth_token}} response = get(endpoint_service_url || "https://www.exacttargetapis.com/platform/v1/endpoints/soap", options) - raise 'Unable to determine stack' unless response.success? + + unless response.success? + # if unsuccessful, force refresh token and try with new token before raising exception + refresh! + options = {'params' => {'access_token' => self.auth_token}} + response = get(endpoint_service_url || "https://www.exacttargetapis.com/platform/v1/endpoints/soap", options) + + raise "Unable to determine stack #{response.code}, #{response.body.inspect}" unless response.success? + end response['url'] end end diff --git a/lib/fuelsdk/version.rb b/lib/fuelsdk/version.rb index a678ad0..72df3d1 100644 --- a/lib/fuelsdk/version.rb +++ b/lib/fuelsdk/version.rb @@ -1,3 +1,3 @@ module FuelSDK - VERSION = "0.1.11" + VERSION = "0.1.12" end From 94702c04743061fa836fe456e345d98bcf3bdea4 Mon Sep 17 00:00:00 2001 From: adamdboudreau Date: Thu, 9 May 2019 11:58:01 -0400 Subject: [PATCH 4/5] Avoid force refreshing within fuelsdk so that cached tokens can be reused multiple times --- lib/fuelsdk/client.rb | 3 ++- lib/fuelsdk/version.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/fuelsdk/client.rb b/lib/fuelsdk/client.rb index 49a653f..2cddead 100644 --- a/lib/fuelsdk/client.rb +++ b/lib/fuelsdk/client.rb @@ -118,8 +118,9 @@ def refresh force=false end end + # Note: never force refresh, leave that to outside logic to update tokens after they expire def refresh! - refresh true + refresh end def AddSubscriberToList(email, ids, subscriber_key = nil) diff --git a/lib/fuelsdk/version.rb b/lib/fuelsdk/version.rb index 72df3d1..7079452 100644 --- a/lib/fuelsdk/version.rb +++ b/lib/fuelsdk/version.rb @@ -1,3 +1,3 @@ module FuelSDK - VERSION = "0.1.12" + VERSION = "0.1.13" end From e626e7a9670100269b89bc4e17f304a155b81425 Mon Sep 17 00:00:00 2001 From: adamdboudreau Date: Thu, 9 May 2019 16:20:22 -0400 Subject: [PATCH 5/5] Allow targeting_endpoint to be set to avoid multiple requests for the same endpoint --- lib/fuelsdk/client.rb | 3 ++- lib/fuelsdk/targeting.rb | 12 +++--------- lib/fuelsdk/version.rb | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/fuelsdk/client.rb b/lib/fuelsdk/client.rb index 2cddead..2e39466 100644 --- a/lib/fuelsdk/client.rb +++ b/lib/fuelsdk/client.rb @@ -39,7 +39,7 @@ def unpack raw class Client attr_accessor :debug, :auth_token, :internal_token, :refresh_token, - :id, :secret, :signature, :refresh_token_url + :id, :secret, :signature, :refresh_token_url, :targeting_endpoint include FuelSDK::Soap include FuelSDK::Rest @@ -80,6 +80,7 @@ def initialize(params={}, debug=false) self.refresh_token_url = params['refresh_token_url'] if params['refresh_token_url'] self.wsdl = params["defaultwsdl"] if params["defaultwsdl"] + self.targeting_endpoint = params['targeting_endpoint'] if params['targeting_endpoint'] end def request_token_data diff --git a/lib/fuelsdk/targeting.rb b/lib/fuelsdk/targeting.rb index 052f9e8..cce1240 100644 --- a/lib/fuelsdk/targeting.rb +++ b/lib/fuelsdk/targeting.rb @@ -10,7 +10,7 @@ def refresh end def endpoint - @endpoint ||= determine_stack(@endpoint_service_url) + @endpoint ||= self.targeting_endpoint || determine_stack(@endpoint_service_url) end # https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/getting_started_developers_and_the_exacttarget_api.htm @@ -20,14 +20,8 @@ def determine_stack(endpoint_service_url=nil) options = {'params' => {'access_token' => self.auth_token}} response = get(endpoint_service_url || "https://www.exacttargetapis.com/platform/v1/endpoints/soap", options) - unless response.success? - # if unsuccessful, force refresh token and try with new token before raising exception - refresh! - options = {'params' => {'access_token' => self.auth_token}} - response = get(endpoint_service_url || "https://www.exacttargetapis.com/platform/v1/endpoints/soap", options) - - raise "Unable to determine stack #{response.code}, #{response.body.inspect}" unless response.success? - end + raise "Unable to determine stack #{response.code}, #{response.body.inspect}" unless response.success? + self.targeting_endpoint = response['url'] response['url'] end end diff --git a/lib/fuelsdk/version.rb b/lib/fuelsdk/version.rb index 7079452..2f47e88 100644 --- a/lib/fuelsdk/version.rb +++ b/lib/fuelsdk/version.rb @@ -1,3 +1,3 @@ module FuelSDK - VERSION = "0.1.13" + VERSION = "0.1.14" end