I'm using https://github.com/saurabhsahni/php-yahoo-oauth2/blob/master/YahooOAuth2.class.php
Using this example I'm able to create and get Objects (create campaign, retrieve campaign) but not able to do Operations like Update and delete.
I'm getting missing fields error as it's taking it as POST call. For Update / delete I need to make PUT request.
So for that I've added in the following case in YahooOAuth2.class.php file
if($method)
{
curl_setopt($curl, CURLOPT_PUT, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: PUT'));
}
Here is the complete function
public function fetch($url, $postdata = "", $auth = "", $headers = "", $method="")
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //Temporarily added to disable authenticity of the peer's certificate
if ($postdata) {
if($method)
{
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_PUT, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: PUT'));
}
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
} else {
curl_setopt($curl, CURLOPT_POST, false);
}
if ($auth) {
curl_setopt($curl, CURLOPT_USERPWD, $auth);
}
if ($headers) {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
if (empty($response)) {
// some kind of an error happened
die(curl_error($curl));
curl_close($curl); // close cURL handler
} else {
$info = curl_getinfo($curl);
curl_close($curl); // close cURL handler
if ($info['http_code'] != 200 && $info['http_code'] != 201) {
echo "Received error: " . $info['http_code']. "\n";
echo "Raw response:".$response."\n";
die();
}
}
return $response;
}
When I run the file I'm getting the following response
object(stdClass)#2 (3) { ["errors"]=> array(1) { [0]=> object(stdClass)#3 (4) { ["errIndex"]=> int(-1) ["code"]=> string(28) "E10000_INTERNAL_SERVER_ERROR" ["message"]=> string(12) "invalid JSON" ["description"]=> string(0) "" } } ["response"]=> NULL ["timestamp"]=> string(18) "2015-07-20 6:21:14" }
It's working fine for create and retrieve but not for update and delete.
Here is the example file to make Update Campaign.
<?php
require "YahooOAuth2.class.php";
#Your Yahoo API consumer key & secret with access to Gemini data
define("CONSUMER_KEY","sdfsadfw23r23423rsdf--");
define("CONSUMER_SECRET","234234sdfwr");
$redirect_uri="http://".$_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
$gemini_api_endpoint="https://api.admanager.yahoo.com/v1/rest";
//$gemini_api_endpoint="https://sandbox-api.admanager.yahoo.com/v1/rest";
$oauth2client=new YahooOAuth2();
if (isset($_GET['code'])){
$code=$_GET['code'];
}
else {
$code=0;
}
if($code){
$token=$oauth2client->get_access_token(CONSUMER_KEY,CONSUMER_SECRET,$redirect_uri,$code);
$headers= array('Authorization: Bearer '.$token,'Accept: application/json','Content-Type: application/json');
$url=$gemini_api_endpoint."/campaign/";
$data = array("id"=>12356,"budget"=> 500);
$postdata = json_encode($data);
$method = "PUT";
$resp=$oauth2client->fetch($method, $url,$postdata,$auth="",$headers);
$jsonResponse = json_decode( $resp);
var_dump($jsonResponse);
}
else {
# no valid access token available, go to authorization server
header("HTTP/1.1 302 Found");
header("Location: " . $oauth2client->getAuthorizationURL(CONSUMER_KEY,$redirect_uri));
exit;
}
?>
Any help would be much appreciated.
Is there any method to do Update/delete operations or did I miss anything from above? I found no example from Yahoo Gemini Documentation for Updating Objects
Finally I've ended up like this. In the YahooOAuth2.class.php file . I've just added the following code under fetch function.
if ($postdata)
{
curl_setopt($curl, CURLOPT_POST, true);
if($method) curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); // For Update and Delete requests
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
}
It's working like a charm. I hope it helps someone