1

Based on the answer provided in this post - my actual code follows -,

$myClient = new ET_Client(true, true);
$authStub = $myClient;
$url = "https://www.exacttargetapis.com/address/v1/validateEmail";
$props = array("email" => $EmailAddress, "validators" => array("SyntaxValidator", "MXValidator", "ListDetectiveValidator"));

$return = new ET_PostRest($authStub, $url, $props);

var_export($return);
exit();

I am getting the following response

ET_PostRest::__set_state(array(
   'status' => false,
   'code' => 401,
   'message' => NULL,
   'results' => 
  stdClass::__set_state(array(
     'documentation' => 'https://code.docs.exacttarget.com/rest/errors/403',
     'errorcode' => 0,
     'message' => 'Not Authorized',
  )),
   'request_id' => NULL,
   'moreResults' => NULL,
))

SOAP based calls are working fine, so I must be missing something with the REST Auth.

1

ET_PostRest is after the point in the process where the access_token is applied to the request so it would need to be applied manually.

Where is current says: $url = "https://www.exacttargetapis.com/address/v1/validateEmail";

Replace it with: $url = "https://www.exacttargetapis.com/address/v1/validateEmail?access_token=".$authStub->getAuthToken();

4
  • I guess that means the SDK doesn't handle REST token management then yet? I thought since i was setting up a new ET_Client and passing $authStub it would be taken care of. I didn't see it applied in the class anywhere but I also don't know what the ?legacy=1 that does get added does. – James Mar 12 '14 at 12:11
  • oops, wasn't reading your post correctly and didn't realize the authToken was coming from $authStub – James Mar 12 '14 at 12:16
  • if i make the request too often (less than 5 minutes) then i get Fatal error: Uncaught exception 'Exception' with message 'Unable to validate App Keys(ClientID/ClientSecret) provided.: Unable to validate App Keys(ClientID/ClientSecret) provided, requestToken response:{"additionalErrors":null,"documentation":"http:\/\/jssvc-s1.xt.local:80\/AuthService\/v1\/requestToken?legacy=1","errorcode":1,"field":null,"fieldErrors":null,"message":"Unauthorized","objectErrors":null,"path":null,"validationErrors":null}' in /ET_Client.php on line 107 – James Mar 12 '14 at 12:27
  • i realize this is still under development and i built my own class before i knew this existed, but I'd still like to understand the SDK for REST as much as possible – James Mar 12 '14 at 12:30
0

Why not just improving the Class ET_PostRest? (that does actually ignore the param authStub... why?)

<?php
class ET_PostRest extends ET_Constructor {
    function __construct(ET_Client $authStub, $url, $props) {

        $query = parse_url($url, PHP_URL_QUERY);

        $url .= !empty($query)?'&':'?';
        $url .= 'access_token='.$authStub->getAuthToken();

        $restResponse = restPost($url, json_encode($props));            
        parent::__construct($restResponse->body, $restResponse->httpcode, true);                            
    }
}

.... Usage:

<?php     
 $myclient = new ET_Client();
 $props = array("email" => $email, "validators" => array("SyntaxValidator", "MXValidator", "ListDetectiveValidator"));

 $return = new ET_PostRest($myclient, $url, $props);

 var_dump($return);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.