2

Facebook の新しい現地通貨の支払いをキャンバス アプリに実装していますが、PHP カールを使用したサーバー側の 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

私も同じ問題を抱えてる。cUrl リクエストをグラフに送信する方法は問題ではありません。これは、Facebook セッションがない場合、API が適切に応答しないためです。

そのため、同じリンクが cURL では機能せず、ブラウザー (アクティブな facebook セッション) では機能します。

さて、これを行うための解決策があるかもしれませんが、私はそれに依存しません。1) cUrl を介して Facebook アカウントにログインし、セッションをファイルに保存します。2) そのファイルを使用してセッションを確立し、必要な cURL 要求を行います。

だから、私もちょっと立ち往生しています。誰もがより良い解決策を見つけましたか?

于 2013-08-09T08:21:19.537 に答える
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 に答える