2

我正在为画布应用程序实现 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 函数可以正常工作。

这里有没有人通过服务器验证成功实现本地货币支付?

有什么建议么?

谢谢。

4

3 回答 3

0

我发现这里报告的错误:https ://developers.facebook.com/bugs/283875851753617

这是任何会陷入这种疯狂的人的代码。

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

        $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);
于 2013-08-10T06:18:26.543 回答
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>';
?>

用于参考错误报告的占位符。

于 2013-07-14T18:47:31.743 回答
0

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

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

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

所以,我也有点卡住了。有人找到更好的解决方案吗?

于 2013-08-09T08:21:19.537 回答