2014-02-26 75 views
2

我需要一些幫助收集JSON通過Shopify內Laravel發送...Shopify網絡掛接到Laravel路由

Route::post('/shopify/webhook/payment', function() { 

    // capture json here 

}); 

一個人怎麼捕捉JSON從網絡掛接?我應該使用fopen('php://input');還是通過Laravel有更好的方法?

回答

3

從閱讀Shopify documentation看來,webhook POST的JSON直接在主體中(不在變量中)。所以是的,在正常情況下,你會使用file_get_contents('php://input'),然後是json_decode

但是,Symfony的啓動實際上讀取這個流,使它對你無用(這個流只能在PHP中讀取一次)。 因此,你必須從Symfony的Request對象讀取POST體:$json = json_decode(Request::getContent());

其實Laravel可以幫助你,甚至更多:只是做$json = Request::json();,將讓你整個JSON作爲Laravel ParameterBag,或者您也可以通過一鍵(和其默認)在:$something = Request::json('key', 'default value');

+0

你知道這是一個POST,PUT還是GET?我不認爲我的路線正確迴應... – dcolumbus

+0

http://postcatcher.in/ – dcolumbus

+0

@dcolumbus文檔說這是一個POST。請參閱我的答案中鏈接到的頁面的'接收webhook'部分。 – alexrussell

1

我創建了輔助函數,它將獲取JSON,並與效應初探派:

public function getJson($path,$type,$response) 
    { 
     if($type == "decoded"){ 
      return $this->decode(\File::get($path),$response); 

     } 
      return $this->encode(\File::get($path),$response); 
    } 

解碼和編碼都剛剛超過json_encodejson_decode功能抽象。如果應將json作爲HTTP響應或純文本發送,則會顯示響應標誌。文件是內置PHP文件處理的Laravel包裝器。

+0

所以Shopify鉤子傳遞3個參數?我想知道爲什麼我在他們的文檔中找不到那個地方......這是這些大公司的問題,他們總是跳過最基本的東西,並假設每個人都會得到它。 – dcolumbus

+0

@dcolumbus我不確定carousel的答案實際上與Shopify有什麼關係,並且更多的是關於從給定的上傳文件中編組JSON的情況(儘管我不確定爲什麼這個方法是必需的,因爲沒有解釋或上下文給出),所以我不認爲,因此你會在他們的文檔中找到與此相關的任何內容。 – alexrussell