4

オブザーバーsales_order_save_afterを使用して注文情報を取得し、その一部を別の Web サービスに送信しています。

注文情報を取得したら、オブザーバーで次の curl スニペットを使用して、情報を Web サービスに送信します。情報は ok を送信し、サービスはそれを受信します。ただし、注文が完了してもブラウザはチェックアウト ページに残ったままになり、ユーザーは成功ページにリダイレクトされません。

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://myapp.com/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"field": 'data'}');
curl_setopt($ch, CURLOPT_USERPWD, 'blahblah:blahblah');

curl_exec($ch);
curl_close($ch);
4

4 に答える 4

1

CURLOPT_FOLLOWLOCATIONそしてCURLINFO_EFFECTIVE_URL役に立つかもしれません。

このようなもの:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://myapp.com/');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // for redirects
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"field": 'data'}');
curl_setopt($ch, CURLOPT_USERPWD, 'blahblah:blahblah');

curl_exec($ch);

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // get last effective URL

curl_close($ch);

header("Location: ".$last_url); // force browser to redirect
于 2013-04-23T18:52:53.647 に答える
1

すべての出力を無効にしてから試してください。CURL がわずかなテキスト (スペースを含む) を出力している可能性があり、これによりリダイレクトが中断されます。

<?php

error_reporting(E_ERROR); //this should disable all warnings.

CURL の代わりに file_get_contents も試してください。file_get_contents が正常に機能しているのに、CURL が機能しないことを経験しました。php.iniで許可されている外部を確認する必要がありますが

于 2013-05-06T19:19:54.230 に答える