· 6 years ago · Oct 18, 2019, 07:28 PM
1<?php
2
3
4error_reporting(0);
5header('Content-Type: text/json');
6header('Charset: UTF-8');
7
8$request = $_POST;
9
10$merchant_id = 'YOUR MERCHANT ID';
11$service_id = 'YOUR SERVICE ID';
12$merchant_user_id = 'YOUR MERCHANT USER ID';
13$secret_key = 'SECRET KEY';
14
15
16// Проверка отправлено-ли все параметры
17if(!(
18 isset($request['click_trans_id']) &&
19 isset($request['service_id']) &&
20 isset($request['merchant_trans_id']) &&
21 isset($request['amount']) &&
22 isset($request['action']) &&
23 isset($request['error']) &&
24 isset($request['error_note']) &&
25 isset($request['sign_time']) &&
26 isset($request['sign_string']) &&
27 isset($request['click_paydoc_id'])
28 )){
29
30 echo json_encode( array(
31 'error' => -8,
32 'error_note' => 'Error in request from click'
33 ));
34
35 exit;
36}
37
38// Проверка хеша
39$sign_string = md5(
40 $request['click_trans_id'] .
41 $request['service_id'] .
42 $secret_key .
43 $request['merchant_trans_id'] .
44 $request['merchant_prepare_id'] .
45 $request['amount'] .
46 $request['action'] .
47 $request['sign_time']
48);
49// check sign string to possible
50if($sign_string != $request['sign_string']){
51
52 echo json_encode( array(
53 'error' => -1,
54 'error_note' => 'SIGN CHECK FAILED!'
55 ));
56
57 exit;
58}
59
60if ((int)$request['action'] != 1 ) {
61
62 echo json_encode( array(
63 'error' => -3,
64 'error_note' => 'Action not found'
65 ));
66
67 exit;
68}
69
70// merchant_trans_id - это ID пользователья который он ввел в приложении
71// Здесь нужно проверить если у нас в базе пользователь с таким ID
72
73$user = get_by_id( $request['merchant_trans_id'] );
74if(!$user){
75 echo json_encode( array(
76 'error' => -5,
77 'error_note' => 'User does not exist'
78 ));
79
80 exit;
81}
82
83//
84
85$prepared = get_by_log_id($request['merchant_prepare_id']);
86
87if(!$prepared){
88 echo json_encode( array(
89 'error' => -6,
90 'error_note' => 'Transaction does not exist'
91 ));
92
93 exit;
94}
95
96
97// Если это заказ тогда нужно проверить еще статус заказа, все еще заказ актуален или нет
98// если проверка не проходит то нужно возвращать ошибку -4
99
100// и еще нужно проверить сумму заказа
101// если не проходит тогда нужно возвращать ошибку -2
102
103// Еще одна проверка статуса заказа, не закрыть или нет
104// если заказ отменен тогда нужно возвращать ошибку - 9
105
106// Все проверки прошли успешно, тог здесь будем сохранять в базу что подготовка к оплате успешно прошла
107// можно сделать отдельную таблицу чтобы сохранить входящих данных как лог
108// и присвоит на параметр merchant_confirm_id номер лога
109//
110
111// Хотя все проверки выше были в prepare тоже, нужно убедится что еще раз проверить в complete
112
113// Ошибка деньги с карты пользователя не списались
114if( $request['error'] < 0 ) {
115 // делаем что нибудь (если заказ отменим заказ, если пополнение тогда добавим запись что пополненние не успешно)
116 echo json_encode( array(
117 'error' => -6,
118 'error_note' => 'Transaction does not exist'
119 ));
120
121 exit;
122} else {
123 // Все успешно прошел деньги списаны с карты пользователя тогда записываем в базу (сумма приходит в запросе)
124
125 echo json_encode( array(
126 'error' => 0,
127 'error_note' => 'Success',
128 'click_trans_id' => $request['click_trans_id'],
129 'merchant_trans_id' => $request['merchant_trans_id'],
130 'merchant_comfirm_id' => $log_id,
131 ));
132
133 exit;
134}