执行API调用,直到返回所需的响应

时间:2012-05-16 18:43:50

标签: php

我正在创建的流程需要将数据发送到soap服务。在得到理想的回答之前,我无法继续我的下一步行动。

try {
    $return = $soapClient->__soapCall("BulkLoadContacts",array('parameter' => $params));

    foreach ($return as $r){
        $upload_id = $r;
    }

    $process_params = array(
        'ProcessID' => $upload_id,
    );
    $return = $soapClient->__soapCall("GetProcessStatus",array('parameter' => $process_params));
    var_dump($return);

}
catch(SoapFault $fault){
    $status = false;
}

在上面的代码中,我执行了BulkLoadContacts方法。然后我从响应中抓取ProcessID。一旦我有了这个ID,我就再打一次电话来获取我的进程的状态。最后一个转储器告诉我GetProcessStatus的响应。翻斗车看起来像:

object(stdClass)#18 (1) {
  ["WSProcessStatus"]=>
  object(stdClass)#19 (6) {
    ["ProcessID"]=>
    int(3313881)
    ["ListID"]=>
    int(268207)
    ["ProcessName"]=>
    string(20) "listrak_tempfile.txt"
    ["ProcessStartTime"]=>
    string(23) "2012-05-16T14:22:50.643"
    ["ProcessCompleteTime"]=>
    string(22) "2012-05-16T14:22:50.84"
    ["Status"]=>
    string(19) "ProcessingCompleted"
  }
}

最后一项是Status。只有在方法返回值为“ProcessingCompleted”之前,我才能继续。有关如何完成此任务的任何建议?一个简单的做法是否足够?

1 个答案:

答案 0 :(得分:0)

do / while应该做的伎俩。但是我建议在每个循环中加一个延迟,否则你将会敲击Soap服务器。

此外,您可能希望指定最大尝试次数。你不希望你的程序陷入无限循环。

try {
    $return = $soapClient->__soapCall("BulkLoadContacts",array('parameter' => $params));

    foreach ($return as $r){
        $upload_id = $r;
    }

    $attempts_remaining = 10;
    do {
        sleep(1);
        $process_params = array(
            'ProcessID' => $upload_id,
        );
        $return = $soapClient->__soapCall("GetProcessStatus",array('parameter' => $process_params));

        $attempts_remaining--;
    } while (($return->WSProcessStatus->Status != 'ProcessingCompleted') && ($attempts_remaining > 0));

    if($return->WSProcessStatus->Status == 'ProcessingCompleted') {
        //success
    }
    else {
        //timeout
    }


}
catch(SoapFault $fault){
    $status = false;
}