<?php
$envoice_email = 'solutions.forever108@gmail.com'; //'rminfrastructure28@gmail.com';
$envoice_username = 'API_ankitinfra'; //'mastergst';
$envoice_password = 'Vikas@3486'; //'Malli#123';
$envoice_ip_address = '223.190.90.5';
$envoice_client_id = 'dd469fbc-0aff-4f93-a59f-ebd43b2c5a31'; //'33a2b516-a950-48de-94aa-a195bc29b1fc';
$envoice_client_secret = '5b9685e8-b64b-420e-9fe6-5c36130929ef'; //'f330f682-4735-4658-9a0b-31d8676d8c8e';
$envoice_gstin = '06AHZPY7204N2Z8';   // '29AABCT1332L000';

date_default_timezone_set("Asia/Kolkata"); 

// step 1 authenticate
$uri = 'https://api.mastergst.com/einvoice/authenticate?email='.$envoice_email;

$ch = curl_init($uri);
curl_setopt_array($ch, array(
    CURLOPT_HTTPHEADER  => array("email:$envoice_email","username: $envoice_username", "password: $envoice_password", "ip_address: $envoice_ip_address", "client_id: $envoice_client_id", "client_secret:$envoice_client_secret","gstin:$envoice_gstin"),
    CURLOPT_RETURNTRANSFER  =>true,
    CURLOPT_VERBOSE     => 1
));
$out = curl_exec($ch);

$info = curl_getinfo($ch);
$response_str = $out;
 
curl_close($ch);
$result = json_decode($out,true);
$envoice_AuthToken = $result['data']['AuthToken'];
$sek= $result['data']['Sek'];
$token_expire = $result['data']['TokenExpiry'];
//print_r($result); 


/*--------------------------------step 2 post data----------------------------*/
$docinv = "test".$challan_bill_no_prefix.$challan_number;
$invoice_edate = date('d/m/Y',strtotime($edate));
 $envoice_data = ' {
  "Version": "1.1",
   "email": "'.$envoice_email.'",
  "TranDtls": {
    "TaxSch": "GST",
    "SupTyp": "B2B",
    "RegRev": "N",
    "EcmGstin": null,
    "IgstOnIntra": "N"
  },
  "DocDtls": {
    "Typ": "INV",
    "No": "'.$docinv.'",
    "Dt": "'.$invoice_edate.'"
  },
  "SellerDtls": {
    "Gstin": "'.$envoice_gstin.'",
    "LglNm": "$company_name",
    "TrdNm": "'.$company_name.'",
    "Addr1": "'.$company_address1.'",
    "Addr2": "'.$company_address2.'   ",
    "Loc": "Gurgaon",
    "Pin": 122004,
    "Stcd": "06",
    "Ph": "9000000000",
    "Em": "abc@gmail.com"
  },
  "BuyerDtls": {
    "Gstin": "'.$gst.'",
    "LglNm": "$client_name",
    "TrdNm": "'.$client_name.'",
    "Pos": "06",
    "Addr1": "'.$client_corr_address1.'",
    "Addr2": "   ",
    "Loc": "Gurgaon",
    "Pin": 122004,
    "Stcd": "06",
    "Ph": "9000000000",
    "Em": "abc@gmail.com"
  },
  "DispDtls": {
    "Nm": "ABC company pvt ltd",
    "Addr1": "7th block, kuvempu layout",
    "Addr2": "kuvempu layout",
    "Loc": "Gurgaon",
    "Pin": 122004,
    "Stcd": "06"
  },
  "ShipDtls": {
    "Gstin":  "'.$gst.'",
    "LglNm": "'.$client_name.'",
    "TrdNm": "'.$client_name.'",
    "Addr1": "'.$site_address.'",
    "Addr2": "   ",
    "Loc": "Gurgaon",
    "Pin": 122004,
    "Stcd": "06"
  },
  "ItemList": [
    {
      "SlNo": "1",
      "IsServc": "N",
      "PrdDesc": "'.$grade_name.'",
      "HsnCd": "38245010",
      "Barcde": "000000",
      "BchDtls": {
        "Nm": "123456",
        "Expdt": "01/08/2020",
        "wrDt": "01/09/2020"
      },
      "Qty": '.$qty.',
      "FreeQty": 0,
      "Unit": "NOS",
      "UnitPrice": '.$rate.',
      "TotAmt":'.$basic_rate.',
      "Discount": 0,
      "PreTaxVal": 1,
      "AssAmt":'.$basic_rate.',
      "GstRt": '.$gst_rate.',
      "SgstAmt":'.$sgst.',
      "IgstAmt":'.$igst.',
      "CgstAmt": '.$cgst.',
      "CesRt": 0,
      "CesAmt": 0,
      "CesNonAdvlAmt": 0,
      "StateCesRt": 0,
      "StateCesAmt": 0,
      "StateCesNonAdvlAmt": 0,
      "OthChrg": 0,
      "TotItemVal":'.$total.',
      "OrdLineRef": "3256",
      "OrgCntry": "AG",
      "PrdSlNo": "12345",
      "AttribDtls": [
        {
          "Nm": "'.$grade_name.'",
          "Val": "0"
        }
      ]
    }
  ],
  "ValDtls": {
    "AssVal": '.$basic_rate.',
    "CgstVal":'.$cgst.',
    "SgstVal":'.$sgst.',
    "IgstVal": '.$igst.',
    "CesVal": 0,
    "StCesVal": 0,
    "Discount": 0,
    "OthChrg": 0,
    "RndOffAmt": 0.3,
    "TotInvVal": '.$total.',
    "TotInvValFc": '.$total.'
  },
  "PayDtls": {
    "Nm": "ABCDE",
    "Accdet": "5697389713210",
    "Mode": "Cash",
    "Fininsbr": "SBIN11000",
    "Payterm": "100",
    "Payinstr": "Gift",
    "Crtrn": "test",
    "Dirdr": "test",
    "Crday": 100,
    "Paidamt": 0,
    "Paymtdue": '.$total.'
  },
  "RefDtls": {
    "InvRm": "TEST",
    "DocPerdDtls": {
      "InvStDt": "01/08/2020",
      "InvEndDt": "01/09/2020"
    },
    "PrecDocDtls": [
      {
        "InvNo": "'.$docinv.'",
        "InvDt": "'.$invoice_edate.'",
        "OthRefNo": "123456"
      }
    ],
    "ContrDtls": [
      {
        "RecAdvRefr": "DOC/002",
        "RecAdvDt": "01/08/2020",
        "Tendrefr": "Abc001",
        "Contrrefr": "Co123",
        "Extrefr": "Yo456",
        "Projrefr": "Doc-456",
        "Porefr": "Doc-789",
        "PoRefDt": "01/08/2020"
      }
    ]
  },
  "AddlDocDtls": [
    {
      "Url": "https://einv-apisandbox.nic.in",
      "Docs": "Test Doc",
      "Info": "Document Test"
    }
  ],
  "ExpDtls": {
    "ShipBNo": "A-248",
    "ShipBDt": "01/08/2020",
    "Port": "INABG1",
    "RefClm": "N",
    "ForCur": "AED",
    "CntCode": "AE"
  },
  "EwbDtls": {
    "Transid": "12AWGPV7107B1Z1",
    "Transname": "XYZ EXPORTS",
    "Distance": 100,
    "Transdocno": "DOC01",
    "TransdocDt": "01/08/2020",
    "Vehno": "ka123456",
    "Vehtype": "R",
    "TransMode": "1"
  }
} '; 

 $post_data = $envoice_data;
// print_r($post_data);
 
 
 // Prepare new cURL resource
  $crl = curl_init('https://api.mastergst.com/einvoice/type/GENERATE/version/V1_03?email='.$envoice_email);
  curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($crl, CURLINFO_HEADER_OUT, true);
  curl_setopt($crl, CURLOPT_POST, true);
  curl_setopt($crl, CURLOPT_POSTFIELDS, $post_data);
  
  //for debug only!
   curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);
    
  // Set HTTP Header for POST request 
  curl_setopt($crl, CURLOPT_HTTPHEADER, array(
      "content-type: application/json;charset=UTF-8",
      "email:$envoice_email",
      "ip_address: $envoice_ip_address",
      "client_id: $envoice_client_id",
      "client_secret:$envoice_client_secret",
      "username: $envoice_username",
      "auth-token:$envoice_AuthToken",
      "gstin:$envoice_gstin"
      
       )
  );
    
  // Submit the POST request
  $result = curl_exec($crl); 
  //print_r($result); 
  // Close cURL session handle
  curl_close($crl); 
  $result1 = json_decode($result,true); 
 $envoice_irn = $result1['data']['Irn'];

 
 /*------------------------------------------- get invoice details--------------------------------------*/
 
 // step 3 get inv details
$uri = 'https://api.mastergst.com/einvoice/type/GETIRN/version/V1_03?param1='.$envoice_irn.'&email='.$envoice_email;

$ch = curl_init($uri);
curl_setopt_array($ch, array(
    CURLOPT_HTTPHEADER  => array("username: $envoice_username", "ip_address: $envoice_ip_address", "client_id: $envoice_client_id", "client_secret:$envoice_client_secret","gstin:$envoice_gstin","auth-token:$envoice_AuthToken"),
    CURLOPT_RETURNTRANSFER  =>true,
    CURLOPT_VERBOSE     => 1
));
$out = curl_exec($ch);

$info = curl_getinfo($ch);
$response_str = $out;

curl_close($ch);
$result = json_decode($out,true); 

//print_r($result); 

$invoicedata = $result['data']['SignedInvoice'];
$qrcode_invoice = $result['data']['SignedQRCode'];
$ack_no = $result['data']['AckNo'];
$ack_date = $result['data']['AckDt'];
$irn = $result['data']['Irn'];
$key = $sek;  
 
// set variable
$ins_envoice_ackno = $ack_no;
$ins_envoice_ack_date = $ack_date;
$ins_envoice_irn = $irn;
$ins_envoice_signed_qr = $qrcode_invoice;
  
?>