amazon-pay-sdk-ruby icon indicating copy to clipboard operation
amazon-pay-sdk-ruby copied to clipboard

AmazonPay::Response#get_element error

Open RockLeeNaruto92 opened this issue 7 years ago • 0 comments

Problem

Source code of method AmazonPay::Response#get_element is:

def get_element(xpath, xml_element)
  xml = self.to_xml
  xml.elements.each(xpath) do |element|
    @value = element.elements[xml_element].text
  end
  return @value
end

Above source code will run wrong in below case:

GetOrderReferenceDetails response:

<GetOrderReferenceDetailsResponse xmlns="http://mws.amazonservices.com/schema/OffAmazonPayments/2013-01-01">
  <GetOrderReferenceDetailsResult>
    <OrderReferenceDetails>
      <OrderReferenceStatus>
        <LastUpdateTimestamp>2017-07-13T04:56:08.046Z</LastUpdateTimestamp>
        <State>Open</State>
      </OrderReferenceStatus>
      <Destination>
        <DestinationType>Physical</DestinationType>
        <PhysicalDestination>
          <StateOrRegion>Tokyo</StateOrRegion>
          <City>Ota-ku</City>
          <Phone>09056412829</Phone>
          <CountryCode>JP</CountryCode>
          <PostalCode>0600001</PostalCode>
          <Name>JP APA test test1</Name>
          <AddressLine1>1-17-25 Shinkamata</AddressLine1>
        </PhysicalDestination>
      </Destination>
      <ExpirationTimestamp>2018-01-09T04:55:21.829Z</ExpirationTimestamp>
      <PlatformId>A3QCQLYZKBHFRS</PlatformId>
      <IdList>
        <member>S03-4685906-3575244-A052252</member>
      </IdList>
      <SellerOrderAttributes>
        <StoreName>default name</StoreName>
        <SellerOrderId>ON-170713015605-000-000006</SellerOrderId>
      </SellerOrderAttributes>
      <OrderTotal>
        <CurrencyCode>JPY</CurrencyCode>
        <Amount>1939.00</Amount>
      </OrderTotal>
      <Buyer>
        <Name>TEST NAME</Name>
        <Email>[email protected]</Email>
      </Buyer>
      <ReleaseEnvironment>Sandbox</ReleaseEnvironment>
      <AmazonOrderReferenceId>S03-4685906-3575244</AmazonOrderReferenceId>
      <CreationTimestamp>2017-07-13T04:55:21.829Z</CreationTimestamp>
      <RequestPaymentAuthorization>false</RequestPaymentAuthorization>
    </OrderReferenceDetails>
  </GetOrderReferenceDetailsResult>
  <ResponseMetadata>
    <RequestId>6a46dc4d-8892-495f-80d1-bfe7ae1b95ba</RequestId>
  </ResponseMetadata>
</GetOrderReferenceDetailsResponse>

Above response does not contain constrains element. But when call:

GET_ORDER_REFERENCE_STATUS_XPATH = "GetOrderReferenceDetailsResponse/GetOrderReferenceDetailsResult/OrderReferenceDetails/OrderReferenceStatus"
GET_ORDER_REFERENCE_CONSTRAINTS_XPATH = "GetOrderReferenceDetailsResponse/GetOrderReferenceDetailsResult/OrderReferenceDetails/Constraints/Constraint"

CONSTRAINT_ID_ELEMENT = "ConstraintID"
STATE_ELEMENT = "State"


status = response.get_element(GET_ORDER_REFERENCE_STATUS_XPATH, STATE_ELEMENT)

→ "Open"

constraint_id = response.get_element(GET_ORDER_REFERENCE_CONSTRAINTS_XPATH, CONSTRAINT_ID_ELEMENT)
→ "Open"

In above case, we expect constraint_id is nil, but its value still is Open.

Fixed

I was fixed it and sent pull request.

https://github.com/amzn/amazon-pay-sdk-ruby/pull/12

Please check it!

RockLeeNaruto92 avatar Jul 13 '17 05:07 RockLeeNaruto92