我正在对画布应用程序实施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函数可以正常工作。
此处是否有人通过服务器验证成功实施了本地货币付款?
有什么建议吗?
感谢。
答案 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);