本地货币付款验证使用curl php失败

时间:2013-07-14 17:41:38

标签: php facebook facebook-graph-api curl payment

我正在对画布应用程序实施Facebook新的本地货币支付,一切正常,除了使用PHP curl通过服务器端Facebook Graph调用验证付款。

我不断收到以下消息:

"error":{
    "message":"An unexpected error has occurred. Please retry your request later.",
    "type":"OAuthException",
    "code":2
}

php代码:

$url  = 'https://graph.facebook.com/'.$payment_id.'/?access_token='.$access_token;
$data = get_url($url);

function get_url($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    $tmp = curl_exec($ch);
    curl_close($ch);
    return $tmp;
}

只有图形链接在浏览器中粘贴时才能正常工作,因此payment_id和access_token是正确的,但它不能与php curl一起使用。

其他图形调用使用相同的curl函数可以正常工作。

此处是否有人通过服务器验证成功实施了本地货币付款?

有什么建议吗?

感谢。

3 个答案:

答案 0 :(得分:0)

我可以通过以下代码获得付款ID的返回ID:

  

注意:测试购买不会从api请求返回。 "我需要   在文档中验证这一点"。

错误的

错误:即使完全访问具有访问令牌的应用,在我的情况下,只有id返回,而api限制其余信息。


<?php
function GetCH($url){
$ch=null;
if(!$ch){
$ch = curl_init();
}
curl_setopt($ch, CURLOPT_URL, "".$url."");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$return=curl_exec($ch);
 if(!curl_errno($ch)){
return $return;
 }else{
$fb_fail=curl_error($ch);
return $fb_fail;
}
curl_close($ch);
unset($ch);
};
$payment_id = '901177xxxxxxxxxxx?fields=id,amount,application,created_time,from,status,updated_time,items';  // notice the request for more than just the id using expansion.
$access_token = '135669679827333|xxxxxxxxxxxxxxx'; // app access token.
$url  = 'https://graph.facebook.com/'.$payment_id.'&access_token='.$access_token;
$returned=GetCH($url);
$locs=json_decode($returned, true);
echo '<pre>';
print_r($locs);
echo '</pre>';
?>

放置持有人以参考错误报告。

答案 1 :(得分:0)

我有同样的问题。这不是关于如何将cUrl请求发送到图表。 这是因为当您没有Facebook会话时,API不会做出相应的响应。

这就是为什么相同的链接在cURL中不起作用但在浏览器中工作(具有活动的facebook会话)。

现在,可能有一个解决方案可以做到这一点,但我不会依赖它。 1)通过cUrl登录到facebook帐户并将会话保存在文件中。 2)使用该文件来进行会话,从而进行所需的cURL请求。

所以,我也有点卡住了。有人找到了更好的溶液吗?

答案 2 :(得分:0)

我在此处发现了错误:https://developers.facebook.com/bugs/283875851753617

这里有关于谁会陷入这种疯狂的代码。

(注意:不可靠,因为它不会随意返回它应该返回的内容,而是返回An&#34;发生意外错误。请稍后重试您的请求。&#34;)

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/' . $payment_id . '?access_token=YES_APP_TOKEN_TOKEN');
        curl_setopt($ch, CURLOPT_COOKIE, 'c_user=APP_ID');  //not reliable, because not always working.
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $result = curl_exec($ch);