1

コーディングと Web 開発は初めてで、API の深いところに飛び込むことは、私がしたことがなかったらよかったのにと思います。しかし、私は予想以上に進歩したと言われています。連絡先の追加機能にカスタム フィールドを追加しようとすると、問題が発生します。ユーザーがサンキューページにアクセスしたときに非表示のフォーム入力フィールドを追加するコードを取得しようとしています。メイン ページに Getresponses 独自の Form Builder を使用したくないので、API を使用する方がよいでしょう。連絡先を追加するだけの場合、コードは完全に実行されますが、set_contact_customs を追加すると、コードが実行されず、次のエラーで失敗します: (Request have return error: Array)しかし、私は何が間違っていたのかわかりません.. 私はまだ基​​本を学んでいるので、アドバイスや助けをいただければ幸いです。専門家の言うことを理解することは、素晴らしい学習曲線です. ありがとう。

--- 以下は、set_contact_customs を除いた作業バージョンです ----

<?php
// Add contact to selected campaign id
try{
$result_contact = $client->add_contact(
$api_key,
array (
'campaign' => 'My-Camp-ID',
'name' => $fullname,
'email' => $emailaddress
)
);

echo "<p style='color: blue; font-size:24px;'>No Errors, Contact and Custom Fields have been added...</p>";
}

catch (Exception $e) {

echo $e->getMessage();
}

?>

--- これが問題の原因となるコードです (set_contact_customs を使用) ----

    <?php
// Add contact to selected campaign id
try{
$result_contact = $client->add_contact(
$api_key,
array (
'campaign' => 'My-Camp-ID',
'name' => $fullname,
'email' => $emailaddress
)
);
$result_contact = $client->set_contact_customs(
        $api_key,
            array(
                'Survey Type' => $surveytype,
                'Survey Cost' => $surveycost
                )
);
echo "<p style='color: blue; font-size:24px;'> Contact Added </p>";
}

catch (Exception $e) {

echo $e->getMessage();
}

?>
4

1 に答える 1

4
  1. API 2 は実際には存在しません。GetResponse ではバージョン「1.5.0 - これが API の最後の JSON/RPC バージョンです」と表示されます。特に 10 か月前に話していた場合はそうです。現在、v3 のベータ テストの準備を進めています。ですから、あなたが 1.5 について話していたと仮定して、それについて答えます (私は v3 に詳しくありません。おそらく違うかもしれません)。

  2. set_contact_customs で連絡先 ID を送信する必要がありますが、送信していません。

  3. 「リクエストエラー:配列」と表示されている場合、配列とは関係ありません(連絡先IDを送信していないため、配列に問題がありますが)、配列を応答として送信していますエラーメッセージ。

  4. 連絡先 ID を送信するための連絡先 ID の入手先を教えていただきたいのですが、今自分で探しています。:)

アップデート:

わかりました、私はインターネット中の断片からそれを組み合わせました。これが作業フォーマットです。

  1. add_contact を追加してから更新する必要はありません。「customs」パラメーターを add_contact 呼び出しに追加することで、一度に行うことができます (GR によると、連絡先がすぐに追加されるとは思わないので、その関数をすぐに呼び出すと、誰を更新するかさえ取得できない可能性があります)。

    add_contact のフィールドについては、こちらで説明しています。

  2. 「customs」パラメータは異なって見えるはずです。それ以外の:

    array(
        'Survey Type' => $surveytype,
        'Survey Cost' => $surveycost
        )
    

    そのはず:

    array(
        array( 'name' => 'Survey Type', 'content' => $surveytype ),
        array( 'name' => 'Survey Cost', 'content' => $surveycost )
        )
    

    ちなみに、私がテストしたことから、幸いなことに、最初に GR UI でこれらのカスタム フィールドを定義する必要はありません。送信したものは何でも追加または更新されます (カスタム フィールドの名前と値の制限内で)。

    I got error, when tried to send one custom field with empty content, when calling add_contact. When I sent it with set_contact_customs, I didn't get any error; I wanted to see, if it would delete the field or field value - it didn't do a thing.

  3. If you still wish to update the existing contact, here's how to send the contact id with the update call:

    $result = $client->set_contact_customs(
       $api_key, array(
          'contact' => $contact_id,
          'customs' => $custom_fields_array
        )
    );
    
  4. To first find contact id, you should call get_contacts. And since it's been said (I haven't tested it), that in different campaigns contacts with the same email address have different contact id, you should pass both the campaign, and the email with it.

    ご覧のとおり、キャンペーンは「campaigns」パラメーター (add_contact で取得したキャンペーン ID を使用する必要があります) または「get_campaigns」 (キャンペーン名またはプレフィックスを使用できます) で送信できます。

    コードのキャンペーン ID を使用した呼び出しは次のとおりです。

    $result = $client->get_contacts(
        $api_key, array(
           'campaigns' => array( 'My-Camp-ID' ),
           'email' => array( 'EQUALS' => $emailaddress )
        )
    );
    
  5. get_contacts から連絡先 ID を取得するには、キャンペーン ID の取得で推奨されているのと同じ手順を実行します。

    $contact_id = array_pop( array_keys( $result ) );
    if ( empty( $contact_id ) ) {
        //still not ok
    }
    else {
        //you can call set_contact_customs
    }
    
  6. そのエラー メッセージをよりわかりやすくするために、'Request have return error: Array' ではなく、jsonRPCClient.php を開きます。これは、これらの GR 関数呼び出しでファイルに含めることが最も確実であり、次の行を探します。

    !is_null($response['error']) => 'Request have return error: ' . $response['error'],
    

    少なくとも次のように置き換えます。

    !is_null($response['error']) => 'Request have returned error: ' . var_export($response['error'], true),
    

    これで、コードは最愛のvar_export関数を使用し、間違いを犯した場合は、エラー ログに次のように表示されます。

    Request have returned error: array (
      'message' => 'Invalid params',
      'code' => -32602,
    )
    

この徹底的な回答を、ここ StackOverflow で際限なく助けてくれたすべての人に捧げます。時には何年も前に、他の人の質問に答えてくれました。ありがとうございました!うまくいけば、私の答えが誰かの時間、労力、気分を救うことにもなります. :)

于 2016-04-21T21:45:44.360 に答える