2017-10-19 7 views
0

これは私の最初の質問stackoverflowです。このように、PHPでjsonレスポンスからPayPal Hateoasリンクを使用するには?

{ 
    "links": [{ 
    "href": "https://api.paypal.com/v1/payments/sale/36C38912MN9658832", 
    "rel": "self", 
    "method": "GET" 
    }, { 
    "href": "https://api.paypal.com/v1/payments/payment/PAY-5YK922393D847794YKER7MUI", 
    "rel": "parent_payment", 
    "method": "GET" 
    }] 
} 

は、PHPで使用するためにそれらのリンクを取得するには:

私はこのような(パース)JSONレスポンスでHATEOASのリンクを使用する方法を探しています

GET https://api.paypal.com/v1/payments/sale/36C38912MN9658832 

私は何か解決策を見つけるために何時間もグーグルを探していましたが、Hateoasリンクの作成方法はヒットしました。

私はjsonを配列に変換する方法を知っていますが、PHPで使用可能なリンクを作成する方法はわかりません。

私の目標は、このリンクを使用してPaypalから詳細情報を取得することです。


私は十分分かりませんでした。 たとえば、jsonのURLとメソッドを取得するには、 'rel' == 'self'を使用します。

あなたのうちの1人が私を助けてくれることを願っています。

ありがとうございます。

+0

jsonのhrefが必要ですか? –

+0

@Arun Kumareshご返信ありがとうございます。私はURLとそれに対応するメソッドをjsonから解析して、それをcURLリクエストで使用したいと考えています。 – marlon1215

答えて

0

多くの試行錯誤の末、自分で解決策を見つけることができました。

それはこのようにarray_filter(array_mapを())を使用して行うことができます。

$key = 'rel'; 
$val = 'self'; 

$links_array = json_decode('{ 
    "links": [{ 
    "href": "https://api.paypal.com/v1/payments/sale/36C38912MN9658832", 
    "rel": "self", 
    "method": "GET" 
    }, { 
    "href": "https://api.paypal.com/v1/payments/payment/PAY-5YK922393D847794YKER7MUI", 
    "rel": "parent_payment", 
    "method": "GET" 
    }] 
}'); 

$arr_filtered = array_filter(array_map(function($elem) use ($key, $val) { 
    if ($elem[$key] == $val) { return $elem; } 
}, $links_array['links'])); 

echo 'array filtered: ', var_dump($arr_filtered); 
echo 'wanted array: ', var_dump($arr_filtered[0]); 

これは、その結果:

array(3) { ["href"]=> string(57) "https://api.paypal.com/v1/payments/sale/36C38912MN9658832" ["rel"]=> string(4) "self" ["method"]=> string(3) "GET" } 

しかし、最終的に、私は次のように、昔ながらのforeachループのために選択しましたso:

$link_arr = NULL; 
foreach($links_array['links'] as $linkkey => $linkval) { 
    if ($linkval[$key] == $val) { 
    $link_arr = $linkval; 
    break; 
    } 
} 

echo 'link-arr: ',var_dump($link_arr); 

私には同じ結果が得られます。

これで私の問題は解決しました。