Business-US-USPS-WebTools

 view release on metacpan or  search on metacpan

lib/Business/US/USPS/WebTools/TrackConfirm.pm  view on Meta::CPAN

	my $ip     = $hash->{'ClientIp'} // '127.0.0.1';
	my $source = $hash->{'SourceId'} // __PACKAGE__;

	my $xml =
		qq|<TrackFieldRequest USERID="$user">| .
		qq|<Revision>1</Revision>|             .
		qq|<ClientIp><![CDATA[ $ip ]]></ClientIp>|     .
		qq|<SourceId><![CDATA[ $source ]]></SourceId>|      .
		qq|<TrackID ID="$id">|;

	foreach my $field ( $self->_fields ) {
		next if $field eq 'TrackID';
		next unless defined $hash->{$field};
		$xml .= "<$field>$$hash{$field}</$field>";
		}

	$xml .= qq|</TrackID></TrackFieldRequest>|;

	return $xml;
	}

=pod

	<TrackSummary>
	<EventTime>8:34 pm</EventTime>
	<EventDate>September 25, 2018</EventDate>
	<Event>Departed</Event>
	<EventCity>NEWARK</EventCity>
	<EventState /><EventZIPCode />
	<EventCountry>UNITED STATES</EventCountry>
	<FirmName />
	<Name />
	<AuthorizedAgent>false</AuthorizedAgent>
	<EventCode>AT</EventCode>
	</TrackSummary>"

=cut

sub _parse_response {
	my( $self ) = @_;

	my $res = $self->tx->result;

	my( $summary ) = $res->dom->at( 'TrackSummary' );
	my $details    = $res->dom->find( 'TrackDetail' );

	#my %hash = ();
	#$hash{'TrackSummary'} = $summary->to_string;

	my $summary_parsed = $self->_parse_subbits( $summary );

	my $array  = $details->map(
		sub { $self->_parse_subbits( $_ ) }
		)->to_array;

	unshift @$array, $summary_parsed;
	bless $array, ref $self; # 'Hash::AsObject';
	}

sub _parse_subbits {
	state $rc = require Hash::AsObject;
	state $fields = [ qw(
		EventTime EventDate Event EventCity EventState EventZIPCode
		EventCountry FirmName Name AuthorizedAgent
		) ];

	my( $self, $subbit ) = @_;

	my %hash;
	foreach my $field ( @$fields ) {
		my( $value ) = eval { $subbit->at( $field )->text };
		$hash{$field} = $value // '';
		}

	bless \%hash, 'Hash::AsObject';
	}

=item test_server_host

The testing API uses stg-production.shippingapis.com instead of the
usual testing server.

=cut

sub test_server_host { "stg-production.shippingapis.com" };
sub _api_path { "/ShippingAPI.dll" }


=back

=head1 TO DO

=head1 SEE ALSO

L<Business::US::USPS::WebTools>

The WebTools API is documented on the US Postal Service's website:

	https://www.usps.com/business/web-tools-apis/track-and-confirm-api.htm

=head1 SOURCE AVAILABILITY

This source is in GitHub:

	https://github.com/ssimms/business-us-usps-webtools

=head1 AUTHOR

brian d foy

=head1 MAINTAINER

Steve Simms

=head1 COPYRIGHT AND LICENSE

Copyright © 2020, Steve Simms. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the Artistic License 2.0.



( run in 0.514 second using v1.01-cache-2.11-cpan-39bf76dae61 )