Jump to content
Sign in to follow this  
amedeo

API AddOrder returns NULL (PHP)

Recommended Posts

Hi,

I wrote an PHP utility for importing domains from an old administrative panel. The utility creates new order then confirm it. We were using nicIT for .it domains and ascio for the others tld; all worked fine, A few days ago we added internetbs and now when trying to create the order for .com domains (still managed by ascio) the AddOrder API returns a null response although the order is created and left in 'pending' status. With .it domains still works fine.

Any idea ? is it possible to get a sort of log where to look for the reason the API call does not work properly ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Cubeboy
      this is a snippet of my quote/contract script
      it seems to know the recurring but not the onetime, it shows the "unit price" but no the "total price
      I need to have the one time and payments show up in the contract
      the 2 hooks you need to add in
      //term is the call 
      // 1 displays the number of months
      [term: 1]
      [recur:36]
      <?php
      $pdf->Image(ROOTDIR.'/assets/img/rwclogo.png', 63,10,75,'c');
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',11);
      $pdf->Cell(175,40,"CONTRACT FOR $subject ONLINE MARKETING SERVICES",25,1,'C');
      $total_onetime = 0;
      $total_recur = array();
      foreach ($lineitems AS $item) {
       
      $description = $item["description"]; 

      # find term 
      $matches = array();
      preg_match('/\[term:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $term = ''; 
      }
      else { 
      $term = strtolower(trim($matches[1])); 
      $description = str_replace($matches[0], '', $description); 
      }

      # find recur 
      $matches = array();
      preg_match('/\[recur:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $recur = ''; 
      }
      else { 
      $recur = strtolower(trim($matches[1])); 
      $description = trim(str_replace($matches[0], '', $description)); 
      }

      # get unit price and total price 
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['unitprice'], $matches); 
      $item_unitprice = (float)$matches[0];
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['total'], $matches); 
      $item_total = (float)$matches[0];
       
      # add onetime and recurring totals
       
      if ($recur == '') { 
      $total_onetime += $item_total; 
      }
      else { 
      if (!array_key_exists($recur, $total_recur)) { 

      $total_recur[$recur] = 0; 
      }

      $total_recur[$recur] += $item_total; 
      }
      }
      $pdf->SetFont('freesans','B',9);
      if ($total_onetime > 0) { 
      }
      foreach (array('monthly', 'quarterly', 'semi-annually', 'annually', 'biennially') as $recur) { 
      if (isset($total_recur[$recur]) && $total_recur[$recur] > 0) { 
      }
      unset($total_recur[$recur]);
      }
      # any remaining recurs
      foreach ($total_recur as $recur => $amount) { 
      }
      #==========================================================================
      # determine weather to show the ONE TIME payment or not
      #if ( $total_onetime < 100 ) {
      #$ot_show = false;
      #} 
      #else {
      #$ot_show = true;
      #}

      #==========================================================================
      # determines weather or not to split the initial payment in half
      #if ( $total_onetime >= 10000 ) {
      #$bulk = $total_onetime / 2;
      #$addtl_payment_msg = 'and the second half of $' .$bulk. ', will be due within 60 days. ';
      #} else {
      #$bulk = $total_onetime;
      #$addtl_payment_msg = '';
      }
      #==========================================================================
      #calculate One time payment using monthly pymts as a varible
      #==========================================================================
      #$otpp = ( $total_recur[$recur] * $recur );
      #$ots = ( $otpp * .1);
      #$ots = round( $ots, 2, PHP_ROUND_HALF_UP );
      #$otp = $otpp - ($otpp * .1);
      #$otp = round( $otp, 2, PHP_ROUND_HALF_UP );
      #==========================================================================
      #calculate One time payment and monthly payment to come up with a total
      #$totalot = ( $total_recur[$recur] * $recur + $bulk );
      #$totalot10 = ( $totalot - $ots );
      #==========================================================================
      $pdf->SetDrawColor(255);
      $pdf->SetFillColor(255);
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Authorization:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,C); 
      $pdf->MultiCell(170,5,"
      This document defines the TERMS AND CONDITIONS (T&C) of our working relationship. All projects or services (“the work”) that AGENCY (or “we”) RWC ME 04401 may be contracted to produce or provide for CLIENT ($clientsdetails[companyname]) will be subject to and you the undersigned agree to the following:
      The CLIENT authorizes the AGENCY access CLIENT's current website, webhost, and all digital materials to transfer as needed from the CLIENT for the purposes of completeing the work on the domain $subject. The CLIENT authorizes use of CLIENT's logo and all brand identification in the creation of the website. The CLIENT understands they are entering into a$pdf->Cell $recur month contract with THE AGENCY.    
      The Agency will only begin work after CLIENT’s approval of the project authorization to proceed,(ATP) and the terms and conditions,(T&C) and after receipt of payment of the initial invoice $".$total_onetime.  ". Your signature/execution of the ATP and the T&C will constitute an AGREEMENT between us. 
                                                                                                                       ");
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Description of the work:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,"$notes",0,1,'C');

      if ($proposal) {
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Installment Plan:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,$proposal                  );
      }
      $pdf->AddPage();
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Approvals:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,"
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Additions and Alterations:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,C); 
      $pdf->MultiCell(170,5,"                              ");
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Payments:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,"The AGENCY is providing Online Marketing Services in advance of total payment. The CLIENT will have an initial down payment of $" . $bulk . ". that is due at the signing of this contract, " .$addtl_payment_msg. "Then an ongoing payment of $pdf->Cell $$total_recur[$recur], on a monthly basis for the following$pdf->Cell $recur months, starting from the date of signing this agreement.                                " );
      $pdf->MultiCell(170,5,"");
      $pdf->AddPage();
      $pdf->Image(ROOTDIR.'/assets/img/rwclogo.png', 63,10,75,'c');
      $pdf->SetFont('freesans','B',11);
      $pdf->Ln();

      $pdf->SetFont('freesans','B',9);
      $pdf->Ln();
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(39,5,"");
      $pdf->Ln();
      $pdf->SetFont('freesans','B',9);
      $pdf->SetDrawColor(200);
      $pdf->SetFillColor(239);
      $pdf->SetFont('freesans','',9);
      $pdf->Cell(10,6,"Qty",1,0,'C','1');
      $pdf->Cell(80,6,"Description",1,0,'C','1');
      $pdf->Cell(20,6,"Recur",1,0,'C','1');
      $pdf->Cell(20,6,"Term",1,0,'C','1');
      $pdf->Cell(20,6,"Unit Price",1,0,'C','1');
      $pdf->Cell(20,6,"Total",1,0,'C','1');
      $pdf->Ln();
      $pdf->SetFont('freesans','B',9);
      $total_onetime = 0;
      $total_recur = array();
      foreach ($lineitems AS $item) {
       
      $description = $item["description"]; 
      #==========================================================================
      # find term 
      #==========================================================================
      $matches = array();
      preg_match('/\[term:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $term = ''; 
      }
      else { 
      $term = strtolower(trim($matches[1])); 
      $description = str_replace($matches[0], '', $description); 
      }
      #==========================================================================
      # find recur 
      #==========================================================================
      $matches = array();
      preg_match('/\[recur:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $recur = ''; 
      }
      else { 
      $recur = strtolower(trim($matches[1])); 
      $description = trim(str_replace($matches[0], '', $description)); 
      }
      #==========================================================================
      # get unit price and total price 
      #==========================================================================
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['unitprice'], $matches); 
      $item_unitprice = (float)$matches[0];
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['total'], $matches); 
      $item_total = (float)$matches[0];
      #==========================================================================
      # add onetime and recurring totals
      #========================================================================== 
      if ($recur == '') { 
      $total_onetime += $item_total; 
      }
      else { 
      if (!array_key_exists($recur, $total_recur)) { 

      $total_recur[$recur] = 0; 
      }

      $total_recur[$recur] += $item_total; 
      }
      #==========================================================================
      # display line items
      #==========================================================================
      $numlines = ceil(strlen($description)/55); 
      $cellheight = $numlines * 8;
      $pdf->MultiCell(10,$cellheight,$item["qty"],1,'C','',0);
      $pdf->MultiCell(80,$cellheight,$description,1,'L','',0);
      $pdf->MultiCell(20,$cellheight,$recur,'1','C','',0);
      $pdf->MultiCell(20,$cellheight,$term,'1','C','',0);
      $pdf->MultiCell(20,$cellheight,sprintf('$%.2f',$item_unitprice),1,'C','',0);
      $pdf->MultiCell(20,$cellheight,sprintf('$%.2f',$item_total),1,'C','',1);
      }
      $pdf->SetFont('freesans','B',9);
      /*
      $pdf->Cell(145,6,"Subtotal",1,0,'R','1');
      $pdf->Cell(25,6,$currencysymbol.$subtotal,1,0,'C','1');
      $pdf->Ln();
      if ($taxlevel1["rate"]>0) {
          $pdf->Cell(145,6,$taxlevel1["name"]." @ ".$taxlevel1["rate"]."%",1,0,'R','1');
          $pdf->Cell(25,6,$currencysymbol.$tax1,1,0,'C','1');
          $pdf->Ln();
      }
      if ($taxlevel2["rate"]>0) {
          $pdf->Cell(145,6,$taxlevel2["name"]." @ ".$taxlevel2["rate"]."%",1,0,'R','1');
          $pdf->Cell(25,6,$currencysymbol.$tax2,1,0,'C','1');
          $pdf->Ln();
      }
      $pdf->Cell(145,6,"Total",1,0,'R','1');
      $pdf->Cell(25,6,$currencysymbol.$total,1,0,'C','1');
      $pdf->Ln();
      */
      if ($total_onetime > 0) { 
      $pdf->Cell(150,6,'Pre-Pay',1,0,'R',1);
      $pdf->Cell(20,6,sprintf('$%.2f',$total_onetime),1,0,'C',1);
      $pdf->Ln();
      }
      foreach (array('monthly', 'quarterly', 'semi-annually', 'annually', 'biennially') as $recur) { 
      if (isset($total_recur[$recur]) && $total_recur[$recur] > 0) { 
      $pdf->Cell(150,6,ucfirst($recur) . ' Monthly Payments',1,0,'R',1);

      $pdf->Cell(20,6,sprintf('$%.2f',$total_recur[$recur]),1,0,'C',1);

      $pdf->Ln();
      }
      unset($total_recur[$recur]);
      }
      #==========================================================================
      # any remaining recurs
      #==========================================================================
      foreach ($total_recur as $recur => $amount) { 
      $pdf->Cell(150,6,ucfirst($recur) . ' Monthly Payments',1,0,'R',1); 
      $pdf->Cell(20,6,sprintf('$%.2f',$amount),1,0,'C',1);
      $pdf->Ln();
      }

      $pdf->SetFont('freesans','',9,l);
      $pdf->MultiCell(170,5,"
       
       
    • By ramf
      Hi,
      I want to send a ticket reply to the client using API.
      when I use the  AddTicketReply the new replay is added to the ticket - as if the client sent us a reply, But I want to send the reply to the client.
      Can you please advise what is the API command / documentation to send a reply to the client from the ticket (not an email - but with the ticket, it is just like the AddTicketReply is working but from us to the client and not fro, the client to us).
      Thanks!
      Ram
    • By Mathys
      Hello,
      I am having a problem with the "eNom" domain registry.
      Basically I tried to connect with the API everything is functional but when I want to switch to "Test mode" I have this error message: "Bad User name or Password Your changes have not been saved."
      However, I followed the tutorial on this page to put it in Test mode: https://docs.whmcs.com/Enom
       
      Thanks in advance to everyone who will help me

    • By JesusSuarz
      while working with the api I realized that getproducts (https://developers.whmcs.com/api-reference/getproducts/) does not bring up the field to know if the product is active or not.
      I saw someone post a similar idea several years ago: 
       
      so with a little engineer I made my own version of getproducts and uploaded it to /includes/api/
      Request Parameters "GetProductsActive"
      Parameter Type Description Required action string “GetProductsActive” Required pid int string Obtain a specific product id configuration. Can be a list of ids comma separated gid int Retrieve products in a specific group id Optional         Response Parameters
      Parameter Type Description result string The result of the operation: success or error totalresults int The total number of results available startnumber int The starting number for the returned results numreturned int The number of results returned products array An array of products matching the criteria passed I will leave the file called: getproductsactive.php
      however this may throw an api error, you have to give access in the table tblapi_roles in database, in the field: permissions add: ,"getproductsactive": 1 before closing }, This modification is due to WHMCS not showing the files added in includes/api as a role. (I do not know why).
      With this you can get the field: hidden which defines 0 if it is visible and 1 if it is hidden. (true or false also works)
      my code is a copy of includes/api/getproduct.php just add to show the hidden field (, "hidden" => $data["hidden"]), this would have been easier if WHMCS implemented it, it only took me 2 minutes to show this field.
       
      <?php if (!defined("WHMCS")) { exit("This file cannot be accessed directly"); } if (!function_exists("getCustomFields")) { require ROOTDIR . "/includes/customfieldfunctions.php"; } if (!function_exists("getCartConfigOptions")) { require ROOTDIR . "/includes/configoptionsfunctions.php"; } global $currency; $currency = getCurrency(); $pid = $whmcs->get_req_var("pid"); $gid = $whmcs->get_req_var("gid"); $module = $whmcs->get_req_var("module"); $where = array(); if ($pid) { if (is_numeric($pid)) { $where[] = "tblproducts.id=" . (int) $pid; } else { $pids = array(); foreach (explode(",", $pid) as $p) { $p = (int) trim($p); if ($p) { $pids[] = $p; } } if ($pids) { $where[] = "tblproducts.id IN (" . implode(",", $pids) . ")"; } } } if ($gid) { $where[] = "gid=" . (int) $gid; } if ($module && preg_match("/^[a-zA-Z0-9_\\.\\-]*\$/", $module)) { $where[] = "servertype='" . db_escape_string($module) . "'"; } $result = select_query("tblproducts", "tblproducts.*", implode(" AND ", $where), "tblproductgroups`.`order` ASC, `tblproductgroups`.`id` ASC, `tblproducts`.`order` ASC, `tblproducts`.`id", "ASC", "", "tblproductgroups ON tblproducts.gid = tblproductgroups.id"); $apiresults = array("result" => "success", "totalresults" => mysql_num_rows($result)); while ($data = mysql_fetch_array($result)) { $pid = $data["id"]; $productarray = array("pid" => $data["id"], "gid" => $data["gid"], "type" => $data["type"], "name" => $data["name"], "description" => $data["description"], "module" => $data["servertype"], "paytype" => $data["paytype"], "hidden" => $data["hidden"]); if ($language = $whmcs->get_req_var("language")) { $productarray["translated_name"] = WHMCS\Product\Product::getProductName($data["id"], $data["name"], $language); $productarray["translated_description"] = WHMCS\Product\Product::getProductDescription($data["id"], $data["description"], $language); } if ($data["stockcontrol"]) { $productarray["stockcontrol"] = "true"; $productarray["stocklevel"] = $data["qty"]; } $result2 = select_query("tblpricing", "tblcurrencies.code,tblcurrencies.prefix,tblcurrencies.suffix,tblpricing.msetupfee,tblpricing.qsetupfee,tblpricing.ssetupfee,tblpricing.asetupfee,tblpricing.bsetupfee,tblpricing.tsetupfee,tblpricing.monthly,tblpricing.quarterly,tblpricing.semiannually,tblpricing.annually,tblpricing.biennially,tblpricing.triennially", array("type" => "product", "relid" => $pid), "code", "ASC", "", "tblcurrencies ON tblcurrencies.id=tblpricing.currency"); while ($data = mysql_fetch_assoc($result2)) { $code = $data["code"]; unset($data["code"]); $productarray["pricing"][$code] = $data; } $customfieldsdata = array(); $customfields = getCustomFields("product", $pid, "", "", "on"); foreach ($customfields as $field) { $customfieldsdata[] = array("id" => $field["id"], "name" => $field["name"], "description" => $field["description"], "required" => $field["required"]); } $productarray["customfields"]["customfield"] = $customfieldsdata; $configoptiondata = array(); $configurableoptions = getCartConfigOptions($pid, array(), "", "", "", true); foreach ($configurableoptions as $option) { $options = array(); foreach ($option["options"] as $op) { $pricing = array(); $result4 = select_query("tblpricing", "code,msetupfee,qsetupfee,ssetupfee,asetupfee,bsetupfee,tsetupfee,monthly,quarterly,semiannually,annually,biennially,triennially", array("type" => "configoptions", "relid" => $op["id"]), "", "", "", "tblcurrencies ON tblcurrencies.id=tblpricing.currency"); while ($oppricing = mysql_fetch_assoc($result4)) { $currcode = $oppricing["code"]; unset($oppricing["code"]); $pricing[$currcode] = $oppricing; } $options["option"][] = array("id" => $op["id"], "name" => $op["name"], "rawName" => $op["rawName"], "recurring" => $op["recurring"], "required" => $op["required"], "pricing" => $pricing); } $configoptiondata[] = array("id" => $option["id"], "name" => $option["optionname"], "type" => $option["optiontype"], "options" => $options); } $productarray["configoptions"]["configoption"] = $configoptiondata; $apiresults["products"]["product"][] = $productarray; } $responsetype = "xml"; ?> Hope this helps others to show the field they need to show files and hidden products.
       
      getproductsactive.php
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated