I have tried above thing using PHP curl shell_exec commad but it isn't working:
$var = shell_exec('curl -u my@secureusername.com:mypassword -H "Content-Type: application/xml" -d"rahul1 rahul221286@gmail.com" -X POST http://pageinvasion.freshdesk.com/contacts.xml');
echo $var;
It shows blank page.
This should help you:
$urltopost = "https://$yourfreshdeskurl/contacts.xml";
$header[] = "Content-type: application/xml";
$ch = curl_init ($urltopost);
curl_setopt ($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_USERPWD, "$email:$password");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
$returndata = curl_exec ($ch);
This should get you authenticated and receive a response.
I coded create a ticket via API same as your source with java but I received error:
<!-- This file lives in public/500.html -->
<div class="dialog"> <h1>We're sorry, but something went wrong.</h1> <p>We've been notified about this issue and we'll take a look at it shortly.</p> </div>
Please help me
my source:
// Create an instance of
HttpClient. HttpClient client = new HttpClient();
// Create a method instance.
PostMethod method = new PostMethod("https://paygate.freshdesk.com/helpdesk/tickets.xml");
NameValuePair[] data = { new NameValuePair("username", "***@****.net"), new NameValuePair("password", "*****") };
method.setRequestBody(data);
method.addRequestHeader("Content-type", "application/xml");
// Execute the method.
int statusCode = client.executeMethod(method);
Thank you so much
Best Regards
The reason you may be seeing a blank page if you are using Junior Hemelaer's example is because it returns xml which will not render as visible text in a browser. try viewing the source or changing xml to json to see the results!
I have a repo here which provides a simple freshdesk wrapper: Most of the methods are geared around solutions. But, extending for other objects would be really easy.
https://github.com/blak3r/freshdesk-solutions
Here's the simple rest wrapper function in particular:
/**
* @param $urlMinusDomain - should start with /... example /solutions/categories.xml
* @param $method - should be either GET, POST, PUT (and theoretically DELETE but that's untested).
* @param string $postData - only specified if $method == POST or PUT
* @param $debugMode {bool} optional - prints the request and response with headers
* @return the raw response
*/
private function restCall($urlMinusDomain, $method, $postData = '',$debugMode=false) {
$url = "https://{$this->domain}$urlMinusDomain";
//print "REST URL: " . $url . "\n";
$header[] = "Content-type: application/xml";
$ch = curl_init ($url);
if( $method == "POST") {
if( empty($postData) ){
$header[] = "Content-length: 0"; // <-- seems to be unneccessary to specify this... curl does it automatically
}
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postData);
}
else if( $method == "PUT" ) {
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "PUT" );
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postData);
}
else if( $method == "DELETE" ) {
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "DELETE" ); // UNTESTED!
}
else {
curl_setopt ($ch, CURLOPT_POST, false);
}
curl_setopt($ch, CURLOPT_USERPWD, "{$this->username}:{$this->password}");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
if( $debugMode ) {
// CURLOPT_VERBOSE: TRUE to output verbose information. Writes output to STDERR,
// or the file specified using CURLOPT_STDERR.
curl_setopt($ch, CURLOPT_VERBOSE, true);
$verbose = fopen('php://temp', 'rw+');
curl_setopt($ch, CURLOPT_STDERR, $verbose);
}
$returndata = curl_exec ($ch);
if( $debugMode ) {
!rewind($verbose);
$verboseLog = stream_get_contents($verbose);
print $verboseLog;
}
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// curl_close($http);
if( !preg_match( '/2\d\d/', $http_status ) ) {
print "ERROR: HTTP Status Code == " . $http_status . " (302 also isn't an error)\n";
}
// print "\n\nREST RESPONSE: " . $returndata . "\n\n";
return $returndata;
}