Задать вопрос
@Masaks

Как передать по очереди данные в форму PHP?

Здравствуйте! Делаю для себя скрипт для массового пополнения номеров телефона через PAYEER API и застрял на таком вопросе (просто php не моё, просто по фану и для себя)

Как сделать так, чтобы я мог закинуть сразу кучу номеров и они каким-то образом распределились и отправились в форму? Хочу сделать чтобы закинул пачку номеров и они автоматически пополнились.

Код того что уже сделал:
form.php
<? top('Пополнить номера') ?>
<div class="padding">
	<form action="/form" method="post">
		<select name="operator">
        <option value="24899291">МТС</option>
        <option value="24899391">Мегафон</option>
        <option value="95877310">Теле2</option>
        </select>
		<p><input type="text" name="phone" placeholder="Номер телефона"></p>
		<p><input type="submit" name="enter" value="Пополнить"></p>
	</form>
</div>
<? bottom() ?>

home.php
<?
if ($_POST['enter'])
{
    require_once ('cpayeer.php');
    $accountNumber = 'P1XXXXXXX';
    $apiId = '00000000';
    $apiKey = 'xxxxxxxxxx';
    $payeer = new CPayeer($accountNumber, $apiId, $apiKey);
    if ($payeer->isAuth())
    {
        $initOutput = $payeer->initOutput(array(
            'ps' => $_POST['operator'],
            'curIn' => 'RUB',
            'sumOut' => 10,
            'curOut' => 'RUB',
            'param_ACCOUNT_NUMBER' => $_POST['phone'],
        ));

        if ($initOutput)
        {
            $historyId = $payeer->output();
            if ($historyId > 0)
            {
                echo "Выплата успешна";
            }
            else
            {
                echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
            }
        }
        else
        {
            echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
        }
    }
    else
    {
        echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
    }
}
?>

PHP-класс API от PAYEER

<?php
class CPayeer
{
	private $url = 'https://payeer.com/ajax/api/api.php';
	private $agent = 'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0';

	private $auth = array();

	private $output;
	private $errors;
	private $language = 'ru';

	public function __construct($account, $apiId, $apiPass)
	{
		$arr = array(
			'account' => $account,
			'apiId' => $apiId,
			'apiPass' => $apiPass,
		);

		$response = $this->getResponse($arr);

		if ($response['auth_error'] == '0')
		{
			$this->auth = $arr;
		}
	}

	public function isAuth()
	{
		if (!empty($this->auth)) return true;
		return false;
	}

	private function getResponse($arPost)
	{
		if (!function_exists('curl_init'))
		{
		   die('curl library not installed');
		   return false;
		}

		if ($this->isAuth())
		{
			$arPost = array_merge($arPost, $this->auth);
		}

		$data = array();
		foreach ($arPost as $k => $v)
		{
			$data[] = urlencode($k) . '=' . urlencode($v);
		}
		$data[] = 'language=' . $this->language;
		$data = implode('&', $data);

		$handler  = curl_init();
		curl_setopt($handler, CURLOPT_URL, $this->url);
		curl_setopt($handler, CURLOPT_HEADER, 0);
		curl_setopt($handler, CURLOPT_POST, true);
		curl_setopt($handler, CURLOPT_POSTFIELDS, $data);
		curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, 0);
		curl_setopt($handler, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($handler, CURLOPT_USERAGENT, $this->agent);
		curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);

		$content = curl_exec($handler);
		//print_r($content);

		$arRequest = curl_getinfo($handler);
		//print_r($arRequest);

		curl_close($handler);
		//print_r($content);

		$content = json_decode($content, true);

		if (isset($content['errors']) && !empty($content['errors']))
		{
			$this->errors = $content['errors'];
		}

		return $content;
	}

	public function getPaySystems()
	{
		$arPost = array(
			'action' => 'getPaySystems',
		);

		$response = $this->getResponse($arPost);

		return $response;
	}

	public function initOutput($arr)
	{
		$arPost = $arr;
		$arPost['action'] = 'initOutput';

		$response = $this->getResponse($arPost);

		if (empty($response['errors']))
		{
			$this->output = $arr;
			return true;
		}

		return false;
	}

	public function output()
	{
		$arPost = $this->output;
		$arPost['action'] = 'output';

		$response = $this->getResponse($arPost);

		if (empty($response['errors']))
		{
			return $response['historyId'];
		}

		return false;
	}

	public function getHistoryInfo($historyId)
	{
		$arPost = array(
			'action' => 'historyInfo',
			'historyId' => $historyId
		);

		$response = $this->getResponse($arPost);

		return $response;
	}

	public function getBalance()
	{
		$arPost = array(
			'action' => 'balance',
		);

		$response = $this->getResponse($arPost);

		return $response;
	}

	public function getErrors()
	{
		return $this->errors;
	}

	public function transfer($arPost)
	{
		$arPost['action'] = 'transfer';

		$response = $this->getResponse($arPost);

		return $response;
	}

	public function SetLang($language)
	{
		$this->language = $language;
		return $this;
	}

	public function getShopOrderInfo($arPost)
	{
		$arPost['action'] = 'shopOrderInfo';

		$response = $this->getResponse($arPost);

		return $response;
	}

	public function checkUser($arPost)
	{
		$arPost['action'] = 'checkUser';

		$response = $this->getResponse($arPost);

		if (empty($response['errors']))
		{
			return true;
		}

		return false;
	}

	public function getExchangeRate($arPost)
	{
		$arPost['action'] = 'getExchangeRate';

		$response = $this->getResponse($arPost);

		return $response;
	}

	public function merchant($arPost)
	{
		$arPost['action'] = 'merchant';

		$arPost['shop'] = json_encode($arPost['shop']);
		$arPost['form'] = json_encode($arPost['form']);
		$arPost['ps'] = json_encode($arPost['ps']);

		if (empty($arPost['ip'])) $arPost['ip'] = $_SERVER['REMOTE_ADDR'];

		$response = $this->getResponse($arPost);

		if (empty($response['errors']))
		{
			return $response;
		}

		return false;
	}
}
?>


Так сейчас выглядит фронтенд

5e94a1e38e11b893473771.png

Заранее прощу прощения, если неверно сформировал вопрос. Спасибо!
  • Вопрос задан
  • 137 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
motokraft
@motokraft
Кратко о себе
1. вариант (если сумма пополнения для всех номеров одинакова) - в форме input с именем phone делаешь textarea, и каждый номер пишешь с новой строки, далее в обработчике значение textarea разбиваешь на \n (перенос строки)
и в итоге получается что все номера содержаться в массиве и после этого работаешь с этим массивом. К примеру
<textarea name="phone">24899291
24899391
95877310</textarea>

таки образом я получу массив
$phones = array('24899291', '24899391', '95877310');

далее я работаю с этим массивом
foreach($phones as $phone)
{
	$initOutput = $payeer->initOutput(array(
		'ps' => $_POST['operator'],
		'curIn' => 'RUB',
		'sumOut' => 10,
		'curOut' => 'RUB',
		'param_ACCOUNT_NUMBER' => $phone,
	));

	if ($initOutput)
	{
		$historyId = $payeer->output();
		if ($historyId > 0)
		{
			echo "Выплата успешна";
		}
		else
		{
			echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
		}
	}
	else
	{
		echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
	}
}


2. вариант (если для каждого номера своя сумма пополнения) - оформить можно как угодно, но от этого смысл не меняется. Вариант для одного телефона. Код формы
<p><input type="text" name="phone[0][number]" placeholder="Номер телефона"></p>
<p><input type="text" name="phone[0][sum]" placeholder="Сумма пополнения"></p>

обработчик получит вот такие данные (пример для трех телефонов)
array(
	array(
		'number' => '24899291',
		'sum' => '10'
	),
	array(
		'number' => '24899391',
		'sum' => '20'
	),
	array(
		'number' => '95877310',
		'sum' => '30'
	)
)

такого рода имена полей указаны не случайны, т. к. с ними очень удобно работать в обработчике. Далее почти все все тоже самое что и сверху
foreach($_POST['phones'] as $phone)
{
	$initOutput = $payeer->initOutput(array(
		'ps' => $_POST['operator'],
		'curIn' => 'RUB',
		'sumOut' => $phone['sum'],
		'curOut' => 'RUB',
		'param_ACCOUNT_NUMBER' => $phone['number'],
	));

	if ($initOutput)
	{
		$historyId = $payeer->output();
		if ($historyId > 0)
		{
			echo "Выплата успешна";
		}
		else
		{
			echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
		}
	}
	else
	{
		echo '<pre>' . print_r($payeer->getErrors() , true) . '</pre>';
	}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы