|  | 
Chilkat  HOME  Android™  AutoIt  C  C#  C++  Chilkat2-Python  CkPython  Classic ASP  DataFlex  Delphi DLL  Go  Java  Node.js  Objective-C  PHP Extension  Perl  PowerBuilder  PowerShell  PureBasic  Ruby  SQL Server  Swift  Tcl  Unicode C  Unicode C++  VB.NET  VBScript  Visual Basic 6.0  Visual FoxPro  Xojo Plugin
| (PHP ActiveX) Egyptian eReceipt OAuth2 Client CredentialsSee more Egypt eReceipt ExamplesGet an OAuth2 access token for the Egyptian eReceipt REST API using client credentials (no interactivity with a web browser required).Note: This example requires Chilkat v11.0.0 or greater. For more information, see https://sdk.invoicing.eta.gov.eg/ereceiptapi/01-authenticate-pos/ 
 <?php $success = 0; // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. $http = new COM("Chilkat.Http"); // Note: Any provider of a REST API, such as the Egyptian government in this case, can make life // much easier for developers by providing one or more of the following in the API documentation: // // 1) A sample CURL statement for each API call. // 2) A Postman collection, or Swagger/OpenAPI specification file. // 3) A sample of a raw HTTP request and response for each API call. // // The sample CURL statements or raw HTTP request/responses do not need to comprehensively show all // possible options. Providing a sample allows one to quickly make a successful API call. // It also allows for code generation directly from the CURL, Postman collection, or raw request/response, // and it tends to answer all questions about the format/structure of a request that, suprisingly, // remain ambiguous or not obvious in other forms of documentation. $req = new COM("Chilkat.HttpRequest"); $req->AddParam('grant_type','client_credentials'); // Use your actual client ID and client secret... $req->AddParam('client_id','d0394a9f-0607-40de-a978-2d3eb8375b04'); $req->AddParam('client_secret','6d62315e-d65a-4e41-9112-4195ea834edf'); $req->AddHeader('posserial','1234567899'); $req->AddHeader('pososversion','os'); $req->AddHeader('posmodelframework','1'); $req->AddHeader('presharedkey','03ac674216f3e1...'); // When writing this example, the documentation at https://sdk.invoicing.eta.gov.eg/ereceiptapi/01-authenticate-pos/ // shows us the HTTP verb and path (POST /connect/token), however, // we don't see the actual domain where the request is to be sent. // What are the endpoints??? // It took some searching, but we found some endpoints here: https://sdk.invoicing.eta.gov.eg/faq/ // It's not immediately apparent which endpoint is to be used with a given API call. // Why not just include the endpoint in the documentation for each REST API call? // Endpoints are literally the #1 thing that needs to be known. // They can't just be buried in a FAQ. They should be up-front and obvious. // // So.. we're guessing the endpoint is likely "https://invoicing.eta.gov.eg/connect/token" $req->HttpVerb = 'POST'; $req->ContentType = 'application/x-www-form-urlencoded'; $resp = new COM("Chilkat.HttpResponse"); $success = $http->HttpReq('https://invoicing.eta.gov.eg/connect/token',$req,$resp); if ($success == 0) { print $http->LastErrorText . "\n"; exit; } $sbResponseBody = new COM("Chilkat.StringBuilder"); $resp->GetBodySb($sbResponseBody); $jResp = new COM("Chilkat.JsonObject"); $jResp->LoadSb($sbResponseBody); $jResp->EmitCompact = 0; print 'Response Body:' . "\n"; print $jResp->emit() . "\n"; $respStatusCode = $resp->StatusCode; print 'Response Status Code = ' . $respStatusCode . "\n"; if ($respStatusCode >= 400) { print 'Response Header:' . "\n"; print $resp->Header . "\n"; print 'Failed.' . "\n"; exit; } // If successful, the OAuth2 access token JSON looks like this: // { // "token_type": "Bearer", // "access_token": "eyJraW......R2sbqrY", // "expires_in": "3600", // "scope": "..." // } $token_type = $jResp->stringOf('token_type'); $access_token = $jResp->stringOf('access_token'); $expires_in = $jResp->stringOf('expires_in'); $scope = $jResp->stringOf('scope'); ?> | ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.