File Coverage

blib/lib/Payvment/Facebook/API.pm
Criterion Covered Total %
statement 12 70 17.1
branch 0 14 0.0
condition 0 9 0.0
subroutine 4 14 28.5
pod 2 3 66.6
total 18 110 16.3


line stmt bran cond sub pod time code
1             package Payvment::Facebook::API;
2            
3 1     1   13997 use warnings;
  1         3  
  1         38  
4 1     1   6 use strict;
  1         2  
  1         31  
5 1     1   15026 use LWP::UserAgent;
  1         106206  
  1         48  
6 1     1   8669 use Data::Dumper;
  1         12998  
  1         2191  
7            
8             =head1 NAME
9            
10             Payvment::API - Payvment Facebook API
11            
12             =head1 VERSION
13            
14             Version 0.01
15            
16             =head1 SYNOPSIS
17            
18             This module presents an easy to use Payvment API for Creating a webstore on Facebook.
19            
20             Pl. have a look at scripts in the folder for more details
21            
22             use Payvment::Facebook::API;
23             use Data::Dumper;
24             use DBI;
25             use DBD::mysql;
26            
27             my $xml = "product";
28             my $operation = "generatexml";
29            
30             my $infile={product=>'productout.xml',
31             product_status => 'productoutstatus.xml'
32             };
33            
34             my $pfapi = Payvment::Facebook::API->new(
35             'payvment_id' => '', # Enter values here
36             'payvment_api_key' => '' # Enter values here
37             );
38            
39             if ( $operation eq 'generatexml' ) {
40             open FILE, ">".$infile->{$xml};
41            
42             $pfapi->generate_xml(
43             'method' => $xml,
44             'type' => 'header',
45             'filehandle' => *FILE
46             );
47            
48            
49             my $images = [];
50            
51             # push @$images, $image_url; #repeat this
52            
53             $pfapi->generate_xml(
54             'method' => 'product',
55             'type' => 'body',
56             'filehandle' => *FILE,
57             name => $row->{name},
58             description => $row->{description},
59             price => $row->{price},
60             currency => $row->{currency},
61             qty => $row->{qty},
62             enable_additional_qty => $row->{enable_additional_qty},
63             weight => $row->{weight},
64             weight_unit => $row->{weight_unit},
65             sku => $row->{sku},
66            
67             images => $images,
68             new_state => $row->{new_state},
69             tags => $row->{tags},
70             is_taxable => $row->{is_taxable},
71             categories => $row->{ppcategories},
72             client_category_name => $row->{client_category_name}
73             );
74             }
75            
76             $pfapi->generate_xml(
77             'method' => 'product',
78             'type' => 'footer',
79             'filehandle' => *FILE
80             );
81            
82             close FILE;
83             print "done create xml";
84            
85            
86             } elsif ( $operation eq 'submit' ) {
87            
88             open FILE, "<".$infile->{$xml} or die"cannt open file";
89            
90             my $cont = $pfapi->submitxml(
91             'method' => $xml,
92             'filehandle' => *FILE
93             );
94             my $user = "dbuser";
95             my $pass = 'password';
96             my $dsn = 'dbi:mysql:db:localhost:3306';
97             my $dbh = DBI->connect( $dsn, $user, $pass )
98             or die "Can't connect to the DB: $DBI::errstr\n";
99            
100             my $query =
101             "insert into payvment_requests(pr_responsecont,pr_dated,pr_type) values(?, now(),?)";
102             my $sth = $dbh->prepare($query);
103             $sth->bind_param( 1, $cont->{cont} );
104             $sth->bind_param( 2, $xml );
105             $sth->execute;
106            
107             close FILE or die"";
108             print "done submit xml";
109             }
110            
111            
112            
113            
114             =head1 FUNCTIONS
115            
116             =head2 new
117            
118             =cut
119            
120             our $VERSION = '0.01';
121            
122             sub new {
123 0     0 1   my $self = shift;
124 0           my %options = @_;
125 0           my %url = (
126             'urlproduct' => 'https://api.payvment.com/1/admin/products/import',
127             'urlproduct_status' => 'https://api.payvment.com/1/admin/status/import'
128             );
129 0           my $options = {
130             "payvment_id" => $options{payvment_id},
131             "payvment_api_key" => $options{'payvment_api_key'},
132             %url
133            
134             };
135 0           my $obj = bless $options, $self;
136             }
137            
138             sub submitxml {
139 0     0 1   my ( $self, %options ) = @_;
140             return {
141 0           'err' => 1,
142             'message' => 'Found incompatible method ' . $options{'method'}
143             }
144 0 0         if ( !grep { $_ eq $options{'method'} }
145             ( 'product', 'product_status', 'order', 'update_inventory' ) );
146 0           my $ua = LWP::UserAgent->new;
147            
148             # $ua->timeout(10);
149            
150 0           my $filecont = "";
151 0           my $cont;
152 0           while ( read( $options{filehandle}, $cont, 1000 ) ) {
153 0           $filecont .= $cont;
154             }
155            
156 0           my $req = HTTP::Request->new( POST => $self->{ 'url' . $options{method} } );
157 0           $req->authorization_basic( $self->{payvment_id},
158             $self->{payvment_api_key} );
159 0           $req->content_type('application/x-www-form-urlencoded');
160             #print $filecont;
161 0           $req->content($filecont);
162            
163 0           my $res = $ua->request($req);
164 0 0         if ( $res->is_success ) {
165 0           return { 'err' => 0, cont => $res->decoded_content };
166             }
167             else {
168 0           return { 'err' => 1, cont => $res->status_line };
169             }
170            
171             # $self->_submitxml(%options);
172             }
173            
174             sub generate_xml {
175 0     0 0   my ( $self, %options ) = @_;
176            
177             return {
178 0           'err' => 1,
179             'message' => 'Found incompatible method ' . $options{'method'}
180             }
181 0 0         if ( !grep { $_ eq $options{'method'} }
182             ( 'product', 'product_status', 'order', 'update_inventory' ) );
183            
184 0           return { 'err' => 1, 'message' => 'Found incompatible type' }
185 0 0         if ( !grep { $_ eq $options{'type'} } ( 'header', 'body', 'footer' ) );
186            
187 0 0 0       $self->_generate_product_xml_header(%options)
188             if $options{'type'} eq "header" && $options{method} eq "product";
189            
190 0 0 0       $self->_generate_product_xml_body(%options)
191             if $options{'type'} eq "body" && $options{method} eq "product";
192            
193 0 0 0       $self->_generate_product_xml_footer(%options)
194             if $options{'type'} eq "footer" && $options{method} eq "product";
195 0           return { err => 0 };
196             }
197            
198             sub _generate_product_xml_header {
199 0     0     my ( $self, %options ) = @_;
200 0           print "hi";
201            
202             #print Dumper %options;
203 0           print { $options{filehandle} }
  0            
204             "\n"
205             . "\n"
206             . "\n"
207             . ""
208             . $self->{payvment_id}
209             . "\n"
210             . "1.x"
211             . "XML\n"
212             . "\n"
213             . "\n";
214             }
215            
216             sub _generate_product_xml_body {
217 0     0     my ( $self, %options ) = @_;
218 0           print { $options{filehandle} } "\n" . ""
  0            
219             . _cdata( $options{"name"} )
220             . "\n"
221             . ""
222             . _cdata( $options{"description"} )
223             . "\n"
224             . ""
225             . _escapexml( $options{"price"} )
226             . "\n"
227             . ""
228             . _escapexml( $options{"currency"} )
229             . "\n" . ""
230             . _escapexml( $options{"qty"} )
231             . "\n"
232             . ""
233             . _escapexml( $options{"enable_additional_qty"} )
234             . "\n"
235             . ""
236             . _escapexml( $options{"weight"} )
237             . "\n"
238             . ""
239             . _escapexml( $options{"weight_unit"} )
240             . "\n" . ""
241             . _cdata( $options{"sku"} )
242             . "\n"
243             . ""
244             . $self->_print_images( 'images' => $options{'images'} )
245             . ""
246            
247             . ""
248             . _escapexml( $options{"new_state"} )
249             . "\n"
250             . ""
251             . _cdata( $options{"tags"} )
252             . "\n"
253             . ""
254             . _escapexml( $options{"is_taxable"} )
255             . "\n"
256             . ""
257            
258             . $self->_print_categories( 'categories' => $options{'categories'} )
259             . ""
260             . ""
261             . _cdata( $options{"client_category_name"} )
262             . "\n"
263             ."UPS"
264             . "\n";
265            
266             }
267            
268             sub _generate_product_xml_footer {
269 0     0     my ( $self, %options ) = @_;
270            
271 0           print { $options{filehandle} } "\n";
  0            
272            
273             }
274            
275             sub _print_categories {
276 0     0     my ( $self, %options ) = @_;
277 0           my $ret;
278 0           foreach my $cat ( split( /\,/, $options{categories} ) ) {
279 0           $ret .= "" . _escapexml($cat) . "\n";
280             }
281 0           return $ret;
282             }
283            
284             sub _print_images {
285 0     0     my ( $self, %options ) = @_;
286 0           my $ret;
287 0           foreach my $img ( @{ $options{images} } ) {
  0            
288 0           $ret .= "" . _escapexml($img) . "\n";
289            
290             }
291 0           return $ret;
292             }
293            
294             sub _escapexml {
295 0     0     my ($var) = @_;
296 0           $var =~ s/
297 0           $var =~ s/>/>/isg;
298 0           $var =~ s/&/&/isg;
299 0           return $var;
300             }
301            
302             sub _cdata {
303 0     0     my ($var) = @_;
304 0           return "";
305             }
306            
307             #notes: Generate XML. Product, UpdateInventory,Product Status, Order. - SubmitXML to Paymemnt
308            
309             =head1 AUTHOR
310            
311             "abhishek jain", C<< <"goyali at cpan.org"> >>
312            
313             =head1 BUGS
314            
315             Please report any bugs or feature requests directly to the author at C<< <"goyali at cpan.org"> >>
316            
317            
318            
319             =head1 SUPPORT
320            
321             You can find documentation for this module with the perldoc command.
322            
323             perldoc Payvment::Facebook::API
324            
325             You can also email the author and rest assured of the reply
326            
327             =head1 COPYRIGHT & LICENSE
328            
329             Copyright 2011 "abhishek jain".
330            
331             Licence This is free software; you can redistribute it and/or modify it under
332             the same terms as the Perl 5 programming language system itself.
333            
334             =head1 DESCRIPTION
335            
336             This API lets one to list products and sell on facebook using the Payvment Facebook App.
337            
338             At the moment these methods are implemented:
339            
340             =over 4
341            
342             =item C
343            
344             A constructor
345            
346            
347             =item C
348             As in Synopsis.
349            
350             =item C
351             As in Synopsis.
352            
353             =back
354            
355             =head1 NOTE:
356            
357             This module is provided as is, and is still underdevelopment, not suitable for Production use.
358            
359             Virus free , Spam Free , Spyware Free Software and hopefully Money free software .
360            
361             For more details on payvment visit http://www.payvment.com
362            
363             =head1 AUTHOR
364            
365            
366             goyali at cpan.org
367            
368             =head1 SEE ALSO
369            
370             http://www.ejain.com
371            
372             http://www.payvment.com
373            
374             =cut
375            
376             1;