OneShopAPI.pm

From Developer's API

(Difference between revisions)
m (Updated xlink subroutine to include parameter hash)
(Included api_paramter_add, api_parameter_remove and api_parameter_build)
Line 13: Line 13:
 
_merchant_key => $current_merchant_key, # constructor parameter two, optional, merchant api access key
 
_merchant_key => $current_merchant_key, # constructor parameter two, optional, merchant api access key
 
_api_uri => $current_api_uri, # constructor parameter three, optional, api uri
 
_api_uri => $current_api_uri, # constructor parameter three, optional, api uri
 +
_api_parameters => {Key => $current_merchant_key},
 
_ua => undef,
 
_ua => undef,
 
_api_request => undef,
 
_api_request => undef,
Line 19: Line 20:
 
$self->{_ua} = LWP::UserAgent->new();
 
$self->{_ua} = LWP::UserAgent->new();
 
return(bless($self, $class));
 
return(bless($self, $class));
 +
}
 +
 +
sub api_parameter_add
 +
{
 +
my ($self,$current_key,$current_value) = @_;
 +
# add parameter
 +
$self->{_api_parameters}->{$current_key} = $current_value;
 +
print "adding parameter $current_key with value of $current_value\n";
 +
}
 +
 +
sub api_parameter_delete
 +
{
 +
my ($self,$current_key) = @_;
 +
delete($self->{_api_parameters}->{$current_key});
 +
}
 +
 +
sub api_parameter_build
 +
{
 +
my ($self,$current_response_body) = @_;
 +
my @current_results = ();
 +
if(@current_results = ($current_response_body =~ /\s*<NextRecordSet>(?:\s*<\w+>[^<>]*<\/\w+>\s*)*<\/NextRecordSet>/g))
 +
{
 +
my $current_buffer = @current_results[0];
 +
$current_buffer =~ s/\s*<[\/]?NextRecordSet>//g;
 +
if(@current_results = ($current_response_body =~ /\s*<(\w+)>\s*([^<>]*)<\/\1>\s*/g))
 +
{
 +
for(my $current_index = 0;$current_index < scalar(@current_results);$current_index += 2)
 +
{
 +
@current_results[$current_index + 1] =~ s/^\s+//g;
 +
$self->api_parameter_add(@current_results[$current_index],@current_results[$current_index + 1]);
 +
}
 +
}
 +
}
 
}
 
}
  
Line 33: Line 67:
 
sub api_request
 
sub api_request
 
{
 
{
my ($self, $current_method, $current_parameters) = @_;
+
my ($self, $current_method) = @_;
 
my $current_uri = $self->{_api_uri} . '/API/' . $self->{_merchant_id} . $current_method;
 
my $current_uri = $self->{_api_uri} . '/API/' . $self->{_merchant_id} . $current_method;
my $current_request_body = $self->create_request_xml();
+
my $current_request_body = $self->create_request_xml($self->{_api_parameters});
 
my $current_response = $self->send_https_request($current_uri,$current_request_body);
 
my $current_response = $self->send_https_request($current_uri,$current_request_body);
 
return($current_response);
 
return($current_response);
Line 43: Line 77:
 
{
 
{
 
my ($self, $current_parameters) = @_;
 
my ($self, $current_parameters) = @_;
my $current_request_body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Request>\n\t<Key>" . $self->{_merchant_key} . "</Key>\n" . $self->parse_api_parameters($current_parameters) . "</Request>";
+
my $current_request_body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Request>\n" . $self->parse_api_parameters($current_parameters) . "</Request>";
 
return($current_request_body);
 
return($current_request_body);
 
}
 
}

Revision as of 20:08, 28 May 2008

package OneShopAPI;
use LWP::UserAgent;
use strict;

sub new
{
	my ($self,$current_merchant_id,$current_merchant_key,$current_api_uri) = @_;
	my $class = ref($self) || $self;
	my $self = 
	{
		_merchant_id => $current_merchant_id, # constructor parameter one, optional, merchant identification number
		_merchant_key => $current_merchant_key,	# constructor parameter two, optional, merchant api access key
		_api_uri => $current_api_uri, # constructor parameter three, optional, api uri
		_api_parameters => {Key => $current_merchant_key},
		_ua => undef,
		_api_request => undef,
		_api_response => undef
	};
	$self->{_ua} = LWP::UserAgent->new();
	return(bless($self, $class));
}

sub api_parameter_add
{
	my ($self,$current_key,$current_value) = @_;
	# add parameter
	$self->{_api_parameters}->{$current_key} = $current_value;
	print "adding parameter $current_key with value of $current_value\n";
}

sub api_parameter_delete
{
	my ($self,$current_key) = @_;
	delete($self->{_api_parameters}->{$current_key});
}

sub api_parameter_build
{
	my ($self,$current_response_body) = @_;
	my @current_results = ();
	if(@current_results = ($current_response_body =~ /\s*<NextRecordSet>(?:\s*<\w+>[^<>]*<\/\w+>\s*)*<\/NextRecordSet>/g))
	{
		my $current_buffer = @current_results[0];
		$current_buffer =~ s/\s*<[\/]?NextRecordSet>//g;
		if(@current_results = ($current_response_body =~ /\s*<(\w+)>\s*([^<>]*)<\/\1>\s*/g))
		{
			for(my $current_index = 0;$current_index < scalar(@current_results);$current_index += 2)
			{
				@current_results[$current_index + 1] =~ s/^\s+//g;
				$self->api_parameter_add(@current_results[$current_index],@current_results[$current_index + 1]);
			}
		}
	}
}

sub send_https_request
{
	my ($self, $current_uri, $current_request_body) = @_;
	$self->{_api_request} = HTTP::Request->new(POST => $current_uri);
	$self->{_api_request}->header("Content-Type" => "text/xml");
	$self->{_api_request}->content($current_request_body);
	$self->{_api_response} = $self->{_ua}->request($self->{_api_request});	
	return($self->{_api_response}->content());
}

sub api_request
{
	my ($self, $current_method) = @_;
	my $current_uri = $self->{_api_uri} . '/API/' . $self->{_merchant_id} . $current_method;
	my $current_request_body = $self->create_request_xml($self->{_api_parameters});
	my $current_response = $self->send_https_request($current_uri,$current_request_body);
	return($current_response);
}

sub create_request_xml
{
	my ($self, $current_parameters) = @_;
	my $current_request_body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Request>\n" . $self->parse_api_parameters($current_parameters) . "</Request>";
	return($current_request_body);
}

sub parse_api_parameters
{
	my ($self,$current_parameters) = @_;
	my $current_xml_parameters = "\t";
	while(my ($current_key,$current_value) = each(%{$current_parameters}))
	{
		$current_xml_parameters .= "<" . $current_key . ">" . $current_value . "</" . $current_key . ">\n\t"
	}	
	$current_xml_parameters = substr($current_xml_parameters,0,-1);
	return($current_xml_parameters);
}

sub xlink_api_request
{
	my ($self,$current_xlink,$current_parameters) = @_;
	my $current_request_body = $self->create_request_xml($current_parameters);
	my $current_response = $self->send_https_request($current_xlink,$current_request_body);
	return($current_response);
}

sub get_orders_list
{
	my ($self) = @_;
	return($self->api_request("/ORDERS/LIST"));
}

sub get_order_by_id
{
	my ($self,$current_order_id) = @_;
	return($self->api_request("/ORDERS/" . $current_order_id . "/READ"));
}

sub get_products_list
{
	my ($self) = @_;
	return($self->api_request("/PRODUCTS/LIST"));
}

sub get_product_by_id
{
	my ($self,$current_product_id) = @_;
	return($self->api_request("/PRODUCTS/" . $current_product_id . "/READ"));
}

sub get_clients_list
{
	my ($self) = @_;
	return($self->api_request("/CLIENTS/LIST"));
}

sub get_client_by_id
{
	my ($self,$current_client_id) = @_;
	return($self->api_request("/CLIENTS/" . $current_client_id . "/READ"));
}

sub get_errors_list
{
	my ($self) = @_;
	return($self->api_request("/ERRORS/LIST"));
}

sub get_available_api_methods
{
	my ($self) = @_;
	return($self->api_request(""));
}

my $VALID_PERL_MODULE = 1;
return $VALID_PERL_MODULE;