Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fatal error: Uncaught Error: Class 'Openpay\Data\OpenpayApiResourceBase' not found in #60

Open
ghost opened this issue Jul 23, 2022 · 9 comments

Comments

@ghost
Copy link

ghost commented Jul 23, 2022

Encontre este error en la ejecucion: Fatal error: Uncaught Error: Class 'Openpay\Data\OpenpayApiResourceBase' not found in

El problema lo solucione cambiando el orden de los require

Estos dos los coloque antes del require de /Openpay/Data/Openpay.php

Así quedaría:

require(dirname(FILE) . '/Openpay/Data/OpenpayApiError.php');
require(dirname(FILE) . '/Openpay/Data/OpenpayApiResourceBase.php');

require(dirname(FILE) . '/Openpay/Data/Openpay.php');
require(dirname(FILE) . '/Openpay/Data/OpenpayApi.php');
........

@MonicaPArroyo
Copy link

Hace un mes hice un pull request para solucionar eso. No lo han aceptado ☹️

@amadobarcenas
Copy link

Orlando, creo que el cambio de orden de los requiere es en el archivo raiz de /proyecto/Openpay.php
Si, a mi tambien me arrojaba exactamente el mismo error y cambie el orden y ya no lo muestra, pero ahora muestra un nuevo error de: Fatal error: Class 'Openpay' not found in
a ti te dio ese error?

@MonicaPArroyo
Copy link

Orlando, creo que el cambio de orden de los requiere es en el archivo raiz de /proyecto/Openpay.php
Si, a mi tambien me arrojaba exactamente el mismo error y cambie el orden y ya no lo muestra, pero ahora muestra un nuevo error de: Fatal error: Class 'Openpay' not found in
a ti te dio ese error?

@amadobarcenas, Checa los comentarios en el último Pull Request que tiene en el nombre algo de "cambio en el orden de los require"

@ghost
Copy link
Author

ghost commented Jul 27, 2022

Hola Monica, si ese error me salía despues de cambiar el orden de los require. En principio se solucionó colocando manualmente las líneas que me indicaste :
image

En el dummy que hice funcionó asi:, pero por temas del RAD de desarrollo no podia incluir las clausulas USE, entonces lo hice de esta manera:

require_once ('./vendor/autoload.php');

$op = new Openpay\Data\Openpay();
$op->setId($vId);
$op->setApiKey($vPrivateKey);
$op->setProductionMode(false);
$op->setCountry('CO');
$openpay = $op->getInstance($vId, $vPrivateKey, 'CO');

y despues de eso funciono correctamente

@amadobarcenas
Copy link

Hola.. Gracias Monica y Orlando
Hasta Aqui todo bien haciendo pruebas en modo Sandbox con Tarjetas de Prueba Validas
PERO...
Cuando se hacen pruebas con cualquier Tarjeta Invalida ahora marca error el archivo: Openpay/Data/OpenpayApiConnector.php on line 249

Creo es por haber alterado el orden de las lineas
Abajo dejo todo el error, y veo que el archivo Openpay\Data\OpenpayApiTransactionError si ejecuta la instruccion indicando que la tarjeta no tiene Fondos, pero despues occure el error del archivo OpenpayApiConnector.php


Fatal error: Uncaught exception 'Openpay\Data\OpenpayApiTransactionError' with message 'The card doesn't have sufficient funds' in /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiConnector.php:249 Stack trace: #0 /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiConnector.php(208): Openpay\Data\OpenpayApiConnector->handleRequestError('{"http_code":40...', 402, Array) #1 /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiConnector.php(66): Openpay\Data\OpenpayApiConnector->interpretResponse('{"http_code":40...', 402) #2 /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiConnector.php(291): Openpay\Data\OpenpayApiConnector->_request('post', '/charges', Array) #3 /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiResourceBase.php(266): Openpay\Data\OpenpayApiConnector::request('post', '/charges', Array) #4 /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiDerivedResource.php(58): Openpay\Data\OpenpayApiResourceBase->_create('Openpay\Resourc...', Array, Array) #5 /home/tndademo/ in /home/tndademo/public_html/openpay/Openpay/Data/OpenpayApiConnector.php on line 249

@ghost
Copy link
Author

ghost commented Jul 31, 2022

Hola amadobarcenas, tengo una duda, tu estas solicitando la tarjeta con openpay.js? o estas llamando al formulario propio de openpay?
Mi codigo es como este (despues de los include y require)

$openpay = Openpay::getInstance('xxxxxxx', 'xxxxxxxx', 'CO');

//Para pagos con TC


$customerData = array(
 'external_id' => '75478547',
 'name' => 'Pedro Diego',
 'last_name' => 'Alatorre Martínez',
 'email' => '[email protected]',
 'phone_number' => '16362801',
 'customer_address' => array(
     'department' => 'Medellín',
     'city' => 'Antioquía',
     'additional' => 'Avenida 7f bis # 138-58 Apartamento 942'
  )

);

$customer = $openpay->customers->add($customerData);				
//$customer = $openpay->customers->get("ag6tmm7lpjypkvyqw7l3");

$chargeRequest = array(
	"method" => "card",
	'amount' => 111,
	'iva' => '10',
	'order_id' => uniqid('php_'),
	'description' => 'Cargo desde terminal virtual de 111',
	'customer' => $customer,
	'send_email' => false,
	'currency'=>'COP',
	'confirm' => false,
	'redirect_url' => 'http://www.openpay.co/index.html')
;

$charge = $openpay->charges->create($chargeRequest);
$url=$charge->payment_method->url;
header("Location: ".$url);
exit();

@amadobarcenas
Copy link

Orlando, gracias por responder...

Si, estoy llamando openpay.js y solo se usara para pagos con TC y las pruebas con tarjetas validas si funciona perfecto, pero el problema es con las tarjetas invalidas

Este es mi codigo en php (igual, despues de los include y require )

$openpay = $op->getInstance($vId, $vPrivateKey, 'MX');

$customer = array(
'name' => $_POST["nombre"],
'last_name' => $_POST["apellidos"],
'phone_number' => $_POST["telefono"],
'email' => $_POST["email"],);

$chargeData = array(
'method' => 'card',
'source_id' => $_POST["token_id"],
'amount' => $_POST["amount"],
'description' => $_POST["description"],
'device_session_id' => $_POST["deviceIdHiddenFieldName"],
'customer' => $customer
);

$charge = $openpay->charges->create($chargeData);

@caos30
Copy link

caos30 commented Jul 22, 2024

Conseguí resolver el problema:

  1. como otros han dicho, tuve que alterar el orden de los require() para que queden de este modo en el archivo Openpay.php:
require(__DIR__ . '/Openpay/Data/Openpay.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiResourceBase.php');
require(__DIR__ . '/Openpay/Data/OpenpayApi.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiAuthError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiConnectionError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiConnector.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiConsole.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiDerivedResource.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiRequestError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiTransactionError.php');

Nota: no puedo entender que esto no esté bie hecho 😓 ... para que luego los jovencitos se rían de la programación "funcional"... qué obsesión con crear 10 archivos diferentes para crear 10 subclases diferentes. Algunos se enamoraron en exceso de la "herencia de clases" (modo ironía "on").

  1. después de alterar el orden de la carga de esos archivos, aparece el error de Class 'Openpay' not found in.... Eso se corrige fácilmente: debes colocar al inicio del archivo PHP en donde declaras la clase el comando "use" mencionando el "namespace" creado por la clas. Por ejemplo:
require_once(__DIR__.'/openpay/Openpay.php');
use Openpay\Data\Openpay;

y así ya puedes usar la clase con algo como:

$openpay = Openpay::getInstance($id, $apiKey, $country, $publicIp);

Conclusión: POR FAVOR CAMBIEN 1) el orden de esos requires en el código, 2) mencionen el uso de "use Openpay\Data\Openpay;" en el archivo README de este repositorio... porqué acabo de tirar una tarde de mi vida por culpa de estos dos estúpidos errores, que ya les mencionaron hace 2 años !!?? Luego algunos se preguntarán porqué las empresas yanquis nos ganan en casi todo 😓

@caos30
Copy link

caos30 commented Jul 22, 2024

I managed to solve the problem:

  1. As others have mentioned, I had to change the order of the require() statements in the Openpay.php file to be as follows:
require(__DIR__ . '/Openpay/Data/Openpay.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiResourceBase.php');
require(__DIR__ . '/Openpay/Data/OpenpayApi.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiAuthError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiConnectionError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiConnector.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiConsole.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiDerivedResource.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiRequestError.php');
require(__DIR__ . '/Openpay/Data/OpenpayApiTransactionError.php');

Note: I can't understand why this isn't done properly 😓 ... and then young developers laugh at "functional" programming... what an obsession with creating 10 different files to create 10 different subclasses. Some people have fallen too much in love with "class inheritance" (irony mode "on").

  1. After changing the order of loading these files, the error Class 'Openpay' not found in... appears. This is easily fixed: you need to place the "use" command mentioning the namespace created by the class at the beginning of the PHP file where you declare the class. For example:
require_once(__DIR__.'/openpay/Openpay.php');
use Openpay\Data\Openpay;

And then you can use the class with something like:

$openpay = Openpay::getInstance($id, $apiKey, $country, $publicIp);

Conclusion: PLEASE CHANGE 1) the order of these requires in the code, 2) mention the use of "use Openpay\Data\Openpay;" in the README file of this repository... why did I just waste an afternoon of my life because of these two stupid errors, which were already mentioned to you 2 years ago!!?? Then some people wonder why American companies beat us in almost everything 😓

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants