ruby-ecomm-client 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.gitignore +22 -0
  2. data/.ruby-version +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +52 -0
  6. data/Rakefile +12 -0
  7. data/fixtures/vcr_cassettes/account_info/default.yml +42 -0
  8. data/fixtures/vcr_cassettes/account_info/unknown/resource_id.yml +42 -0
  9. data/fixtures/vcr_cassettes/account_info/unknown/resource_type.yml +42 -0
  10. data/fixtures/vcr_cassettes/account_info/unknown/source_tree_id.yml +42 -0
  11. data/fixtures/vcr_cassettes/downgrade/default.yml +42 -0
  12. data/fixtures/vcr_cassettes/downgrade/noop.yml +42 -0
  13. data/fixtures/vcr_cassettes/downgrade/unknown/resource_id.yml +42 -0
  14. data/fixtures/vcr_cassettes/downgrade/unknown/resource_type.yml +42 -0
  15. data/fixtures/vcr_cassettes/downgrade/unknown/target_tree_id.yml +42 -0
  16. data/fixtures/vcr_cassettes/express_checkout/configured.yml +40 -0
  17. data/fixtures/vcr_cassettes/express_checkout/unknown.yml +40 -0
  18. data/fixtures/vcr_cassettes/transitions/default/unknown/source_tree_id.yml +42 -0
  19. data/fixtures/vcr_cassettes/transitions/many.yml +42 -0
  20. data/fixtures/vcr_cassettes/transitions/one.yml +42 -0
  21. data/fixtures/vcr_cassettes/transitions/unknown/source_tree_id.yml +42 -0
  22. data/fixtures/vcr_cassettes/upgrade/default.yml +42 -0
  23. data/fixtures/vcr_cassettes/upgrade/noop.yml +42 -0
  24. data/fixtures/vcr_cassettes/upgrade/unknown/resource_id.yml +42 -0
  25. data/fixtures/vcr_cassettes/upgrade/unknown/resource_type.yml +42 -0
  26. data/fixtures/vcr_cassettes/upgrade/unknown/target_tree_id.yml +42 -0
  27. data/lib/ruby-ecomm-client.rb +10 -0
  28. data/lib/ruby-ecomm-client/client.rb +148 -0
  29. data/lib/ruby-ecomm-client/converter.rb +45 -0
  30. data/lib/ruby-ecomm-client/error.rb +12 -0
  31. data/lib/ruby-ecomm-client/version.rb +3 -0
  32. data/lib/ruby-ecomm-client/wsdl/manager.wsdl +296 -0
  33. data/lib/ruby-ecomm-client/wsdl/profile.wsdl +66 -0
  34. data/lib/ruby-ecomm-client/wsdl/purchase.wsdl +74 -0
  35. data/ruby-ecomm-client.gemspec +30 -0
  36. data/script/cibuild +10 -0
  37. data/spec/ruby-ecomm-client/client_spec.rb +297 -0
  38. data/spec/ruby-ecomm-client/converter_spec.rb +96 -0
  39. data/spec/ruby-ecomm-client/error_spec.rb +39 -0
  40. data/spec/spec_helper.rb +21 -0
  41. metadata +237 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ recorded_with: VCR 2.8.0
3
+ http_interactions:
4
+ - request:
5
+ method: post
6
+ uri: http://bonsai.dev.glbt1.gdg/bonsai/bonsaimanager/service.asmx
7
+ body:
8
+ string: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="#Bonsai"><env:Body><tns:ChangeAccountRequest><tns:RenewalPFID>0</tns:RenewalPFID><tns:IDType>ORION</tns:IDType><tns:ItemRequestXml>&lt;itemRequest/&gt;</tns:ItemRequestXml><tns:AccountChangeXml>&lt;ClientChange TreeID='73223' ShopperID='255528'/&gt;</tns:AccountChangeXml><tns:RenewalPeriods>0</tns:RenewalPeriods><tns:ResourceType>outright</tns:ResourceType><tns:ResourceID>e1dd6ab9-b072-11e3-9aad-005056953ce3</tns:ResourceID></tns:ChangeAccountRequest></env:Body></env:Envelope>
9
+ headers:
10
+ soapaction:
11
+ - "\"#Bonsai/ChangeAccountRequest\""
12
+ accept:
13
+ - "*/*"
14
+ content-length:
15
+ - "697"
16
+ content-type:
17
+ - text/xml;charset=UTF-8
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ x-aspnet-version:
24
+ - 4.0.30319
25
+ server:
26
+ - Microsoft-IIS/7.0
27
+ connection:
28
+ - close
29
+ date:
30
+ - Wed, 26 Mar 2014 03:26:23 GMT
31
+ cache-control:
32
+ - private, max-age=0
33
+ content-length:
34
+ - "411"
35
+ x-powered-by:
36
+ - ASP.NET
37
+ content-type:
38
+ - text/xml; charset=utf-8
39
+ body:
40
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ChangeAccountRequestResponse xmlns="#Bonsai"><ChangeAccountRequestResult>-1</ChangeAccountRequestResult><ResultCode>-999</ResultCode></ChangeAccountRequestResponse></soap:Body></soap:Envelope>
41
+ http_version: "1.1"
42
+ recorded_at: Wed, 26 Mar 2014 03:26:24 GMT
@@ -0,0 +1,10 @@
1
+ require 'savon'
2
+
3
+ require 'ruby-ecomm-client/version'
4
+ require 'ruby-ecomm-client/error'
5
+ require 'ruby-ecomm-client/converter'
6
+ require 'ruby-ecomm-client/client'
7
+
8
+ module RubyEcommClient
9
+ # Your code goes here...
10
+ end
@@ -0,0 +1,148 @@
1
+ module RubyEcommClient
2
+ class Client
3
+ include ResponseConverter
4
+
5
+ ENDPOINTS_MANAGER = {
6
+ :development => 'http://bonsai.dev.glbt1.gdg/bonsai/bonsaimanager/service.asmx',
7
+ :test => 'http://bonsai.dev.glbt1.gdg/bonsai/bonsaimanager/service.asmx',
8
+ :production => 'http://gdbonsaiXv01.prod.mesa1.gdg/bonsai/bonsaimanager/service.asmx',
9
+ :qa => 'http://bonsai.test.glbt1.gdg/bonsai/bonsaimanager/service.asmx'
10
+ }
11
+ ENDPOINTS_PROFILE = {
12
+ :development => 'http://gdcomm.dev.glbt1.gdg/WSgdInstantPurchasePublic/Service.asmx',
13
+ :test => 'http://gdcomm.dev.glbt1.gdg/WSgdInstantPurchasePublic/Service.asmx',
14
+ :production => 'http://gdcomm.godaddy.com/WSgdInstantPurchasePublic/Service.asmx',
15
+ :qa => 'http://gdcomm.test.glbt1.gdg/WSgdInstantPurchasePublic/Service.asmx'
16
+ }
17
+ ENDPOINTS_PURCHASE = {
18
+ :development => 'https://bonsaipurchase.dev.glbt1.gdg/BonsaiPurchase/Service.asmx',
19
+ :test => 'https://bonsaipurchase.dev.glbt1.gdg/BonsaiPurchase/Service.asmx',
20
+ :production => 'https://bonsaipurchase.prod.mesa1.gdg/BonsaiPurchase/Service.asmx',
21
+ :qa => 'https://bonsaipurchase.test.glbt1.gdg/BonsaiPurchase/Service.asmx'
22
+ }
23
+
24
+ ID_TYPE = 'ORION'
25
+
26
+ WSDL_MANAGER = 'manager.wsdl'
27
+ WSDL_PROFILE = 'profile.wsdl'
28
+ WSDL_PURCHASE = 'purchase.wsdl'
29
+
30
+ attr_accessor :shopper_id, :resource_type, :resource_id
31
+
32
+ def initialize(shopper_id, resource_type, resource_id)
33
+ raise ArgumentError.new('shopper_id must be specified') if blank?(shopper_id)
34
+ raise ArgumentError.new('resource_type must be specified') if blank?(resource_type)
35
+ raise ArgumentError.new('resource_id must be specified') if blank?(resource_id)
36
+
37
+ @shopper_id = shopper_id
38
+ @resource_type = resource_type
39
+ @resource_id = resource_id
40
+ end
41
+
42
+ def self.environment
43
+ ((defined?(Rails) ? Rails.env : ENV['RAILS_ENV']) || 'development').to_sym
44
+ end
45
+
46
+ def express_checkout?
47
+ result = client_profile.call(:shopper_has_instant_purchase_payment, :message => {
48
+ 'sShopperID' => @shopper_id
49
+ })
50
+ response = convert_value(result.body[:shopper_has_instant_purchase_payment_response])
51
+ response[:b_has_instant_purchase_payment]
52
+ end
53
+
54
+ def account_info(source_tree_id = 0)
55
+ result = client_manager.call(:get_account_xml, :message => {
56
+ 'ResourceID' => @resource_id,
57
+ 'ResourceType' => @resource_type,
58
+ 'IDType' => ID_TYPE,
59
+ 'TreeID' => source_tree_id,
60
+ 'PrivateLabelID' => 1
61
+ })
62
+ response = convert_response(result.body[:get_account_xml_response])
63
+ if response[:result_code] == 0
64
+ response[:account_xml][:bonsai][:bonsai]
65
+ else
66
+ raise RubyEcommError.new(response[:result_code])
67
+ end
68
+ end
69
+
70
+ def transitions(source_tree_id = 0)
71
+ transitions = account_info(source_tree_id)[:tree][:transition]
72
+ transitions.is_a?(Array) ? transitions : [transitions]
73
+ end
74
+
75
+ def upgrade(target_tree_id)
76
+ raise ArgumentError.new('target_tree_id must be specified') if blank?(target_tree_id)
77
+
78
+ result = client_manager.call(:change_account_request, :message => {
79
+ 'ResourceID' => @resource_id,
80
+ 'ResourceType' => @resource_type,
81
+ 'IDType' => ID_TYPE,
82
+ 'AccountChangeXml' => "<ClientChange TreeID='#{target_tree_id}' ShopperID='#{@shopper_id}'/>",
83
+ 'RenewalPFID' => 0,
84
+ 'RenewalPeriods' => 0,
85
+ 'ItemRequestXml' => '<itemRequest/>'
86
+ })
87
+ response = convert_response(result.body[:change_account_request_response])
88
+ if response[:result_code] == 0
89
+ response[:change_account_request_result]
90
+ else
91
+ raise RubyEcommError.new(response[:result_code], response[:change_account_request_result])
92
+ end
93
+ end
94
+
95
+ def downgrade(target_tree_id = 0)
96
+ upgrade(target_tree_id)
97
+ end
98
+
99
+ private
100
+
101
+ def blank?(value)
102
+ value.nil? || value.to_s == ''
103
+ end
104
+
105
+ def wsdl_path
106
+ "#{File.expand_path(File.dirname(__FILE__))}/wsdl/"
107
+ end
108
+
109
+ def shared_globals(globals)
110
+ globals.convert_response_tags_to TAG_CONVERTER
111
+ globals.log false
112
+ globals.logger Rails.logger if defined?(Rails)
113
+ globals.namespace '#Bonsai'
114
+ end
115
+
116
+ def client_manager
117
+ @client_manager ||= Savon.client do |globals|
118
+ shared_globals(globals)
119
+
120
+ globals.wsdl "#{wsdl_path}#{WSDL_MANAGER}"
121
+ globals.endpoint ENDPOINTS_MANAGER[Client.environment]
122
+ end
123
+ end
124
+
125
+ def client_profile
126
+ @client_profile ||= Savon.client do |globals|
127
+ shared_globals(globals)
128
+
129
+ globals.wsdl "#{wsdl_path}#{WSDL_PROFILE}"
130
+ globals.endpoint ENDPOINTS_PROFILE[Client.environment]
131
+ globals.namespace 'http://tempuri.org/'
132
+ end
133
+ end
134
+
135
+ def client_purchase
136
+ @client_purchase ||= Savon.client do |globals|
137
+ shared_globals(globals)
138
+
139
+ globals.wsdl "#{wsdl_path}#{WSDL_PURCHASE}"
140
+ globals.endpoint ENDPOINTS_PURCHASE[Client.environment]
141
+
142
+ globals.ssl_verify_mode = :none
143
+ globals.ssl_cert_file = 'config/client.crt'
144
+ globals.ssl_cert_key_file = 'config/client.key'
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,45 @@
1
+ module ResponseConverter
2
+ TAG_CONVERTER = lambda do |tag|
3
+ tag.snakecase.gsub(/@/, '').gsub(/unified_/, '').gsub(/current_/, '').to_sym
4
+ end
5
+
6
+ def convert_value(input)
7
+ if input == 'True' || input == 'true' || input == 'TRUE'
8
+ return true
9
+ elsif input == 'False' || input == 'false' || input == 'FALSE'
10
+ return false
11
+ else
12
+ begin
13
+ return Integer(input)
14
+ rescue StandardError => e
15
+ begin
16
+ return Float(input)
17
+ rescue StandardError => e
18
+ end
19
+ end
20
+ end
21
+ input
22
+ end
23
+
24
+ def convert_response(input)
25
+ if input.is_a?(Hash)
26
+ input.each do |key, value|
27
+ if value.is_a?(Hash) || value.is_a?(Array)
28
+ convert_response(value)
29
+ else
30
+ input[key] = convert_value(value)
31
+ end
32
+ end
33
+ elsif input.is_a?(Array)
34
+ input.each_with_index do |value, index|
35
+ if value.is_a?(Hash) || value.is_a?(Array)
36
+ convert_response(value)
37
+ else
38
+ input[index] = convert_value(value)
39
+ end
40
+ end
41
+ else
42
+ input
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ class RubyEcommError < RuntimeError
2
+ attr_accessor :result_code, :request_result
3
+
4
+ def initialize(result_code = :unknown, request_result = nil)
5
+ raise ArgumentError.new('result_code must be specified') if result_code.nil? || result_code.to_s == ''
6
+ raise ArgumentError.new('request_result must not be blank') if !request_result.nil? && request_result.to_s == ''
7
+
8
+ super("Error received from Ecomm web service: #{result_code}#{', request_result=' + request_result.to_s}")
9
+ @result_code = result_code
10
+ @request_result = request_result
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module RubyEcommClient
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,296 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="#Bonsai" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="#Bonsai" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
3
+ <wsdl:types>
4
+ <s:schema elementFormDefault="qualified" targetNamespace="#Bonsai">
5
+ <s:element name="GetAccountXml">
6
+ <s:complexType>
7
+ <s:sequence>
8
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceID" type="s:string" />
9
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceType" type="s:string" />
10
+ <s:element minOccurs="0" maxOccurs="1" name="IDType" type="s:string" />
11
+ <s:element minOccurs="1" maxOccurs="1" name="TreeID" type="s:int" />
12
+ <s:element minOccurs="1" maxOccurs="1" name="PrivateLabelID" type="s:int" />
13
+ </s:sequence>
14
+ </s:complexType>
15
+ </s:element>
16
+ <s:element name="GetAccountXmlResponse">
17
+ <s:complexType>
18
+ <s:sequence>
19
+ <s:element minOccurs="1" maxOccurs="1" name="ResultCode" type="s:int" />
20
+ <s:element minOccurs="0" maxOccurs="1" name="AccountXml">
21
+ <s:complexType mixed="true">
22
+ <s:sequence>
23
+ <s:any />
24
+ </s:sequence>
25
+ </s:complexType>
26
+ </s:element>
27
+ </s:sequence>
28
+ </s:complexType>
29
+ </s:element>
30
+ <s:element name="ChangeAccountRequest">
31
+ <s:complexType>
32
+ <s:sequence>
33
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceID" type="s:string" />
34
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceType" type="s:string" />
35
+ <s:element minOccurs="0" maxOccurs="1" name="IDType" type="s:string" />
36
+ <s:element minOccurs="0" maxOccurs="1" name="AccountChangeXml" type="s:string" />
37
+ <s:element minOccurs="1" maxOccurs="1" name="RenewalPFID" type="s:int" />
38
+ <s:element minOccurs="1" maxOccurs="1" name="RenewalPeriods" type="s:int" />
39
+ <s:element minOccurs="0" maxOccurs="1" name="ItemRequestXml" type="s:string" />
40
+ </s:sequence>
41
+ </s:complexType>
42
+ </s:element>
43
+ <s:element name="ChangeAccountRequestResponse">
44
+ <s:complexType>
45
+ <s:sequence>
46
+ <s:element minOccurs="1" maxOccurs="1" name="ChangeAccountRequestResult" type="s:int" />
47
+ <s:element minOccurs="1" maxOccurs="1" name="ResultCode" type="s:int" />
48
+ </s:sequence>
49
+ </s:complexType>
50
+ </s:element>
51
+ <s:element name="GetRenewalOptions">
52
+ <s:complexType>
53
+ <s:sequence>
54
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceID" type="s:string" />
55
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceType" type="s:string" />
56
+ <s:element minOccurs="0" maxOccurs="1" name="IDType" type="s:string" />
57
+ <s:element minOccurs="1" maxOccurs="1" name="PrivateLabelID" type="s:int" />
58
+ </s:sequence>
59
+ </s:complexType>
60
+ </s:element>
61
+ <s:element name="GetRenewalOptionsResponse">
62
+ <s:complexType>
63
+ <s:sequence>
64
+ <s:element minOccurs="0" maxOccurs="1" name="GetRenewalOptionsResult" type="tns:RenewalResponse" />
65
+ </s:sequence>
66
+ </s:complexType>
67
+ </s:element>
68
+ <s:complexType name="RenewalResponse">
69
+ <s:sequence>
70
+ <s:element minOccurs="0" maxOccurs="1" name="RenewalOptions" type="tns:ArrayOfRenewalOption" />
71
+ <s:element minOccurs="1" maxOccurs="1" name="ResultCode" type="s:int" />
72
+ </s:sequence>
73
+ </s:complexType>
74
+ <s:complexType name="ArrayOfRenewalOption">
75
+ <s:sequence>
76
+ <s:element minOccurs="0" maxOccurs="unbounded" name="RenewalOption" type="tns:RenewalOption" />
77
+ </s:sequence>
78
+ </s:complexType>
79
+ <s:complexType name="RenewalOption">
80
+ <s:sequence>
81
+ <s:element minOccurs="1" maxOccurs="1" name="UnifiedProductID" type="s:int" />
82
+ <s:element minOccurs="1" maxOccurs="1" name="MinRenewalPeriods" type="s:int" />
83
+ <s:element minOccurs="1" maxOccurs="1" name="MaxRenewalPeriods" type="s:int" />
84
+ <s:element minOccurs="1" maxOccurs="1" name="RenewalLength" type="s:int" />
85
+ <s:element minOccurs="0" maxOccurs="1" name="RenewalType" type="s:string" />
86
+ </s:sequence>
87
+ </s:complexType>
88
+ <s:element name="GetRenewalOptionsByUnifiedProductId">
89
+ <s:complexType>
90
+ <s:sequence>
91
+ <s:element minOccurs="1" maxOccurs="1" name="UnifiedProductID" type="s:int" />
92
+ <s:element minOccurs="1" maxOccurs="1" name="PrivateLabelID" type="s:int" />
93
+ </s:sequence>
94
+ </s:complexType>
95
+ </s:element>
96
+ <s:element name="GetRenewalOptionsByUnifiedProductIdResponse">
97
+ <s:complexType>
98
+ <s:sequence>
99
+ <s:element minOccurs="0" maxOccurs="1" name="GetRenewalOptionsByUnifiedProductIdResult" type="tns:RenewalResponse" />
100
+ </s:sequence>
101
+ </s:complexType>
102
+ </s:element>
103
+ <s:element name="GetTransitionsAndRank">
104
+ <s:complexType>
105
+ <s:sequence>
106
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceID" type="s:string" />
107
+ <s:element minOccurs="0" maxOccurs="1" name="ResourceType" type="s:string" />
108
+ <s:element minOccurs="0" maxOccurs="1" name="IDType" type="s:string" />
109
+ <s:element minOccurs="1" maxOccurs="1" name="UnifiedProductID" type="s:int" />
110
+ <s:element minOccurs="1" maxOccurs="1" name="IsFree" nillable="true" type="s:boolean" />
111
+ </s:sequence>
112
+ </s:complexType>
113
+ </s:element>
114
+ <s:element name="GetTransitionsAndRankResponse">
115
+ <s:complexType>
116
+ <s:sequence>
117
+ <s:element minOccurs="0" maxOccurs="1" name="GetTransitionsAndRankResult" type="tns:TransitionResponse" />
118
+ </s:sequence>
119
+ </s:complexType>
120
+ </s:element>
121
+ <s:complexType name="TransitionResponse">
122
+ <s:sequence>
123
+ <s:element minOccurs="1" maxOccurs="1" name="ResultCode" type="s:int" />
124
+ <s:element minOccurs="0" maxOccurs="1" name="Transitions" type="tns:ArrayOfRankTransition" />
125
+ </s:sequence>
126
+ </s:complexType>
127
+ <s:complexType name="ArrayOfRankTransition">
128
+ <s:sequence>
129
+ <s:element minOccurs="0" maxOccurs="unbounded" name="RankTransition" nillable="true" type="tns:RankTransition" />
130
+ </s:sequence>
131
+ </s:complexType>
132
+ <s:complexType name="RankTransition">
133
+ <s:attribute name="NodeName" type="s:string" />
134
+ <s:attribute name="NodeRank" type="s:int" use="required" />
135
+ <s:attribute name="RelativeNodeRank" type="s:int" use="required" />
136
+ <s:attribute name="UnifiedProductID" type="s:int" use="required" />
137
+ </s:complexType>
138
+ </s:schema>
139
+ </wsdl:types>
140
+ <wsdl:message name="GetAccountXmlSoapIn">
141
+ <wsdl:part name="parameters" element="tns:GetAccountXml" />
142
+ </wsdl:message>
143
+ <wsdl:message name="GetAccountXmlSoapOut">
144
+ <wsdl:part name="parameters" element="tns:GetAccountXmlResponse" />
145
+ </wsdl:message>
146
+ <wsdl:message name="ChangeAccountRequestSoapIn">
147
+ <wsdl:part name="parameters" element="tns:ChangeAccountRequest" />
148
+ </wsdl:message>
149
+ <wsdl:message name="ChangeAccountRequestSoapOut">
150
+ <wsdl:part name="parameters" element="tns:ChangeAccountRequestResponse" />
151
+ </wsdl:message>
152
+ <wsdl:message name="GetRenewalOptionsSoapIn">
153
+ <wsdl:part name="parameters" element="tns:GetRenewalOptions" />
154
+ </wsdl:message>
155
+ <wsdl:message name="GetRenewalOptionsSoapOut">
156
+ <wsdl:part name="parameters" element="tns:GetRenewalOptionsResponse" />
157
+ </wsdl:message>
158
+ <wsdl:message name="GetRenewalOptionsByUnifiedProductIdSoapIn">
159
+ <wsdl:part name="parameters" element="tns:GetRenewalOptionsByUnifiedProductId" />
160
+ </wsdl:message>
161
+ <wsdl:message name="GetRenewalOptionsByUnifiedProductIdSoapOut">
162
+ <wsdl:part name="parameters" element="tns:GetRenewalOptionsByUnifiedProductIdResponse" />
163
+ </wsdl:message>
164
+ <wsdl:message name="GetTransitionsAndRankSoapIn">
165
+ <wsdl:part name="parameters" element="tns:GetTransitionsAndRank" />
166
+ </wsdl:message>
167
+ <wsdl:message name="GetTransitionsAndRankSoapOut">
168
+ <wsdl:part name="parameters" element="tns:GetTransitionsAndRankResponse" />
169
+ </wsdl:message>
170
+ <wsdl:portType name="ServiceSoap">
171
+ <wsdl:operation name="GetAccountXml">
172
+ <wsdl:input message="tns:GetAccountXmlSoapIn" />
173
+ <wsdl:output message="tns:GetAccountXmlSoapOut" />
174
+ </wsdl:operation>
175
+ <wsdl:operation name="ChangeAccountRequest">
176
+ <wsdl:input message="tns:ChangeAccountRequestSoapIn" />
177
+ <wsdl:output message="tns:ChangeAccountRequestSoapOut" />
178
+ </wsdl:operation>
179
+ <wsdl:operation name="GetRenewalOptions">
180
+ <wsdl:input message="tns:GetRenewalOptionsSoapIn" />
181
+ <wsdl:output message="tns:GetRenewalOptionsSoapOut" />
182
+ </wsdl:operation>
183
+ <wsdl:operation name="GetRenewalOptionsByUnifiedProductId">
184
+ <wsdl:input message="tns:GetRenewalOptionsByUnifiedProductIdSoapIn" />
185
+ <wsdl:output message="tns:GetRenewalOptionsByUnifiedProductIdSoapOut" />
186
+ </wsdl:operation>
187
+ <wsdl:operation name="GetTransitionsAndRank">
188
+ <wsdl:input message="tns:GetTransitionsAndRankSoapIn" />
189
+ <wsdl:output message="tns:GetTransitionsAndRankSoapOut" />
190
+ </wsdl:operation>
191
+ </wsdl:portType>
192
+ <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
193
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
194
+ <wsdl:operation name="GetAccountXml">
195
+ <soap:operation soapAction="#Bonsai/GetAccountXml" style="document" />
196
+ <wsdl:input>
197
+ <soap:body use="literal" />
198
+ </wsdl:input>
199
+ <wsdl:output>
200
+ <soap:body use="literal" />
201
+ </wsdl:output>
202
+ </wsdl:operation>
203
+ <wsdl:operation name="ChangeAccountRequest">
204
+ <soap:operation soapAction="#Bonsai/ChangeAccountRequest" style="document" />
205
+ <wsdl:input>
206
+ <soap:body use="literal" />
207
+ </wsdl:input>
208
+ <wsdl:output>
209
+ <soap:body use="literal" />
210
+ </wsdl:output>
211
+ </wsdl:operation>
212
+ <wsdl:operation name="GetRenewalOptions">
213
+ <soap:operation soapAction="#Bonsai/GetRenewalOptions" style="document" />
214
+ <wsdl:input>
215
+ <soap:body use="literal" />
216
+ </wsdl:input>
217
+ <wsdl:output>
218
+ <soap:body use="literal" />
219
+ </wsdl:output>
220
+ </wsdl:operation>
221
+ <wsdl:operation name="GetRenewalOptionsByUnifiedProductId">
222
+ <soap:operation soapAction="#Bonsai/GetRenewalOptionsByUnifiedProductId" style="document" />
223
+ <wsdl:input>
224
+ <soap:body use="literal" />
225
+ </wsdl:input>
226
+ <wsdl:output>
227
+ <soap:body use="literal" />
228
+ </wsdl:output>
229
+ </wsdl:operation>
230
+ <wsdl:operation name="GetTransitionsAndRank">
231
+ <soap:operation soapAction="#Bonsai/GetTransitionsAndRank" style="document" />
232
+ <wsdl:input>
233
+ <soap:body use="literal" />
234
+ </wsdl:input>
235
+ <wsdl:output>
236
+ <soap:body use="literal" />
237
+ </wsdl:output>
238
+ </wsdl:operation>
239
+ </wsdl:binding>
240
+ <wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap">
241
+ <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
242
+ <wsdl:operation name="GetAccountXml">
243
+ <soap12:operation soapAction="#Bonsai/GetAccountXml" style="document" />
244
+ <wsdl:input>
245
+ <soap12:body use="literal" />
246
+ </wsdl:input>
247
+ <wsdl:output>
248
+ <soap12:body use="literal" />
249
+ </wsdl:output>
250
+ </wsdl:operation>
251
+ <wsdl:operation name="ChangeAccountRequest">
252
+ <soap12:operation soapAction="#Bonsai/ChangeAccountRequest" style="document" />
253
+ <wsdl:input>
254
+ <soap12:body use="literal" />
255
+ </wsdl:input>
256
+ <wsdl:output>
257
+ <soap12:body use="literal" />
258
+ </wsdl:output>
259
+ </wsdl:operation>
260
+ <wsdl:operation name="GetRenewalOptions">
261
+ <soap12:operation soapAction="#Bonsai/GetRenewalOptions" style="document" />
262
+ <wsdl:input>
263
+ <soap12:body use="literal" />
264
+ </wsdl:input>
265
+ <wsdl:output>
266
+ <soap12:body use="literal" />
267
+ </wsdl:output>
268
+ </wsdl:operation>
269
+ <wsdl:operation name="GetRenewalOptionsByUnifiedProductId">
270
+ <soap12:operation soapAction="#Bonsai/GetRenewalOptionsByUnifiedProductId" style="document" />
271
+ <wsdl:input>
272
+ <soap12:body use="literal" />
273
+ </wsdl:input>
274
+ <wsdl:output>
275
+ <soap12:body use="literal" />
276
+ </wsdl:output>
277
+ </wsdl:operation>
278
+ <wsdl:operation name="GetTransitionsAndRank">
279
+ <soap12:operation soapAction="#Bonsai/GetTransitionsAndRank" style="document" />
280
+ <wsdl:input>
281
+ <soap12:body use="literal" />
282
+ </wsdl:input>
283
+ <wsdl:output>
284
+ <soap12:body use="literal" />
285
+ </wsdl:output>
286
+ </wsdl:operation>
287
+ </wsdl:binding>
288
+ <wsdl:service name="Service">
289
+ <wsdl:port name="ServiceSoap" binding="tns:ServiceSoap">
290
+ <soap:address location="http://bonsai.dev.glbt1.gdg/bonsai/bonsaimanager/service.asmx" />
291
+ </wsdl:port>
292
+ <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12">
293
+ <soap12:address location="http://bonsai.dev.glbt1.gdg/bonsai/bonsaimanager/service.asmx" />
294
+ </wsdl:port>
295
+ </wsdl:service>
296
+ </wsdl:definitions>