Как изменить валюту (currency) перед созданием личного рекламного кабинета по API Facebook

Допустим ситуацию: у нас есть РУ-аккаунт (или другое гео), свежерег, соответственно, рекламный кабинет на нем еще не создан (не активирован). Если мы пройдем в управление рекламой или создадим кабинет по API (об этом расскажу позже), то будет создан кабинет с валютой, соответствующей вашему гео. В нашем случае валюта будет RUB, но мы хотим оплачивать в USD.

Рассмотрим вариант изменения валюты платежей за рекламу по API. Еще раз предупрежу: данный способ изменения валюты подходит в том случае, когда у вас свежерег и рекламный кабинет не создан!

Напишем скрипт со следующей логикой:
1. Авторизуемся в фб с использованием прокси — получим access_token, session_cookies, user_id.
2. Изменим валюту (currency), используя полученные данные.

Разбирать отдельные куски кода не буду, он простой. Все понятно из комментариев.
<?php
//Параметры подключения к proxy SOCKS/HTTP
$proxy_sp = 'host:port';
$proxy_lp = 'login:password';

//Login и password аккаунта фб
$login = 'email@example.com'; //email, user_id, phone
$password = 'password';

//Устанавливаемая валюта
$currency = 'USD';

//1. Авторизуемся в фб
$auth_data = getAuthData($login, $password, $proxy_sp, $proxy_lp);
//В ответе будет: session_key, uid, secret, access_token, machine_id, session_cookies, identifier
//Разбираем session_cookies в строку
foreach ($auth_data['session_cookies'] as $cookie) {
	if ($cookie['name'] == 'c_user') {$cookies['c_user'] = $cookie['value'];};
	if ($cookie['name'] == 'xs') {$cookies['xs'] = $cookie['value'];};
	if ($cookie['name'] == 'fr') {$cookies['fr'] = $cookie['value'];};
	if ($cookie['name'] == 'datr') {$cookies['datr'] = $cookie['value'];};
}
$cookies = 'c_user='.$cookies['c_user'].'; xs='.$cookies['xs'].'; fr='.$cookies['fr'].'; datr='.$cookies['datr'];

//2. Устанавливаем валюту
$set_currency = setCurrency($auth_data['access_token'], $auth_data['uid'], $currency, $cookies, $proxy_sp, $proxy_lp);

//Выводим результат на экран
echo "<pre>";
print_r($set_currency);
echo "</pre>";

//Функция авторизации в фб и получения access_token, session_cookies, user_id
function getAuthData($login, $password, $proxy_server_port, $proxy_login_password) {
	$data = array (
	    "access_token" => "438142079694454|fc0a7caa49b192f64f6f5a6d9643bb28", //Ads Manager Android
	    "email" => $login,
	    "format" => "json",
	    "generate_session_cookies" => "1",
	    "locale" => "ru_RU",
	    "password" => $password
	);
	return sendRequest('auth/login/', $data, 'POST', $proxy_server_port, $proxy_login_password);
}

//Функция изменения валюты
function setCurrency($access_token, $user_id, $currency, $cookies, $proxy_server_port, $proxy_login_password) {
	$data = array (
	    "access_token" => $access_token,
	    "fb_api_caller_class" => "RelayModern",
	    "fb_api_req_friendly_name" => "usePaymentsCometUpdateCurrencyMutation",
	    "variables" => '{"input":{"currency":"'.$currency.'","payment_type":"FBPAY_HUB","actor_id":"'.$user_id.'","client_mutation_id":"1"}}',
	    "server_timestamps" => "true",
	    "doc_id" => "2455682581215389",
	    "cookies" => $cookies,
	);
	return sendRequest('graphql', $data, 'POST', $proxy_server_port, $proxy_login_password);
}

//Функция отправки запросов к серверу фб с использованием прокси
function sendRequest($edge, $data, $method, $proxy_server_port, $proxy_login_password, $useragent = 'Mozilla/5.0 (Linux; Android 9; SM-G960F Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.157 Mobile Safari/537.36') {
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 200);
	curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); //или CURLPROXY_HTTP
	curl_setopt($curl, CURLOPT_PROXY, $proxy_server_port);
	curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxy_login_password);
	curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
	if ($data['cookies']) {
		curl_setopt($curl, CURLOPT_COOKIE, $data['cookies']);
	}
	if ($method == 'GET') {
		curl_setopt($curl, CURLOPT_URL, 'https://graph.facebook.com/v8.0/'.$edge.'?'.http_build_query($data));
	} elseif ($method == 'POST') {
		curl_setopt($curl, CURLOPT_URL, 'https://graph.facebook.com/v8.0/'.$edge.'/');
		curl_setopt($curl, CURLOPT_POST, true);
		curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
	}
	return json_decode(curl_exec($curl), 1);
	curl_close($curl);
}
?>
В ответ получим следующий массив с информацией:
Array
(
    [data] => Array
        (
            [update_user_currency] => Array
                (
                    [client_mutation_id] => 1
                    [currency_preferences] => Array
                        (
                            [can_change_currency] => 
                            [last_change_time] => 1613214413
                            [next_change_time] => 1613473613
                            [user_currency] => USD
                        )
                    [payments_error] => 
                )
        )
    [extensions] => Array
        (
            [server_metadata] => Array
                (
                    [request_start_time_ms] => 1613214413423
                    [time_at_flush_ms] => 1613214413704
                )
            [is_final] => 1
        )
)
Если, после выполнения скрипта зайти в аккаунте в настройки Facebook Pay (https://secure.facebook.com/facebook_pay/settings), то увидим установленную валюту для нашего аккаунта.
13.02.2021 г. 384

Комментарии ()

  1. Anatoliy
    14 февраля 2021, 19:50
    Если на гео при изменении валюты, каб деактивируется и создается новый, по апи будет тоже самое?
    1. kimoncar
      14 февраля 2021, 20:04
      Этот способ не изменяет валюту в уже созданном рекламном кабинете. Я там писал, что актуально только для свежерега или для аккаунта, в котором личный рекламный кабинет еще не активирован, т.е. в нем еще не переходили по ссылке facebook.com/adsmanager, либо не активировали по API.
      Данный способ меняет валюту в соцакке. Сначала меняешь валюту в соцакке, потом идешь (впервые) в адсменеджер и активируется рекламный кабинет с валютой соцакка.
      1. kimoncar
        14 февраля 2021, 20:12
        Можно и без апи. В новом акке переходишь по ссылке secure.facebook.com/facebook_pay/settings, меняешь валюту на нужную и идешь в адс менеджер. Будет создан РК с твоей валютой. Соответственно, без деактивации.
        1. Anatoliy
          14 февраля 2021, 20:36
          Вот за это спасибо большое!)

      Комментарии

      UpRoof.pro 2020