以下代码经过测试凭证进行了测试并按预期工作,但是当尝试使用生产凭证购买号码时,我总是得到
[HTTP 400] Unable to create record: +xxxxxxx is not available
下面是检索可用号码的代码。
public function getAvailablePhoneNumbers(): array
{
if ($this->useTestClient) {
return [self::VALID_TEST_MAGIC_PHONE];
}
$numbers = $this->getClient()
->availablePhoneNumbers('US')
->local
->read([
'smsEnabled' => true,
]);
/* @var LocalInstance $number */
return array_map(function ($number) {
return $number->phoneNumber;
}, $numbers);
}
检索
phoneNumber
列表后,我尝试获取列表中的一个数字,或者如果失败则传递到列表中的下一个数字,列表中的所有数字都会失败并出现相同的错误,尝试获取它的代码是.
public function purchaseNumber(string $number): \Twilio\Rest\Api\V2010\Account\IncomingPhoneNumber\LocalInstance
{
return $this->getClient()
->incomingPhoneNumbers
->local
->create($number, [
'SmsApplicationSid' => config('twilio.sms_app_sid'),
]);
}
编辑:我尝试从 Twilio 控制台的日志中获取不可用的数字之一,并且成功了。
我对 PHP 不是很熟悉,但根据文档,语法是:
$incoming_phone_number = $twilio->incomingPhoneNumbers
->create(["phoneNumber" => "+15017122661"]);
尝试使用示例代码和已知的可用电话号码 - 包括正确的“phoneNumber”参考。如果它有效,那么问题出在您的 getAvailablePhoneNumbers() 或您如何引用 $number 数组中。
问题是我们围绕 Twilio SDK 创建的服务包装器在错误的时间交换测试凭据,因此在测试 API 中这些数字实际上不可用。
有助于调试的方法是使用环境变量
DEBUG_HTTP_TRAFFIC
强制 Twilio SDK 输出请求的调试信息,我们注意到使用了错误的凭据。
解决方案是修复包装器代码以在测试模式之外使用正确的凭据。