2015-04-25 2 views
0

Как это переписать?создание массива, который будет использоваться с http_build_query

command=v&amount=<amount>&currency=<currency>&client_ip_addr=<ip>&description=<desc>&language=<language>&msg_type=SMS(&<property_name>=<property_value>) 

в это сообщение?

$post_fields = array(
        'command'  => 'v', 
        'amount'   => $amount, 
        'currency'  => $currency, 
        'client_ip_addr' => $client_ip_addr, 
        'description' => $description, 
        'language'  => $language, 
        'msg_type'  => "SMS(&${property_name}={$property_value}" 
        ); 

Мне любопытно узнать о последней части параметров. SMS( это массив или что-то еще? Я правильно написал внутри массива?

+2

Параметр 'SMS' вещь выглядит как формат, распознаваемые службами вы представляемые параметры для. Это просто символьная строка, содержащая внутри него 'prop = value'. – Barmar

+1

Мне кажется, все должно быть правильно. Вы посмотрели на результат 'http_build_query ($ post_fields)', чтобы посмотреть, хорошо ли это выглядит? – Barmar

ответ

0
...&msg_type=SMS(&<property_name>=<property_value>) 

Если это строка запроса из URL-адреса, то значение параметра SMS(&...) должно были закодировано, как SMS(%26...) отличить амперсанд как значение символа из амперсанда, используемого для разделения различных параметров. Скобки, вероятно, должны быть аналогичным образом закодированы как SMS%28%26...%29.

Кроме этого, значение внутри значения параметра SMS(...), вероятно, должно анализироваться получателем запроса и не имеет особого значения для самого URL-адреса.

Вашей массив переформулировка представляется правильным, за исключением того, что вам не хватает закрытие скобки в msg_type значении:

<?php 

    $amount   = '$3.99'; 
    $currency  = 'USD'; 
    $client_ip_addr = '2001:db8::42'; 
    $description = 'Flumbar'; 
    $language  = 'en'; 
    $property_name = 'glimb'; 
    $property_value = 'snord'; 

    $post_fields = array(
    'command'  => 'v', 
    'amount'   => $amount, 
    'currency'  => $currency, 
    'client_ip_addr' => $client_ip_addr, 
    'description' => $description, 
    'language'  => $language, 
    'msg_type'  => "SMS(&${property_name}={$property_value})" 
); 

    $s = http_build_query ($post_fields); 
    echo "$s\n"; 

// command=v&amount=%243.99&currency=USD&client_ip_addr=2001%3Adb8%3A%3A42& 
// description=Flumbar&language=en&msg_type=SMS%28%26glimb%3Dsnord%29 
Смежные вопросы