laravel-paystack icon indicating copy to clipboard operation
laravel-paystack copied to clipboard

Call to undefined method Unicodeveloper\Paystack\Paystack::createSubAccount()

Open frankly034 opened this issue 7 years ago • 2 comments

I tried implementing the subaccount creation using the Laravel api method Paystack::createSubAccount(); but returned the error "Call to undefined method Unicodeveloper\Paystack\Paystack::createSubAccount()". I also noticed that all the other subaccount methods to fetchsubaccount or list subaccount have no implementation yet.

frankly034 avatar Aug 03 '18 20:08 frankly034

Hello good day . If you check the repo here on GitHub , you would see that the methods for subaccounts have been implemented . However for some reason , the package doesn't auto update on packagist ( where composer fetches the package from ) . Hence when you use " composer require unicodeveloper/laravel-paystack" , composer installs an older version of the package that existed before Paystack implemented the subaccounts feature

sayopaul avatar Aug 30 '18 20:08 sayopaul

please i need your help. i want to integrate paystack payment getway in laravel 8 livewire component but am having this error Error Call to undefined method Unicodeveloper\Paystack\Paystack::make() http://localhost:8000/checkout take look at my settings For Checkout component

validateOnly($fields,[ 'firstname' =>'required', 'lastname' =>'required', 'mobile' =>'required|numeric', 'email' =>'required|email', 'line1' =>'required', 'city' =>'required', 'province' =>'required', 'country' =>'required', 'zipcode' =>'required', 'paymentmode' => 'required' ]); if($this->ship_to_different) { $this->validateOnly($fields,[ 's_firstname' =>'required', 's_lastname' =>'required', 's_mobile' =>'required|numeric', 's_email' =>'required|email', 's_line1' =>'required', 's_city' =>'required', 's_province' =>'required', 's_country' =>'required', 's_zipcode' =>'required' ]); } if($this->paymentmode == 'card') { $this->validateOnly($fields,[ 'card_no' => 'required|numeric', 'exp_month' => 'required|numeric', 'exp_year' => 'required|numeric', 'cvc' => 'required|numeric' ]); } } public function placeOrder() { $this->validate([ 'firstname' =>'required', 'lastname' =>'required', 'mobile' =>'required|numeric', 'email' =>'required|email', 'line1' =>'required', 'city' =>'required', 'province' =>'required', 'country' =>'required', 'zipcode' =>'required', 'paymentmode' => 'required' ]); if($this->paymentmode == 'card') { $this->validate([ 'card_no' => 'required|numeric', 'exp_month' => 'required|numeric', 'exp_year' => 'required|numeric', 'cvc' => 'required|numeric' ]); } $order = new Order(); $order->user_id = Auth::user()->id; $order->subtotal = session()->get('checkout')['subtotal']; $order->discount = session()->get('checkout')['discount']; $order->tax = session()->get('checkout')['tax']; $order->total = session()->get('checkout')['total']; $order-> firstname = $this->firstname; $order-> lastname = $this->lastname; $order-> mobile = $this->mobile; $order-> email = $this->email; $order-> line1 = $this->line1; $order-> line2 = $this->line2; $order-> city = $this->city; $order-> province = $this->province; $order-> country = $this->country; $order-> zipcode = $this->zipcode; $order->status = 'ordered'; $order->is_shipping_different = $this->ship_to_different ? 1:0; $order->save(); foreach(Cart::instance('cart')->content()as $item) { $orderItem = new OrderItem(); $orderItem->product_id = $item->id; $orderItem->order_id = $order->id; $orderItem->price = $item->price; $orderItem->quantity = $item->qty; $orderItem->save(); } if($this->ship_to_different) { $this->validate([ 's_firstname' =>'required', 's_lastname' =>'required', 's_mobile' =>'required|numeric', 's_email' =>'required|email', 's_line1' =>'required', 's_city' =>'required', 's_province' =>'required', 's_country' =>'required', 's_zipcode' =>'required' ]); $shipping = new Shipping(); $shipping->order_id = $order->id; $shipping-> firstname = $this->s_firstname; $shipping-> lastname = $this->s_lastname; $shipping-> mobile = $this->s_mobile; $shipping-> email = $this->s_email; $shipping-> line1 = $this->s_line1; $shipping-> line2 = $this->s_line2; $shipping-> city = $this->s_city; $shipping-> province = $this->s_province; $shipping-> country = $this->s_country; $shipping-> zipcode = $this->s_zipcode; $shipping->save(); } if($this->paymentmode == 'cod') { $this->makeTransaction($order->id,'pending'); $this->resetCart(); } else if($this->paymentmode == 'card') { $paystack = Paystack::make(env('sk_test_827a36210be0e3a737f323aecd3c2cd0dd6b2615')); try{ $token = $paystack->tokens()->create([ 'card' => [ 'number' => $this->card_no, 'exp_month' => $this->exp_month, 'exp_year' => $this->exp_year, 'cvc' => $this->cvc ] ]); if(!isset($token['id'])) { session()->flash('paystack_error','The Paystack token was not generated correctly!'); $this-> thankyou = 0; } $customer = $paystack-> customers()->create([ 'name' => $this->firstname . ' ' . $this->lastname, 'phone' =>$this->mobile, 'email' =>$this->email, 'address' =>[ 'line1' =>$this->line1, 'postal_code' =>$this->zipcode, 'state' => $this->state, 'country' => $this->country ], 'shipping' => [ 'name' => $this->firstname . '' . $this->lastname, 'address' =>[ 'line1' =>$this->line1, 'postal_code' =>$this->zipcode, 'state' => $this->state, 'country' => $this->country ], ], 'source' => $token['id'] ]); $charge = $paystack->charges()->create([ 'customer' => $customer['id'], 'currency' => 'NGN', 'amount' => session()->get('checkout')['total'], 'description' => 'payment for order no' . $order->id ]); if($charge['status'] == 'succeeded') { $this-> makeTransaction($order->id, 'approved'); $this->resetCart(); } else { session()->flash('paystack_error','Error in Transaction!'); $this->thankyou = 0; } }catch(Exception $e){ session()->flash('paystack_error',$e->getMessage()); $this->thankyou = 0; } } } public function resetCart() { $this->thankyou = 1; Cart::instance('cart')->destroy(); session()->forget('checkout'); } public function makeTransaction($order_id,$status) { $transaction = new Transaction(); $transaction->user_id = Auth::user()->id; $transaction->order_id = $order_id; $transaction->mode = $this->paymentmode; $transaction->status = $status; $transaction->save(); } public function verifyForCheckout() { if(!Auth::check()) { return redirect()->route('login'); } else if($this->thankyou) { return redirect()->route('thankyou'); } else if(!session()->get('checkout')) { return redirect()->route('product.cart'); } } public function render() { $this->verifyForCheckout(); return view('livewire.checkout-component')->layout("layouts.base"); } } For config/app/settings env('APP_NAME', 'Laravel'), /* |-------------------------------------------------------------------------- | Application Environment |-------------------------------------------------------------------------- | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various | services the application utilizes. Set this in your ".env" file. | */ 'env' => env('APP_ENV', 'production'), /* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | */ 'debug' => (bool) env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ 'url' => env('APP_URL', 'http://localhost'), 'asset_url' => env('ASSET_URL', null), /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | */ 'timezone' => 'UTC', /* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ 'locale' => 'en', /* |-------------------------------------------------------------------------- | Application Fallback Locale |-------------------------------------------------------------------------- | | The fallback locale determines the locale to use when the current one | is not available. You may change the value to correspond to any of | the language folders that are provided through your application. | */ 'fallback_locale' => 'en', /* |-------------------------------------------------------------------------- | Faker Locale |-------------------------------------------------------------------------- | | This locale will be used by the Faker PHP library when generating fake | data for your database seeds. For example, this will be used to get | localized telephone numbers, street address information and more. | */ 'faker_locale' => 'en_US', /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | | This key is used by the Illuminate encrypter service and should be set | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | */ 'key' => env('APP_KEY'), 'cipher' => 'AES-256-CBC', /* |-------------------------------------------------------------------------- | Autoloaded Service Providers |-------------------------------------------------------------------------- | | The service providers listed here will be automatically loaded on the | request to your application. Feel free to add your own services to | this array to grant expanded functionality to your applications. | */ 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, Gloudemans\Shoppingcart\ShoppingcartServiceProvider::class, Unicodeveloper\Paystack\PaystackServiceProvider::class, /* * Package Service Providers... */ /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\FortifyServiceProvider::class, App\Providers\JetstreamServiceProvider::class, ], /* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | */ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Arr' => Illuminate\Support\Arr::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'Date' => Illuminate\Support\Facades\Date::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Http' => Illuminate\Support\Facades\Http::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'Str' => Illuminate\Support\Str::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, 'Cart'=> Gloudemans\Shoppingcart\Facades\Cart::class, 'Paystack' => Unicodeveloper\Paystack\Facades\Paystack::class, ], ]; For env. settings PAYSTACK_PUBLIC_KEY=pk_test_1694c701c73219fd261e3d324c2be6d9fd72acbd PAYSTACK_SECRET_KEY=sk_test_827a36210be0e3a737f323aecd3c2cd0dd6b2615 PAYSTACK_PAYMENT_URL=https://api.paystack.co [email protected] and For Checkout resources/ view/livewire
{{--

Returning customer? Click here to login

Quisque gravida turpis sit amet nulla posuere lacinia. Cras sed est sit amet ipsum luctus.

Lost your password?

Have a coupon? Click here to enter your code

@if(!Session::has('coupon'))
@if (Session::has('coupon_message'))
{{Session::get('coupon_message')}}
@endif

@endif
--}}

Billing Details

{{--
--}}
@error('firstname'){{$message}}@enderror
@error('lastname'){{$message}}@enderror
@error('line1'){{$message}}@enderror
{{--
--}}
@error('email'){{$message}}@enderror
@error('mobile'){{$message}}@enderror
@error('city'){{$message}}@enderror
@error('province'){{$message}}@enderror
@error('country'){{$message}}@enderror
@error('zipcode'){{$message}}@enderror

@if ($ship_to_different)
{{--
--}}
@error('s_firstname'){{$message}}@enderror
@error('s_lastname'){{$message}}@enderror
@error('s_line1'){{$message}}@enderror
{{--
--}}
@error('s_email'){{$message}}@enderror
@error('s_mobile'){{$message}}@enderror
@error('s_city'){{$message}}@enderror
@error('s_province'){{$message}}@enderror
@error('s_country'){{$message}}@enderror
@error('s_zipcode'){{$message}}@enderror
@endif

Your order

@if (Session::has('checkout')) @endif
Product Total
Vestibulum suscipit × 1 0.00
Vestibulum suscipit × 1 0.00
Cart Subtotal 0.00
Order Total${{Session::get('checkout')['total']}}

Payment Method

@if ($paymentmode == 'card')
@if (Session::has('paystack_error')) @endif
@error('card_no'){{$message}}@enderror
@error('exp_month'){{$message}}@enderror
@error('exp_year'){{$message}}@enderror
@error('cvc'){{$message}}@enderror
@endif
Cash On Delivery

Order Now and Pay on Delivery.

Card payment

Debit / Credit Card.

PayPal

Make your payment directly into our bank account. Please use your Order ID as the payment reference. Your order won’t be shipped until the funds have cleared in our account.

@error('paymentmode'){{$message}}@enderror
{{-- --}} please help

godianski avatar Nov 26 '21 10:11 godianski