1

申し訳ありませんが、投稿できるハイパーリンクは2つだけなので、httpを削除する必要があります://

背景 私はここでコードを変換しようとしています:https ://github.com/RusticiSoftware/TinCan_Prototypes/blob/92969623efebe2588fdbf723dd9f33165694970c/ClientPrototypes/StatementIssuer/StatementIssuer.java

PHP、特にmakeRequest関数に。このコードは、Tin Can Compliant LearnerRecordStoreにデータを投稿します。

私のPHPコードの現在のバージョンはここにあります:tincanapi.co.uk/wiki/tincanapi.co.uk:MediaWikiTinCan

すべてが準拠する必要のあるTinCanAPIの仕様は、次のとおりです。scorm.com/wp-content/assets/tincandocs/TinCanAPI.pdf

ここに正しい形式でデータを投稿する動作するJavaスクリプト関数もあります(私が思うXHR_request関数を参照してください): https ://github.com/RusticiSoftware/TinCan_Prototypes/blob/92969623efebe2588fdbf723dd9f33165694970c/ClientPrototypes/GolfExample_TCAPI/scripts/TCDriver.js

投稿しているコードまたはサーバーにアクセスできませんが、最終結果は次の出力になります:beta.projecttincan.com/ClientPrototypes/ReportSample/index.html

問題 PHPでCurlを使用してデータをJSONとしてPOSTしようとしています。Curlは「false」を返しますが、エラーはなく、データを投稿していません。

このサイトの他の質問の推奨で、POSTFIELDの先頭に「json =」を追加しようとしましたが、JavaおよびJavaScriptバージョンにはこれがあるため、これが正しいかどうかはわかりません。

誰かがこれを修正する方法、またはカールから有用なエラーを取得する方法を提案できますか?私のバックアップは、関連するJavaScriptをユーザーのブラウザーに出力することですが、確かにPHPはこのサーバー側で実行できるはずですか?

助けてくれてとても感謝しています。

アンドリュー

4

2 に答える 2

2

少なくとも1つの間違いがあります。ヘッダー値に使用rawurlencodeしてはいけません。Authorization

代わりにphpストリームなどを使用することを検討してくださいjson_encode()json_decode()次のコードは機能します。

function fopen_request_json($data, $url)
{
    $streamopt = array(
        'ssl' => array(
            'verify-peer' => false,
        ),
        'http' => array(
            'method' => 'POST',
            'ignore_errors' => true,
            'header' =>  array(
                'Authorization: Basic VGVzdFVzZXI6cGFzc3dvcmQ=',
                'Content-Type: application/json',
                'Accept: application/json, */*; q=0.01',
            ),
            'content' => json_encode($data),
        ),
    );

    $context = stream_context_create($streamopt);
    $stream = fopen($url, 'rb', false, $context);
    $ret = stream_get_contents($stream);
    $meta = stream_get_meta_data($stream);
    if ($ret) {
        $ret = json_decode($ret);
    }
    return array($ret, $meta);
}

function make_request()
{
    $url = 'https://cloud.scorm.com/ScormEngineInterface/TCAPI/public/statements';

    $statements = array(
        array(
            'actor' => array(
                'name' => array('Example Name'),
                'mbox'  => array('mailto:example@example.com'),
                'objectType' => 'Person',
            ),
            'verb' => 'experienced',
            'object' => array(
                'objectType' => 'Activity',
                'id'=> 'http://www.thincanapi.co.uk/wiki/index.php?Main_Page',
                'definition' => array(
                    'name' => array('en-US'=>'TinCanAPI.co.uk-tincanapi.co.uk'),
                    'description' => array('en-US'=> 'TinCanAPI.co.uk-tincanapi.co.uk'),
                ),
            ),
        ),
    );
    return fopen_request_json($statements, $url);

}

list($resp, $meta) =  make_request();

var_export($resp); // Returned headers, including errors, are in $meta
于 2012-05-22T09:15:02.500 に答える
2

PHP専用のオープンソースライブラリをリリースしました。これは、受け入れられた回答と同様の方法を使用しますが、ライブラリの残りの部分も完成させます。見る:

http://rusticisoftware.github.io/TinCanPHP/

https://github.com/RusticiSoftware/TinCanPHP

于 2014-03-19T13:29:35.920 に答える