cancel
Showing results for 
Search instead for 
Did you mean: 

problem when parsing customerPaymentProfileId in a GetCustomerProfile response

Hello!

 

I am using CIM from a Ruby on Rails app (Rails 3.1, ruby 1.9.2). I am currently using the sample code to call CreateProfile and GetCustomerProfile. I am working with the test api, and am successfully creating user profiles, sending them to you guys to enter their credit card, and receiving the user back when they complete that process.

 

I am having trouble parsing the customerPaymentProfileId  out of the XML response for GetCustomerProfile. My code for this, which is a shamless edit of the sample code:

 

  def GetCustomerProfile(profileId) # returns paymentProfileId
    paymentProfileId = ''
    Rails.logger.debug
    Rails.logger.debug '---------------------'
    Rails.logger.debug 'Getting Customer Profile ...'
    xml = SetApiAuthentication($xmlGetCustomerProfile)
    xml = xml.sub('@profileId@', profileId)
    doc = SendXml(xml)
    success = IsSuccess(doc)
    if !success
      PrintErrors(doc)
    else
      Rails.logger.debug doc.root
      paymentProfileId = REXML::XPath.first(doc.root, '/*/customerPaymentProfileId').text
      Rails.logger.debug
      Rails.logger.debug 'New customerPaymentProfileId = ' + paymentProfileId
    end
    return paymentProfileId
  end

 

Watching the logs, I see the response arrive intact. The response passes muster in the IsSuccess() function. I can see the customerPaymentProfileId in there:

 

<?xml version="1.0" encoding="utf-8"?>
<getCustomerProfileResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">

<messages>
  <resultCode>Ok</resultCode>
  <message>
    <code>I00001</code>
    <text>Successful.</text>
  </message>
</messages>
<profile>  
  <merchantCustomerId>3333</merchantCustomerId>
  <description>some description</description>          
  <email>m33333n@gmail.com</email> 
  <customerProfileId>5332967</customerProfileId>
  <paymentProfiles>
    <customerPaymentProfileId>4720154</customerPaymentProfileId>
    <payment>
      <creditCard>
        <cardNumber>XXXX0002</cardNumber>
        <expirationDate>XXXX</expirationDate>
      </creditCard>
    </payment>
  </paymentProfiles>
</profile>
</getCustomerProfileResponse>

 

This is returning nil:

 

REXML::XPath.first(doc.root, '/*/customerPaymentProfileId')

 

Yet that exact sytax succeeds earlier when processing CreateProfile, in the provided sample code:

 

  def CreateProfile(email) # returns profileId
    profileId = ''
    Rails.logger.debug
    Rails.logger.debug '---------------------'
    Rails.logger.debug 'Creating Customer Profile with email = ' + email + ' ...'
    xml = SetApiAuthentication($xmlCreateProfile)
    xml = xml.sub('@email@', email)
    doc = SendXml(xml)
    success = IsSuccess(doc)
    if !success
      PrintErrors(doc)
    else
      profileId = REXML::XPath.first(doc.root, '/*/customerProfileId').text
      Rails.logger.debug
      Rails.logger.debug 'New customerProfileId = ' + profileId
    end
    return profileId
  end

 

Lovely, eh? Any suggestions, fine peoples?

 

thx!

Mike

muldoon99
Member
1 REPLY 1

Fixed!

 

I did not understand how to navigate the XML correctly. Nesting matters, of course. The correct syntax is:

 

REXML::XPath.first(doc.root, '/*/profile/paymentProfiles/customerPaymentProfileId')

 
Please move along. 

muldoon99
Member