HTTP-сеанс из облака служб с использованием кода PHP

#oracle #curl #rightnow-crm #oracle-service-cloud

#Oracle #curl #rightnow-crm #oracle-service-cloud

Вопрос:

Возможно ли отправлять пользовательские XML-сообщения из oracle service Cloud при сохранении HTTP-сеанса?

До сих пор мне удалось отправить одно сообщение с помощью cURL:

 <?php

use RightnowConnectv1_2 as RNCPHP;
use RightnowCPMv1 as RNCPM;

    $url1 = "";
    $startInterviewHeaders = array("SOAPAction: http://oracle");
    $startInterview;

    // session

    //$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/'; 

    if(!function_exists("curl_init")){
        load_curl();
        echo "curl loaded";
    } else {
        echo "curl already exists   ";
    }
    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_URL, $url1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $startInterview);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $startInterviewHeaders);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $startInterviewresponse = curl_exec($ch);
    //echo $response;

    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_errno= curl_errno($ch);
    echo "</br> HTTP status: " . $http_status . "</br> cURL error: " .$curl_errno . "</br>";
    curl_close($ch); //  close cURL
    echo $startInterviewresponse;


?>
  

РЕДАКТИРОВАТЬ: приведенный выше код отправляет одно сообщение и получает ответ, но когда я пытаюсь поддерживать HTTP-сеанс с помощью CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE, второй ответ cURL-сообщения сообщает, что активного сеанса нет.

 sessions.com.oracle.determinations.server.exceptions.NoActiveInterviewExceptionaction "Investigate" can not be performed without an active interview
  

Код, который я использовал для поддержания сеанса (работал при тестировании вне среды Rightnow)

 curl_setopt($ch,CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name');  //could be empty, but cause problems on some hosts
    curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp');  //could be empty, but cause problems
  

Спасибо!

Комментарии:

1. Определите «сбои». Какие ошибки, выходные данные или результат вы получаете.

2. В rightnow-crm это общая ошибка, которая ничего не говорит. Поиграв с ним немного, я почти уверен, что мне не разрешено создавать какие-либо временные файлы в crm. Есть ли обходной путь? Могу ли я сохранить сеанс в переменной?

Ответ №1:

Ваш пример кода представляет собой пользовательскую модель процесса. CPM не допускают сохранения и будут закрыты после завершения CPM. Вы можете запускать несколько вызовов curl из одного CPM, но это не рекомендуется; вам следует использовать промежуточное программное обеспечение интеграции, если вам нужно несколько вызовов на CPM.

Пока вы запускаете этот код из асинхронной CPM (синхронные CPM не предоставляют curl, так что здесь должно быть так), ошибка на стороне OSvC, вероятно, является проблемой при подключении к вашему «локальному тестовому серверу», который почти всегда недоступен для общедоступного Интернета вкорпоративная среда. Следовательно, ваш «сбой», скорее всего, является ошибкой подключения.

Согласно @drew010, вам также необходимо включить вашу ошибку в контекст этого вопроса.

Комментарии:

1. Единственная ошибка, которую я видел, была «Произошла ошибка с вашим запросом». при попытке загрузить эту страницу cpm. В настоящее время я застрял только при обслуживании при выполнении нескольких вызовов curl из одного CPM. Мое второе сообщение возвращается с этим исключением ‘sessions.com.oracle. определения.сервер.исключения. NoActiveInterviewExceptionaction ‘

2. ‘curl_setopt($ch, CURLOPT_COOKIEJAR, ‘cookie-name’);’ ‘curl_setopt($ch, CURLOPT_COOKIEFILE, ‘/var/www/ip4.x/file/tmp’)’ эти строки, похоже, не работают. Есть идеи, что я делаю не так?

3. CPM не используют браузер и, следовательно, не используют файлы cookie. Поскольку CPM в любом случае не будет поддерживать состояние, сохраните ваши результаты в переменной, используйте ее во втором вызове curl, а затем ожидайте, что все будет выброшено в конце выполнения CPM.