1

私は問題があります。PHP で Twilio ヘルパー ライブラリをセットアップして SMS を送信すると、すべて正常に動作します。しかし、何かをする必要があり、その方法がわかりません。

作業コードは次のとおりです。

try {
            $errorIds = array(); //user ids array which had broken phones
            $count = 0;
            foreach($listUsers as $user){
                $sms = $service->account->sms_messages->create(
                    $fromPhone, 
                    $user['phone'], // From user phone array
                    $message
                );
                if(!$sms){  //on error push userId in to error array
                    $count++;
                    array_push($errorIds, $user['userId']);
                } else {
                    $count=0;
                }
                if($count>20){ //if 20 errors in row give back errors
                    $data['results'] = "error";
                    $data['message'] = "Encountered to many failed messages in row";
                    $data['error_id_array'] = $errorIds;
                    $data['error_id'] = $user['userId'];
                    echo json_encode($data);
                }

            }
            $data['results'] = "success";
            $data['message'] = "Your message have been sent successfully";
            $data['error_id_array'] = $errorIds;
            echo json_encode($data);
       } catch (Services_Twilio_RestException $e) { 
            $data['results'] = "error";
            $data['message'] = $e->getMessage();
            $data['error_id'] = $user['userId'];
            echo json_encode($data);
        }

すべて正常に動作します。問題は、電話が壊れているためにエラーが発生した場合、アレイを通過するループが壊れて送信が停止することです。送信し続ける必要があるのですが、どうすればよいですか? これはコントローラーであり、リクエストは ajax 呼び出しから送信されます。そのため、echo ステートメントがあります。

4

2 に答える 2

4

例外がスローされると、foreachループが中断され、実行がcatch

したがって、コードを次のようにします

try {
            $errorIds = array(); //user ids array which had broken phones
            $count = 0;
            foreach($listUsers as $user){
                try
                {
                $sms = $service->account->sms_messages->create(
                    $fromPhone, 
                    $user['phone'], // From user phone array
                    $message
                );
                }
                catch (Exception $e)
                {  //on error push userId in to error array
                    $count++;
                    array_push($errorIds, $user['userId']);
                }
                if($count>20){ //if 20 errors in row give back errors
                    $data['results'] = "error";
                    $data['message'] = "Encountered to many failed messages in row";
                    $data['error_id_array'] = $errorIds;
                    $data['error_id'] = $user['userId'];
                    echo json_encode($data);
                }

            }
            $data['results'] = "success";
            $data['message'] = "Your message have been sent successfully";
            $data['error_id_array'] = $errorIds;
            echo json_encode($data);
       } catch (Services_Twilio_RestException $e) { 
            $data['results'] = "error";
            $data['message'] = $e->getMessage();
            $data['error_id'] = $user['userId'];
            echo json_encode($data);
        }

追加のループtry catch blockforeach

于 2013-11-14T17:37:01.220 に答える
0

これは同じコードですが、少しトリミングされています...これは私にとってはうまくいきました!

<?PHP

    require "Services/Twilio.php";

    // Set our AccountSid and AuthToken from twilio.com/user/account
    $AccountSid = "{ACCOUNTSID}";
    $AuthToken = "{AUTHTOKEN}";

    // Instantiate a new Twilio Rest Client
    $client = new Services_Twilio($AccountSid, $AuthToken);

    /* Your Twilio Number or Outgoing Caller ID */
    $from = '2126404004';

    $people = array("212-716-1130"); 

    $body = "Enter your text message here";

    $errorIds = array(); //user ids array which had broken phones

    foreach ($people as $to) { 
        try
        {
        $client->account->sms_messages->create($from, $to, $body);
        echo "Sent message to: $to \n <br>";

        }
        catch (Exception $e)
        {  //on error push userId in to error array
            $count++;
            array_push($errorIds, $to);
        }
    }

    print_r($errorIds);

?>
于 2014-01-09T04:39:06.500 に答える