first crack at payment processing with self-service (step two of the process)
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index c750ada..2ce55a8 100644 (file)
@@ -167,7 +167,7 @@ sub payment_info {
   };
 
   my $_date = time;
-  $return{paybatch} = 'webui-MyAccount-$_date-$$-". rand() * 2**32
+  $return{paybatch} = "webui-MyAccount-$_date-$$-". rand() * 2**32;
 
   return { 'error' => '',
            %return,
@@ -175,6 +175,43 @@ sub payment_info {
 
 };
 
+sub make_payment{
+  my $p = shift;
+
+  my $session = $cache->get($p->{'session_id'})
+    or return { 'error' => "Can't resume session" }; #better error message
+
+  my %return;
+
+  my $custnum = $session->{'custnum'};
+
+  my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+    or return { 'error' => "unknown custnum $custnum" };
+
+  if ( $p->{'save'} ) {
+    my $new = new FS::cust_main { $cust_main->hash };
+    $new->set( $_ => $p->{$_} )
+      foreach qw( payname address1 address2 city state zip payinfo );
+    $new->set( 'paydate' => $p->{'month'}. '-'. $p->{'year'} );
+    $new->set( 'payby' => $p->{'auto'} ? 'CARD' : 'DCRD' );
+    my $error = $new->replace($cust_main);
+    return { 'error' => $error } if $error;
+    $cust_main = $new;
+  }
+
+  my $error = $cust_main->realtime_bop( 'CC', $p->{'amount'}, quiet=>1,
+    'paydate' => $p->{'month'}. '-'. $p->{'year'},
+    map { $_ => $p->{$_} }
+      qw( payname address1 address2 city state zip payinfo )
+  );
+  return { 'error' => $error } if $error;
+
+  $cust_main->apply_payments;
+
+  return { 'error' => '' };
+
+}
+
 sub invoice {
   my $p = shift;
   my $session = $cache->get($p->{'session_id'})