Форма добавления заказа в бд и дальнейшая оплата заказа.

YT
На сайте с 24.04.2015
Offline
0
1328

В общем есть скрипт оплаты и добавления клиента в бд(Т.е. клиент вводит свои данные и добавляется в базу данных). Как можно объединить форму добавления в бд и форму оплаты? Пример: Клиент вводит свои данные в поле "Имя" и в другие поля, а дальше по нажатию на кнопку заказать его данные заносятся в бд, потом активируется скрипт оплаты и после оплаты его кидает на сайт(Ну редирект сделать я смогу, просто описал суть того, что хочу.)

Сама форма добавления:

if(isset($_POST["send"])) {

require 'connect.php';
$Name = trim($_REQUEST['Name']);
$Email = trim($_REQUEST['Email']);
$Phone = trim($_REQUEST['Phone']);
$Address = trim($_REQUEST['Address']);
$Product = trim($_REQUEST['Product']);
$Size = trim($_REQUEST['Size']);
$Amount = trim($_REQUEST['Amount']);
$dates = date('Y-m-j H:i:s');
$Money = trim($_REQUEST['Money']);

$position = true;

mysql_query("SET names utf8");
$insert_sql = "INSERT INTO cart (Name, Email, Phone, Address, Product, Size, Amount, dates, Money)" .
"VALUES('{$Name}', '{$Email}', '{$Phone}', '{$Address}', '{$Product}', '{$Size}', '{$Amount}', '{$dates}', '{$Money}');";
mysql_query($insert_sql);
}

Платёжная система(Скрипт):

	session_start();

include "config.php";
require_once("payment.class.php");
$pay = new payment();
if (isset($_REQUEST['amount']) && isset($_REQUEST['payment'])) {
header ("Location: ".$pay->pay_form($_REQUEST['amount'], $pay->config['user_param'], $_REQUEST['payment']));
} else if (isset($_REQUEST['method']) && isset($_REQUEST['params'])) {
switch (strtolower($_REQUEST['method'])) {
case "check" :
echo $pay->up_sign($_REQUEST['params']);
break;
case "pay" :
echo $pay->up_sign($_REQUEST['params']);
$pay->pay($_REQUEST['params']['sum'], $_REQUEST['params']['account']);
break;
default :
$pay->up_json_reply("error", $_REQUEST['params']);
break;
}
exit();
} else {
if (isset($_GET['reply'])) {
echo $config['message'][$_GET['reply']];
} else {
if(!$pay->ik_sign($_REQUEST)) exit("403");
$pay->pay($_REQUEST['ik_am'], $_REQUEST['ik_pm_no']);
}
}

Вторая часть:

class payment

{
public function __construct()
{
global $config;
$this->config = $config;
$this->mysql_driver = strtolower($config['mysql_driver']);
$this->ik = $config['pay_system']['interkassa'];
$this->up = $config['pay_system']['unitpay'];
}

public function ik_sort($param)
{
$data['ik_co_id'] = $this->ik['shop_id'];
foreach ($param as $key => $value) // убирает параметры без /ik_/
{
if (!preg_match('/ik_/', $key)) continue;
$data[$key] = $value; // сохраняем параметры
}
return $data;
}

public function ik_sign($param) // интеркасса генератор контрольной цифровой подписи со стороны сервера
{
$data = $this->ik_sort($param);
$ikSign = $data['ik_sign']; // сохраняем приходящую переменную
unset($data['ik_sign']); // удаляем придодащую переменную, для генирации подписи
$key = ($data['ik_pw_via'] == 'test_interkassa_test_xts') ? $this->ik['test_key'] : $this->ik['key'];
if ($data['ik_pw_via'] == 'test_interkassa_test_xts' && !$this->ik['testing']) return false;
ksort ($data, SORT_STRING); // сортируем массив
array_push($data, $key); // внедряем переменуую $key в массив
$signStr = implode(':', $data); // записываем массив в формат @string через :
$sign = base64_encode(md5($signStr, true)); // хешируем подпись
return ($sign == $ikSign) ? true : false;
}


public function up_json_reply($type = "error", $params) // системный ответ для сервера unitpay, json
{
if ($type == "check" || $type == "pay") $type = "success";
$reply = array( // системный массив
'error' => array(
"jsonrpc" => "2.0",
"error" => array("code" => -32000, "message" => $this->config['message']['fail']),
'id' => $params['projectId']
),
'success' => array(
"jsonrpc" => "2.0",
"result" => array("message" => $this->config['message']['success']),
'id' => $params['projectId']
)
);
return json_encode($reply[$type]); // возвращаем json
}

public function up_sign($reply) { // Проверка цифровой подписи unitpay
ksort($reply); // сортируем массив
$exp = explode("-", $this->up['project_id']);
$Sign = $reply['sign']; // сохраняем подпись
unset($reply['sign']); // удаляем подпись
$reply['projectId'] = $exp[0]; // заменяем существующий ид проекта на свой, дабы убедиться, что запрос от нашего UP
$return = (md5(join(null, $reply).$this->up['key']) != $Sign) ? "error" : "success"; // генирация и проверка подписи
return $this->up_json_reply($return, $reply);
}

public function mysql_prepare($sql, $db, $binds)
{
foreach($binds as $key => $bind) {
$a[] = $key;
$b[] = "'{$bind}'";
}
$query = mysql_query(str_replace($a, $b, $sql), $db);
return (!$query) ? false : true;
}

public function pay_systems($pay_system)
{
foreach($this->config['pay_system'] as $system => $options)
{
if ($pay_system == $system && $options['enable']) return true;
}
return false;
}

public function pay_form($amount, $user, $pay_system) // генерация GET запроса
{
$amount = (int) $amount;
if ($amount > $this->config['max_pay'] || $amount <= 0 || !$this->pay_systems($pay_system)) return "/{$this->config['path']}/payment.php?reply=fail";
$desc = "{$this->config['description']} {$user}";
switch ($pay_system) {
case "interkassa" :
return "https://sci.interkassa.com/?ik_co_id={$this->ik['shop_id']}&ik_pm_no={$user}&ik_am={$amount}&ik_cur={$this->ik['cur']}&ik_desc={$desc}";
break;
case "unitpay" :
return "https://unitpay.ru/pay/{$this->up['project_id']}?sum={$amount}&account={$user}&desc={$desc}";
break;
default:
return "/{$this->config['path']}/payment.php?reply=fail";
break;
}
}

public function pay($amount, $user) // пополнение счета
{
$sql = "UPDATE `{$this->config['table']}` SET `{$this->config['column_money']}` = {$this->config['column_money']} + :amount WHERE `{$this->config['column_user']}` = :user";
if(extension_loaded("MySQLi") && $this->mysql_driver == "auto" || $this->mysql_driver == "mysqli") {
$conn = new mysqli($this->config['host'], $this->config['user'], $this->config['pass'], $this->config['bd_name']);
$stmt = $conn->prepare(str_replace(array(":amount", ":user"), "?", $sql));
$stmt->bind_param("is", $amo, $username);
$username = $user; $amo = (int) $amount;
return $stmt->execute();
} else if(extension_loaded("PDO") && extension_loaded("PDO_MySQL") && $this->mysql_driver == "auto" || $this->mysql_driver == "pdo"){
$conn = new PDO("mysql:host={$this->config['host']};dbname={$this->config['bd_name']}", $this->config['user'], $this->config['pass']);
$query = $conn->prepare($sql);
return $query->execute(array(":amount" => (int) $amount, ":user" => $user));
} else {
$conn = mysql_connect($this->config['host'], $this->config['user'], $this->config['pass']) or die('Ошибка подключения: '.mysql_error());
$db = mysql_select_db($this->config['bd_name'], $conn);
$user = mysql_real_escape_string(htmlspecialchars($user, ENT_QUOTES));
return $this->mysql_prepare($sql, $conn, array(":amount"=>(int)$amount, ":user"=>$user)) or die(mysql_error());
}
}
}

Я уж чё только не делал, и include в конце формы делал с сессией, но ни чего. В общем надежда на вас:)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий