markety 1.4.3 → 2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/.gitignore +3 -0
- data/README.md +66 -15
- data/Rakefile +1 -1
- data/example_xml/get_lead_failure.xml +42 -0
- data/example_xml/get_lead_success.xml +63 -0
- data/example_xml/get_lead_success_two_leads.xml +88 -0
- data/example_xml/list_op_add_to_list_success.xml +42 -0
- data/example_xml/list_op_is_member_of_list_failure.xml +50 -0
- data/example_xml/list_op_is_member_of_list_success.xml +51 -0
- data/example_xml/list_op_remove_from_list_failure.xml +50 -0
- data/example_xml/list_op_remove_from_list_success.xml +42 -0
- data/example_xml/sync_lead_failure.xml +60 -0
- data/example_xml/sync_lead_success.xml +78 -0
- data/lib/markety.rb +26 -1
- data/lib/markety/authentication_header.rb +3 -3
- data/lib/markety/client.rb +35 -141
- data/lib/markety/command.rb +11 -0
- data/lib/markety/command/get_lead.rb +27 -0
- data/lib/markety/command/list_operation.rb +68 -0
- data/lib/markety/command/sync_lead.rb +55 -0
- data/lib/markety/enums.rb +18 -16
- data/lib/markety/lead.rb +69 -0
- data/lib/markety/lead_key.rb +5 -4
- data/lib/markety/response.rb +15 -0
- data/lib/markety/response/generic_response.rb +45 -0
- data/lib/markety/response/get_lead_response.rb +35 -0
- data/lib/markety/response/list_operation_response.rb +30 -0
- data/lib/markety/response/response_factory.rb +27 -0
- data/lib/markety/response/sync_lead_response.rb +32 -0
- data/lib/markety/version.rb +1 -3
- data/spec/markety/lead_key_spec.rb +10 -11
- data/spec/markety/{lead_record_spec.rb → lead_spec.rb} +13 -30
- data/spec/markety/response/get_lead_response_spec.rb +170 -0
- data/spec/markety/response/list_operation_response_spec.rb +76 -0
- data/spec/markety/response/sync_lead_response_spec.rb +107 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/savon_helper.rb +14 -0
- metadata +61 -33
- data/lib/markety/lead_record.rb +0 -73
@@ -0,0 +1,51 @@
|
|
1
|
+
I, [2014-09-16T16:16:57.156322 #29320] INFO -- : SOAP request: https://354-ESL-459.mktoapi.com/soap/mktows/2_4
|
2
|
+
I, [2014-09-16T16:16:57.156460 #29320] INFO -- : SOAPAction: "http://www.marketo.com/mktows/listOperation", Content-Type: text/xml;charset=UTF-8, Content-Length: 948
|
3
|
+
D, [2014-09-16T16:16:57.156806 #29320] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.marketo.com/mktows/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
5
|
+
<SOAP-ENV:Header>
|
6
|
+
<ns1:AuthenticationHeader>
|
7
|
+
<mktowsUserId>xxx</mktowsUserId>
|
8
|
+
<requestSignature>xxx</requestSignature>
|
9
|
+
<requestTimestamp>2014-09-16T16:16:57-05:00</requestTimestamp>
|
10
|
+
</ns1:AuthenticationHeader>
|
11
|
+
</SOAP-ENV:Header>
|
12
|
+
<SOAP-ENV:Body>
|
13
|
+
<tns:paramsListOperation>
|
14
|
+
<listOperation>ISMEMBEROFLIST</listOperation>
|
15
|
+
<strict>false</strict>
|
16
|
+
<listKey>
|
17
|
+
<keyType>MKTOLISTNAME</keyType>
|
18
|
+
<keyValue>foo_list</keyValue>
|
19
|
+
</listKey>
|
20
|
+
<listMemberList>
|
21
|
+
<leadKey>
|
22
|
+
<keyType>IDNUM</keyType>
|
23
|
+
<keyValue>1001088</keyValue>
|
24
|
+
</leadKey>
|
25
|
+
</listMemberList>
|
26
|
+
</tns:paramsListOperation>
|
27
|
+
</SOAP-ENV:Body>
|
28
|
+
</SOAP-ENV:Envelope>
|
29
|
+
|
30
|
+
D, [2014-09-16T16:16:57.157081 #29320] DEBUG -- : HTTPI POST request to 354-ESL-459.mktoapi.com (net_http)
|
31
|
+
I, [2014-09-16T16:16:57.524647 #29320] INFO -- : SOAP response (status 200)
|
32
|
+
D, [2014-09-16T16:16:57.525001 #29320] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
|
33
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
34
|
+
<SOAP-ENV:Body>
|
35
|
+
<ns1:successListOperation>
|
36
|
+
<result>
|
37
|
+
<success>true</success>
|
38
|
+
<statusList>
|
39
|
+
<leadStatus>
|
40
|
+
<leadKey>
|
41
|
+
<keyType>IDNUM</keyType>
|
42
|
+
<keyValue>1001088</keyValue>
|
43
|
+
</leadKey>
|
44
|
+
<status>true</status>
|
45
|
+
</leadStatus>
|
46
|
+
</statusList>
|
47
|
+
</result>
|
48
|
+
</ns1:successListOperation>
|
49
|
+
</SOAP-ENV:Body>
|
50
|
+
</SOAP-ENV:Envelope>
|
51
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
I, [2014-09-16T16:56:26.346615 #30338] INFO -- : SOAP request: https://354-ESL-459.mktoapi.com/soap/mktows/2_4
|
2
|
+
I, [2014-09-16T16:56:26.346749 #30338] INFO -- : SOAPAction: "http://www.marketo.com/mktows/listOperation", Content-Type: text/xml;charset=UTF-8, Content-Length: 948
|
3
|
+
D, [2014-09-16T16:56:26.347190 #30338] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.marketo.com/mktows/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
5
|
+
<SOAP-ENV:Header>
|
6
|
+
<ns1:AuthenticationHeader>
|
7
|
+
<mktowsUserId>xxx</mktowsUserId>
|
8
|
+
<requestSignature>xxx</requestSignature>
|
9
|
+
<requestTimestamp>2014-09-16T16:56:26-05:00</requestTimestamp>
|
10
|
+
</ns1:AuthenticationHeader>
|
11
|
+
</SOAP-ENV:Header>
|
12
|
+
<SOAP-ENV:Body>
|
13
|
+
<tns:paramsListOperation>
|
14
|
+
<listOperation>REMOVEFROMLIST</listOperation>
|
15
|
+
<strict>false</strict>
|
16
|
+
<listKey>
|
17
|
+
<keyType>MKTOLISTNAME</keyType>
|
18
|
+
<keyValue>foo_list</keyValue>
|
19
|
+
</listKey>
|
20
|
+
<listMemberList>
|
21
|
+
<leadKey>
|
22
|
+
<keyType>IDNUM</keyType>
|
23
|
+
<keyValue>1009999</keyValue>
|
24
|
+
</leadKey>
|
25
|
+
</listMemberList>
|
26
|
+
</tns:paramsListOperation>
|
27
|
+
</SOAP-ENV:Body>
|
28
|
+
</SOAP-ENV:Envelope>
|
29
|
+
|
30
|
+
D, [2014-09-16T16:56:26.347596 #30338] DEBUG -- : HTTPI POST request to 354-ESL-459.mktoapi.com (net_http)
|
31
|
+
I, [2014-09-16T16:56:27.153555 #30338] INFO -- : SOAP response (status 200)
|
32
|
+
D, [2014-09-16T16:56:27.153877 #30338] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
|
33
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
34
|
+
<SOAP-ENV:Body>
|
35
|
+
<ns1:successListOperation>
|
36
|
+
<result>
|
37
|
+
<success>false</success>
|
38
|
+
<statusList>
|
39
|
+
<leadStatus>
|
40
|
+
<leadKey>
|
41
|
+
<keyType>IDNUM</keyType>
|
42
|
+
<keyValue>1009999</keyValue>
|
43
|
+
</leadKey>
|
44
|
+
<status>false</status>
|
45
|
+
</leadStatus>
|
46
|
+
</statusList>
|
47
|
+
</result>
|
48
|
+
</ns1:successListOperation>
|
49
|
+
</SOAP-ENV:Body>
|
50
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
I, [2014-09-16T16:50:43.510336 #30338] INFO -- : SOAP request: https://354-ESL-459.mktoapi.com/soap/mktows/2_4
|
2
|
+
I, [2014-09-16T16:50:43.510488 #30338] INFO -- : SOAPAction: "http://www.marketo.com/mktows/listOperation", Content-Type: text/xml;charset=UTF-8, Content-Length: 948
|
3
|
+
D, [2014-09-16T16:50:43.510828 #30338] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.marketo.com/mktows/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
5
|
+
<SOAP-ENV:Header>
|
6
|
+
<ns1:AuthenticationHeader>
|
7
|
+
<mktowsUserId>xxx</mktowsUserId>
|
8
|
+
<requestSignature>xxx</requestSignature>
|
9
|
+
<requestTimestamp>2014-09-16T16:50:43-05:00</requestTimestamp>
|
10
|
+
</ns1:AuthenticationHeader>
|
11
|
+
</SOAP-ENV:Header>
|
12
|
+
<SOAP-ENV:Body>
|
13
|
+
<tns:paramsListOperation>
|
14
|
+
<listOperation>REMOVEFROMLIST</listOperation>
|
15
|
+
<strict>false</strict>
|
16
|
+
<listKey>
|
17
|
+
<keyType>MKTOLISTNAME</keyType>
|
18
|
+
<keyValue>foo_list</keyValue>
|
19
|
+
</listKey>
|
20
|
+
<listMemberList>
|
21
|
+
<leadKey>
|
22
|
+
<keyType>IDNUM</keyType>
|
23
|
+
<keyValue>1001086</keyValue>
|
24
|
+
</leadKey>
|
25
|
+
</listMemberList>
|
26
|
+
</tns:paramsListOperation>
|
27
|
+
</SOAP-ENV:Body>
|
28
|
+
</SOAP-ENV:Envelope>
|
29
|
+
|
30
|
+
D, [2014-09-16T16:50:43.513412 #30338] DEBUG -- : HTTPI POST request to 354-ESL-459.mktoapi.com (net_http)
|
31
|
+
I, [2014-09-16T16:50:43.894848 #30338] INFO -- : SOAP response (status 200)
|
32
|
+
D, [2014-09-16T16:50:43.895364 #30338] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
|
33
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
|
34
|
+
<SOAP-ENV:Body>
|
35
|
+
<ns1:successListOperation>
|
36
|
+
<result>
|
37
|
+
<success>true</success>
|
38
|
+
<statusList xsi:nil="true"/>
|
39
|
+
</result>
|
40
|
+
</ns1:successListOperation>
|
41
|
+
</SOAP-ENV:Body>
|
42
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
REQUEST:
|
2
|
+
|
3
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.marketo.com/mktows/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
5
|
+
<SOAP-ENV:Header>
|
6
|
+
<ns1:AuthenticationHeader>
|
7
|
+
<mktowsUserId>xxx</mktowsUserId>
|
8
|
+
<requestSignature>xxx</requestSignature>
|
9
|
+
<requestTimestamp>2014-07-23T16:53:18-05:00</requestTimestamp>
|
10
|
+
</ns1:AuthenticationHeader>
|
11
|
+
<ns1:MktowsContextHeader>
|
12
|
+
<targetWorkspace>Futures Institute</targetWorkspace>
|
13
|
+
</ns1:MktowsContextHeader>
|
14
|
+
</SOAP-ENV:Header>
|
15
|
+
<SOAP-ENV:Body>
|
16
|
+
<tns:paramsSyncLead>
|
17
|
+
<leadRecord>
|
18
|
+
<foreignSysPersonId>-2</foreignSysPersonId>
|
19
|
+
<Email>starlord@example.com</Email>
|
20
|
+
<leadAttributeList>
|
21
|
+
<attribute>
|
22
|
+
<attrName>FirstName</attrName>
|
23
|
+
<attrType>string</attrType>
|
24
|
+
<attrValue>Peter</attrValue>
|
25
|
+
</attribute>
|
26
|
+
<attribute>
|
27
|
+
<attrName>LastName</attrName>
|
28
|
+
<attrType>string</attrType>
|
29
|
+
<attrValue>Quill</attrValue>
|
30
|
+
</attribute>
|
31
|
+
<attribute>
|
32
|
+
<attrName>pants</attrName>
|
33
|
+
<attrType>string</attrType>
|
34
|
+
<attrValue>corduroy</attrValue>
|
35
|
+
</attribute>
|
36
|
+
</leadAttributeList>
|
37
|
+
</leadRecord>
|
38
|
+
<returnLead>true</returnLead>
|
39
|
+
</tns:paramsSyncLead>
|
40
|
+
</SOAP-ENV:Body>
|
41
|
+
</SOAP-ENV:Envelope>
|
42
|
+
|
43
|
+
|
44
|
+
RESPONSE:
|
45
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
46
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
|
47
|
+
<SOAP-ENV:Body>
|
48
|
+
<SOAP-ENV:Fault>
|
49
|
+
<faultcode>SOAP-ENV:Client</faultcode>
|
50
|
+
<faultstring>20105 - Unknown lead field</faultstring>
|
51
|
+
<detail>
|
52
|
+
<ns1:serviceException xmlns:ns1="http://www.marketo.com/mktows/">
|
53
|
+
<name>mktServiceException</name>
|
54
|
+
<message>syncLead operation failed: unknown fields for import: pants (20105)</message>
|
55
|
+
<code>20105</code>
|
56
|
+
</ns1:serviceException>
|
57
|
+
</detail>
|
58
|
+
</SOAP-ENV:Fault>
|
59
|
+
</SOAP-ENV:Body>
|
60
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
REQUEST:
|
2
|
+
|
3
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.marketo.com/mktows/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
|
5
|
+
<SOAP-ENV:Header>
|
6
|
+
<ns1:AuthenticationHeader>
|
7
|
+
<mktowsUserId>xxx</mktowsUserId>
|
8
|
+
<requestSignature>xxx</requestSignature>
|
9
|
+
<requestTimestamp>2014-07-23T16:48:03-05:00</requestTimestamp>
|
10
|
+
</ns1:AuthenticationHeader>
|
11
|
+
<ns1:MktowsContextHeader>
|
12
|
+
<targetWorkspace>Futures Institute</targetWorkspace>
|
13
|
+
</ns1:MktowsContextHeader>
|
14
|
+
</SOAP-ENV:Header>
|
15
|
+
<SOAP-ENV:Body>
|
16
|
+
<tns:paramsSyncLead>
|
17
|
+
<leadRecord>
|
18
|
+
<foreignSysPersonId>-1</foreignSysPersonId>
|
19
|
+
<Email>spiderman@example.com</Email>
|
20
|
+
<leadAttributeList>
|
21
|
+
<attribute>
|
22
|
+
<attrName>FirstName</attrName>
|
23
|
+
<attrType>string</attrType>
|
24
|
+
<attrValue>Peter</attrValue>
|
25
|
+
</attribute>
|
26
|
+
<attribute>
|
27
|
+
<attrName>LastName</attrName>
|
28
|
+
<attrType>string</attrType>
|
29
|
+
<attrValue>Parker</attrValue>
|
30
|
+
</attribute>
|
31
|
+
</leadAttributeList>
|
32
|
+
</leadRecord>
|
33
|
+
<returnLead>true</returnLead>
|
34
|
+
</tns:paramsSyncLead>
|
35
|
+
</SOAP-ENV:Body>
|
36
|
+
</SOAP-ENV:Envelope>
|
37
|
+
|
38
|
+
|
39
|
+
RESPONSE:
|
40
|
+
|
41
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
42
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">
|
43
|
+
<SOAP-ENV:Body>
|
44
|
+
<ns1:successSyncLead>
|
45
|
+
<result>
|
46
|
+
<leadId>1001064</leadId>
|
47
|
+
<syncStatus>
|
48
|
+
<leadId>1001064</leadId>
|
49
|
+
<status>CREATED</status>
|
50
|
+
<error xsi:nil="true"/>
|
51
|
+
</syncStatus>
|
52
|
+
<leadRecord>
|
53
|
+
<Id>1001064</Id>
|
54
|
+
<Email>spiderman@example.com</Email>
|
55
|
+
<ForeignSysPersonId xsi:nil="true"/>
|
56
|
+
<ForeignSysType xsi:nil="true"/>
|
57
|
+
<leadAttributeList>
|
58
|
+
<attribute>
|
59
|
+
<attrName>FirstName</attrName>
|
60
|
+
<attrType>string</attrType>
|
61
|
+
<attrValue>Peter</attrValue>
|
62
|
+
</attribute>
|
63
|
+
<attribute>
|
64
|
+
<attrName>LastName</attrName>
|
65
|
+
<attrType>string</attrType>
|
66
|
+
<attrValue>Parker</attrValue>
|
67
|
+
</attribute>
|
68
|
+
<attribute>
|
69
|
+
<attrName>Website</attrName>
|
70
|
+
<attrType>url</attrType>
|
71
|
+
<attrValue>example.com</attrValue>
|
72
|
+
</attribute>
|
73
|
+
</leadAttributeList>
|
74
|
+
</leadRecord>
|
75
|
+
</result>
|
76
|
+
</ns1:successSyncLead>
|
77
|
+
</SOAP-ENV:Body>
|
78
|
+
</SOAP-ENV:Envelope>
|
data/lib/markety.rb
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
require 'savon'
|
2
|
+
require 'logger'
|
2
3
|
require 'markety/authentication_header'
|
3
4
|
require 'markety/client'
|
5
|
+
require 'markety/command'
|
4
6
|
require 'markety/enums'
|
7
|
+
require 'markety/lead'
|
5
8
|
require 'markety/lead_key'
|
6
|
-
require 'markety/
|
9
|
+
require 'markety/response'
|
10
|
+
require 'markety/version'
|
11
|
+
|
12
|
+
|
13
|
+
# To use Markety, the first thing you need to do is call
|
14
|
+
# Markety.new_client(...)
|
15
|
+
# to create a Markety::Client object. It is through methods
|
16
|
+
# on this object that you will send requests to Marketo.
|
17
|
+
#
|
18
|
+
# The request methods are defined and documented in the
|
19
|
+
# Markety::Command modules, which are all <tt>include</tt>d
|
20
|
+
# and accessible from Markety::Client.
|
21
|
+
#
|
22
|
+
# Every Markety request method returns a Markety::Response of some sort.
|
23
|
+
# All responses derive from Markety::Response::GenericResponse, which exposes
|
24
|
+
# basic information about the request's success or failure.
|
25
|
+
# The information you really want is in the appropriate subclass, e.g.
|
26
|
+
#
|
27
|
+
# * Markety::Command::GetLead returns Markety::Response::GetLeadResponse
|
28
|
+
# * Markety::Command::ListOperation returns Markety::Response::ListOperationResponse
|
29
|
+
# ... and so on
|
30
|
+
module Markety
|
31
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Markety
|
2
|
-
# This class exists only to encapsulate the authentication header part of a soap request to
|
2
|
+
# This class exists only to encapsulate the authentication header part of a soap request to Marketo.
|
3
3
|
class AuthenticationHeader
|
4
|
-
DIGEST = OpenSSL::Digest::
|
4
|
+
DIGEST = OpenSSL::Digest::SHA1.new
|
5
5
|
|
6
6
|
def initialize(access_key, secret_key, time = DateTime.now)
|
7
7
|
@access_key = access_key
|
@@ -44,4 +44,4 @@ module Markety
|
|
44
44
|
OpenSSL::HMAC.hexdigest(DIGEST, @secret_key, string_to_encrypt)
|
45
45
|
end
|
46
46
|
end
|
47
|
-
end
|
47
|
+
end
|
data/lib/markety/client.rb
CHANGED
@@ -1,158 +1,52 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
api_version = options.fetch(:api_version, '2_3')
|
4
|
-
|
5
|
-
client = Savon.client do
|
6
|
-
endpoint end_point
|
7
|
-
wsdl "http://app.marketo.com/soap/mktows/#{api_version}?WSDL"
|
8
|
-
env_namespace "SOAP-ENV"
|
9
|
-
namespaces({"xmlns:ns1" => "http://www.marketo.com/mktows/"})
|
10
|
-
pretty_print_xml true
|
11
|
-
log false if options[:log] == false
|
12
|
-
end
|
13
|
-
|
14
|
-
Client.new(client, Markety::AuthenticationHeader.new(access_key, secret_key))
|
15
|
-
end
|
1
|
+
require 'markety/command'
|
2
|
+
require 'markety/response'
|
16
3
|
|
4
|
+
module Markety
|
5
|
+
# All of the Markety::Command modules are mixed in to Client, so see the documentation for those modules.
|
17
6
|
class Client
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
def set_logger(logger)
|
35
|
-
@logger = logger
|
36
|
-
end
|
37
|
-
|
38
|
-
def sync_lead(email, first, last, company, mobile)
|
39
|
-
lead_record = LeadRecord.new(email)
|
40
|
-
lead_record.set_attribute('FirstName', first)
|
41
|
-
lead_record.set_attribute('LastName', last)
|
42
|
-
lead_record.set_attribute('Email', email)
|
43
|
-
lead_record.set_attribute('Company', company)
|
44
|
-
lead_record.set_attribute('MobilePhone', mobile)
|
45
|
-
sync_lead_record(lead_record)
|
46
|
-
end
|
47
|
-
|
48
|
-
def sync_lead_record(lead_record)
|
49
|
-
begin
|
50
|
-
attributes = []
|
51
|
-
lead_record.each_attribute_pair do |name, value|
|
52
|
-
attributes << {attr_name: name, attr_value: value, attr_type: lead_record.get_attribute_type(name) }
|
53
|
-
end
|
54
|
-
|
55
|
-
response = send_request(:sync_lead, {
|
56
|
-
return_lead: true,
|
57
|
-
lead_record: {
|
58
|
-
email: lead_record.email,
|
59
|
-
lead_attribute_list: {
|
60
|
-
attribute: attributes
|
61
|
-
}
|
62
|
-
}
|
63
|
-
})
|
64
|
-
|
65
|
-
return LeadRecord.from_hash(response[:success_sync_lead][:result][:lead_record])
|
66
|
-
rescue Exception => e
|
67
|
-
@logger.log(e) if @logger
|
68
|
-
return nil
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def sync_lead_record_on_id(lead_record)
|
73
|
-
idnum = lead_record.idnum
|
74
|
-
raise 'lead record id not set' if idnum.nil?
|
75
|
-
|
76
|
-
begin
|
77
|
-
attributes = []
|
78
|
-
lead_record.each_attribute_pair do |name, value|
|
79
|
-
attributes << {attr_name: name, attr_value: value}
|
80
|
-
end
|
81
|
-
|
82
|
-
attributes << {attr_name: 'Id', attr_type: 'string', attr_value: idnum.to_s}
|
83
|
-
|
84
|
-
response = send_request(:sync_lead, {
|
85
|
-
return_lead: true,
|
86
|
-
lead_record:
|
87
|
-
{
|
88
|
-
lead_attribute_list: { attribute: attributes},
|
89
|
-
id: idnum
|
90
|
-
}
|
91
|
-
})
|
92
|
-
return LeadRecord.from_hash(response[:success_sync_lead][:result][:lead_record])
|
93
|
-
rescue Exception => e
|
94
|
-
@logger.log(e) if @logger
|
95
|
-
return nil
|
7
|
+
include Markety::Command::GetLead
|
8
|
+
include Markety::Command::SyncLead
|
9
|
+
include Markety::Command::ListOperation
|
10
|
+
|
11
|
+
attr_reader :target_workspace
|
12
|
+
|
13
|
+
def initialize(access_key, secret_key, end_point, options = {})
|
14
|
+
api_version = options.fetch(:api_version, '2_3')
|
15
|
+
|
16
|
+
@client = Savon.client do
|
17
|
+
endpoint end_point
|
18
|
+
wsdl "http://app.marketo.com/soap/mktows/#{api_version}?WSDL"
|
19
|
+
namespaces({"xmlns:ns1" => "http://www.marketo.com/mktows/"})
|
20
|
+
env_namespace "SOAP-ENV"
|
21
|
+
pretty_print_xml true
|
22
|
+
log false if options[:log] == false
|
96
23
|
end
|
97
|
-
end
|
98
24
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
def remove_from_list(list_name, idnum)
|
104
|
-
list_operation(list_name, ListOperationType::REMOVE_FROM, idnum)
|
105
|
-
end
|
106
|
-
|
107
|
-
def is_member_of_list?(list_name, idnum)
|
108
|
-
response = list_operation(list_name, ListOperationType::IS_MEMBER_OF, idnum)
|
109
|
-
return response[:success_list_operation][:result][:status_list][:lead_status][:status]
|
25
|
+
@auth_header = Markety::AuthenticationHeader.new(access_key, secret_key)
|
26
|
+
@client_options = {}
|
27
|
+
@client_options[:target_workspace] = options.has_key?(:target_workspace) ? options[:target_workspace] : {}
|
110
28
|
end
|
111
29
|
|
112
30
|
private
|
113
31
|
|
114
|
-
def
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
key_type: 'MKTOLISTNAME',
|
121
|
-
key_value: list_name
|
122
|
-
},
|
123
|
-
list_member_list: {
|
124
|
-
lead_key: [{
|
125
|
-
key_type: 'IDNUM',
|
126
|
-
key_value: idnum
|
127
|
-
}
|
128
|
-
]
|
129
|
-
}
|
130
|
-
})
|
131
|
-
return response
|
132
|
-
rescue Exception => e
|
133
|
-
@logger.log(e) if @logger
|
134
|
-
return nil
|
32
|
+
def send_request(cmd_type, message)
|
33
|
+
@auth_header.set_time(DateTime.now)
|
34
|
+
|
35
|
+
header_hash = @auth_header.to_hash
|
36
|
+
if cmd_type==:sync_lead && @target_workspace
|
37
|
+
header_hash.merge!({ "ns1:MktowsContextHeader"=>{"targetWorkspace"=>@target_workspace}})
|
135
38
|
end
|
136
|
-
end
|
137
39
|
|
138
|
-
def get_lead(lead_key)
|
139
40
|
begin
|
140
|
-
response =
|
141
|
-
|
142
|
-
|
143
|
-
@logger.log(e) if @logger
|
144
|
-
return nil
|
41
|
+
response = request(cmd_type, message, header_hash) #returns a Savon::Response
|
42
|
+
rescue Savon::SOAPFault => e
|
43
|
+
response = e
|
145
44
|
end
|
45
|
+
Markety::Response::ResponseFactory.create_response(cmd_type,response)
|
146
46
|
end
|
147
47
|
|
148
|
-
def
|
149
|
-
@
|
150
|
-
response = request(namespace, message, @header.to_hash)
|
151
|
-
response.to_hash
|
152
|
-
end
|
153
|
-
|
154
|
-
def request(namespace, message, header)
|
155
|
-
@client.call(namespace, message: message, soap_header: header)
|
48
|
+
def request(cmd_type, message, header)
|
49
|
+
@client.call(cmd_type, message: message, soap_header: header)
|
156
50
|
end
|
157
51
|
end
|
158
52
|
end
|