我需要一些幫助收集JSON通過Shopify內Laravel發送...Shopify網絡掛接到Laravel路由
Route::post('/shopify/webhook/payment', function() {
// capture json here
});
一個人怎麼捕捉JSON從網絡掛接?我應該使用fopen('php://input');
還是通過Laravel有更好的方法?
我需要一些幫助收集JSON通過Shopify內Laravel發送...Shopify網絡掛接到Laravel路由
Route::post('/shopify/webhook/payment', function() {
// capture json here
});
一個人怎麼捕捉JSON從網絡掛接?我應該使用fopen('php://input');
還是通過Laravel有更好的方法?
從閱讀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');
我創建了輔助函數,它將獲取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_encode和json_decode功能抽象。如果應將json作爲HTTP響應或純文本發送,則會顯示響應標誌。文件是內置PHP文件處理的Laravel包裝器。
所以Shopify鉤子傳遞3個參數?我想知道爲什麼我在他們的文檔中找不到那個地方......這是這些大公司的問題,他們總是跳過最基本的東西,並假設每個人都會得到它。 – dcolumbus
@dcolumbus我不確定carousel的答案實際上與Shopify有什麼關係,並且更多的是關於從給定的上傳文件中編組JSON的情況(儘管我不確定爲什麼這個方法是必需的,因爲沒有解釋或上下文給出),所以我不認爲,因此你會在他們的文檔中找到與此相關的任何內容。 – alexrussell
你知道這是一個POST,PUT還是GET?我不認爲我的路線正確迴應... – dcolumbus
http://postcatcher.in/ – dcolumbus
@dcolumbus文檔說這是一個POST。請參閱我的答案中鏈接到的頁面的'接收webhook'部分。 – alexrussell