alejogutierrez / laravel-payu

Una interfaz sencilla para utilizar el sdk de PayU en Laravel
MIT License
28 stars 19 forks source link

Error: Call to a member function payWith() #6

Closed alexlovar closed 4 years ago

alexlovar commented 4 years ago

hola, podrias ayudarme con este error, luego de hacer la instalacion en laravel 7, al ejecutar una consulta de prueba en postman me genera este error: Error: Call to a member function payWith() on int in file /var/www/ok/app/Http/Controllers/Payupay.php on line 63 este my controller Payupay.php

`

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
use Validator;
use Alexo\LaravelPayU\Payable;
use App\Order;

class Payupay extends Controller
{
   public function index(Request $request) {

      $validator = Validator::make($request->all(), [ 
                'card_number' => 'required', 
                'card_expiration' => 'required', 
                'card_security_code' => 'required', 
                'payment_method'=> 'required', 
                'value'=> 'required', 
                'cardName'=> 'required', 
                'dni'=> 'required', 
            ]);
    if ($validator->fails()) { 
                return response()->json(['error'=>$validator->errors()], 401);            
            }

          $input = $request->all(); 

         $card_number = $input['card_number'] ;
         $card_expiration = $input['card_expiration'];
         $card_security_code = $input['card_security_code'];
         $payment_method = $input['payment_method'];
         $value = $input['value'];
         $cardname = $input['cardName'];
         $dni = $input['dni']; 

         $payment_method  = strtoupper($payment_method );
         //$payment_method='MASTERCARD';
         $reference = time();

$data = [   
            \PayUParameters::REFERENCE_CODE => $reference,
            \PayUParameters::DESCRIPTION => "Pago suscripcion  Apps",
            \PayUParameters::VALUE => $value,
            \PayUParameters::CURRENCY => "COP",
            \PayUParameters::PAYER_NAME => $cardname,
            \PayUParameters::PAYER_EMAIL =>"mail@yahoo.com",
            \PayUParameters::PAYER_CONTACT_PHONE => "0123456789",
            \PayUParameters::CREDIT_CARD_NUMBER => $card_number,
            \PayUParameters::CREDIT_CARD_EXPIRATION_DATE => $card_expiration,
            \PayUParameters::CREDIT_CARD_SECURITY_CODE=> $card_security_code,
            \PayUParameters::PAYMENT_METHOD => $payment_method ,
            \PayUParameters::INSTALLMENTS_NUMBER => "1",                    
        ];

$order = $reference ;

    $order->payWith($data, function($response, $order) {
    if ($response->code == 'SUCCESS') {
            $response['error'] = false;
           return response([
           'Result' => "Success",
            'data' => $response
             ]);

    } else {
        $response['error'] = true;
        return response([
           'Result' => "Success",
            'data' => $response
             ]);
    }
      }, function($error) {
           // ... Manejo de errores PayUException, InvalidArgument
     }); 
}
}

` No se si el order escribe algun conteido en mysql o como podria retirar el $order, ya que no voy a llevar ningun registro aparte de las transacciones, solo reigstrar la operacion y devoler un response, seria algo como:

payWith($data,$response) {
    if ($response->code == 'SUCCESS') {
            $response['error'] = false;
           return response([
           'Result' => "Success",
            'data' => $response
             ]);
    } else {
        $response['error'] = true;
        return response([
           'Result' => "Success",
            'data' => $response
             ]);
    }
      }

de antemano gracias por su ayuda

alejogutierrez commented 4 years ago

Amigo el problema que tengo con la implementación es que nunca quedaron las funciones de forma independiente, entonces sin importar si se va a guardar la orden de pago hay que tener una clase que use el trait "Payable" para poder usar la función "payWith". En la clase que me envía esta poniendo la línea que carga el trait "use Alexo\LaravelPayU\Payable;" pero no lo está usando. Entonces hay dos opciones usa el trait sobre el modelo "order" pero sin guardar datos en la base de datos o lo usa directamente sobre el controller haciendo referencia a si mismo es decir "$this->payWith()"