Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
37 | class Api |
||
38 | { |
||
39 | protected $keyId; |
||
40 | protected $publicKeyId; |
||
41 | |||
42 | /** |
||
43 | * Crear un nuevo objeto de Instapago. |
||
44 | * |
||
45 | * @param string $keyId llave privada |
||
46 | * @param string $publicKeyId llave publica |
||
47 | * Requeridas. |
||
48 | */ |
||
49 | public function __construct($keyId, $publicKeyId) |
||
57 | |||
58 | /** |
||
59 | * Crear un pago directo. |
||
60 | * |
||
61 | * @param array<string> $fields Los campos necesarios |
||
62 | * para procesar el pago. |
||
63 | * |
||
64 | * @throws Exceptions\InstapagoException |
||
65 | * |
||
66 | * @return array<string> Respuesta de Instapago |
||
67 | */ |
||
68 | public function directPayment($fields) |
||
72 | |||
73 | /** |
||
74 | * Crear un pago diferido o reservado. |
||
75 | * |
||
76 | * @param array<string> $fields Los campos necesarios |
||
77 | * para procesar el pago. |
||
78 | * |
||
79 | * @throws Exceptions\InstapagoException |
||
80 | * |
||
81 | * @return array<string> Respuesta de Instapago |
||
82 | */ |
||
83 | public function reservePayment($fields) |
||
87 | |||
88 | /** |
||
89 | * Crear un pago. |
||
90 | * |
||
91 | * @param string $type tipo de pago ('1' o '0') |
||
92 | * @param array<string> $fields Los campos necesarios |
||
93 | * para procesar el pago. |
||
94 | * |
||
95 | * @throws Exceptions\InstapagoException |
||
96 | * |
||
97 | * @return array<string> Respuesta de Instapago |
||
98 | */ |
||
99 | private function payment($type, $fields) |
||
122 | |||
123 | /** |
||
124 | * Completar Pago |
||
125 | * Este método funciona para procesar un bloqueo o pre-autorización |
||
126 | * para así procesarla y hacer el cobro respectivo. |
||
127 | * |
||
128 | * @param array<string> $fields Los campos necesarios |
||
129 | * para procesar el pago. |
||
130 | * |
||
131 | * @throws Exceptions\InstapagoException |
||
132 | * |
||
133 | * @return array<string> Respuesta de Instapago |
||
134 | */ |
||
135 | public function continuePayment($fields) |
||
150 | |||
151 | /** |
||
152 | * Información/Consulta de Pago |
||
153 | * Este método funciona para procesar un bloqueo o pre-autorización |
||
154 | * para así procesarla y hacer el cobro respectivo. |
||
155 | * |
||
156 | * @param string $id_pago ID del pago a consultar |
||
157 | * |
||
158 | * @throws Exceptions\InstapagoException |
||
159 | * |
||
160 | * @return array<string> Respuesta de Instapago |
||
161 | */ |
||
162 | View Code Duplication | public function query($id_pago) |
|
179 | |||
180 | /** |
||
181 | * Cancelar Pago |
||
182 | * Este método funciona para cancelar un pago previamente procesado. |
||
183 | * |
||
184 | * @param string $id_pago ID del pago a cancelar |
||
185 | * |
||
186 | * @throws Exceptions\InstapagoException |
||
187 | * |
||
188 | * @return array<string> Respuesta de Instapago |
||
189 | */ |
||
190 | View Code Duplication | public function cancel($id_pago) |
|
207 | |||
208 | /** |
||
209 | * Realiza Transaccion |
||
210 | * Efectúa y retornar una respuesta a un metodo de pago. |
||
211 | * |
||
212 | * @param $url string endpoint a consultar |
||
213 | * @param $fields array datos para la consulta |
||
214 | * @param $method string verbo http de la consulta |
||
215 | * |
||
216 | * @return array resultados de la transaccion |
||
217 | */ |
||
218 | public function curlTransaccion($url, $fields, $method) |
||
242 | |||
243 | /** |
||
244 | * Verifica y retornar el resultado de la transaccion. |
||
245 | * |
||
246 | * @param $obj datos de la consulta |
||
247 | * |
||
248 | * @return array datos de transaccion |
||
249 | */ |
||
250 | public function checkResponseCode($obj) |
||
289 | } |
||
290 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.