اذهب إلى المحتوى

Hafsa Aly

الأعضاء
  • المساهمات

    340
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    4

أجوبة بواسطة Hafsa Aly

  1. بتاريخ 12 ساعات قال Adnane Kadri:

    يحتمل أن يكون ذلك بسبب عدم تحديث ملفات التطبيق المؤقتة , و ذلك في حالة توفر ملف بإسم home.blade.php في مجلد resources/views .

    و لذلك يرجى التأكد من توفر الملف المستهدف و إلا فستحتاجين إنشاءه , ثم سيمكنك محوها عن طريق تنفيذ الأمر التالي : 

    
    php artisan config:clear
    php artisan cache:clear

    فمسارات التطبيق المحددة و المخزنة مؤقتا في :

    
    storage/framework/config.php

    قد لا تزال مضبوطة على المسار الموجود على الجهاز القديم . 

    سوف ارسل لك ملفات المشروع لتساعدنيbasic.zip

    • أعجبني 1
  2.  قمت بازالته ونسيت ان ملف المشروع الخاص بي كان في ملف ال htdocs  هل استطيع استعادته او ماذا افعل لاستعيد ملفات مشروعي

    بتاريخ 4 دقائق مضت قال Hafsa Aly:

     قمت بازالته ونسيت ان ملف المشروع الخاص بي كان في ملف ال htdocs  هل استطيع استعادته او ماذا افعل لاستعيد ملفات مشروعي

    هل هكذا فقدت مشروعي؟؟ 

  3. بتاريخ 59 دقائق مضت قال Adnane Kadri:

    ستحتاج أولا التسجيل بحساب تجاري في بيبال .ثم سنحتاج الدخول إلى لوحة تحكم المطور , أين يمكنك التعرف على نمطين و حسابين  :

    • حساب تجريبي , أو حساب sandbox (لأغراض الإختبار و التطوير).
    • حساب حي , أو حساب live (لأغراض الدفع و التعامل الحقيقي) .
    1. سنقوم بتثبيت مكتبة paypal/rest-api-sdk-php عن طريق مدير الحزم composer : 
    
    composer install paypal/rest-api-sdk-php

       2. لنقم بإنشاء ملف إعداد paypal.php في مجلد config , و لنتأكد من إمتلاكه المحتوى التالي :

    
    <?php 
    return [ 
        'client_id' => env('PAYPAL_CLIENT_ID',''),
        'secret' => env('PAYPAL_SECRET',''),
        'settings' => array(
            'mode' => env('PAYPAL_MODE','sandbox'),
            'http.ConnectionTimeOut' => 30,
            'log.LogEnabled' => true,
            'log.FileName' => storage_path() . '/logs/paypal.log',
            'log.LogLevel' => 'ERROR'
        ),
    ];

       3. لنتوجه إلى ملف البيئة env. و لنتأكد من تعريف المتغيرات التالية : 

    
    PAYPAL_CLIENT_ID=xxxxxxxxx
    PAYPAL_SECRET=xxxxxxxxx
    PAYPAL_MODE=xxxx

    حيث أن المتغيرين PAYPAL_CLIENT_ID و PAYPAL_SECRET يجلبان من لوحة تحكم المطور . 

      4. لنقم بإنشاء متحكم PaymentController يلخص بعض العمليات و لنتأكد من إمتلاكه المحتوى التالي :  

    
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use PayPal\Rest\ApiContext;
    use PayPal\Auth\OAuthTokenCredential;
    use PayPal\Api\Agreement;
    use PayPal\Api\Payer;
    use PayPal\Api\Plan;
    use PayPal\Api\PaymentDefinition;
    use PayPal\Api\PayerInfo;
    use PayPal\Api\Item;
    use PayPal\Api\ItemList;
    use PayPal\Api\Amount;
    use PayPal\Api\Transaction;
    use PayPal\Api\RedirectUrls;
    use PayPal\Api\Payment;
    use PayPal\Api\PaymentExecution;
    use Illuminate\Support\Facades\Input;
    use Redirect;
    use URL;
    
    class PaymentController extends Controller
    {
        public function __construct()
        {
             /** إعداد سياق العملية و بدءها **/
             $paypal_conf = \Config::get('paypal');
          
             $this->_api_context = new ApiContext(new OAuthTokenCredential(
                 $paypal_conf['client_id'],
                 $paypal_conf['secret']) 
             );
             
             // حفظ الاعدادات
             $this->_api_context->setConfig($paypal_conf['settings']);
        }
        
        public function payWithpaypal()
        {
          $amountToBePaid = 100; // قيمة افتراضية يفترض أن تستجلب من الطلب
          
          $payer = new Payer();
          
          $payer->setPaymentMethod('paypal');
          
          /*تعريف عنصر*/
          $item_1 = new Item();
          $item_1->setName('هاتف نقال') /** اسم العنصر **/
                  ->setCurrency('USD')
                  ->setQuantity(1)
                  ->setPrice($amountToBePaid); /** سعر العنصر **/
          
          /*تعريف قائمة عناصر و إضافة العنصر المعرف سابقا*/
          $item_list = new ItemList();
          $item_list->setItems(array($item_1));
          
          
          /*تعريف مقدار*/
          $amount = new Amount();
          $amount->setCurrency('USD')
                 ->setTotal($amountToBePaid);
          
          /** تخصيص روابط إعادة **/
          $redirect_urls = new RedirectUrls();
          
          $redirect_urls->setReturnUrl(URL::route('status'))
                    ->setCancelUrl(URL::route('status'));
          
          /*تعريف تحويل جديد*/
          $transaction = new Transaction();
          $transaction->setAmount($amount)
                  ->setItemList($item_list)
                  ->setDescription('وصف التحويل');   
          
          /*تعريف مدفوعة و إضافة عملية الدفع إليها*/
          $payment = new Payment();
          $payment->setIntent('Sale')
                  ->setPayer($payer)
                  ->setRedirectUrls($redirect_urls)
                  ->setTransactions(array($transaction));
          
          /*تنفيذ العملية*/ 
          try {
               $payment->create($this->_api_context);
          } catch (\PayPal\Exception\PPConnectionException $ex) {
               if (\Config::get('app.debug')) {
                  \Session::put('error', 'فشل الاتصال تحقق من الاتصال');
                  return Redirect::route('/');
               } else {
                  \Session::put('error', 'حدث خطأ');
                  return Redirect::route('/');
               }
          }
          
         foreach ($payment->getLinks() as $link) {
            if ($link->getRel() == 'approval_url') {
               $redirect_url = $link->getHref();
               break;
            }
          }
          
          /** إضافة معرف الدفع إلى الجلسة **/
          \Session::put('paypal_payment_id', $payment->getId());
    if (isset($redirect_url)) {
             /** redirect to paypal **/
             return Redirect::away($redirect_url);
          }
      
          \Session::put('error', 'حدث خطأ');
          return Redirect::route('/');
        }
        
      
        public function getPaymentStatus(Request $request)
        {
          /** جلب معرف العملية من الجلسة **/
          $payment_id = Session::get('paypal_payment_id');
          
          /** حذف المعرف من الجلسة **/
          Session::forget('paypal_payment_id');
          
          if (empty($request->PayerID) || empty($request->token)) {
             session()->flash('error', 'فشل الدفع');
             return Redirect::route('/');
          }
          
          $payment = Payment::get($payment_id, $this->_api_context);
          
          $execution = new PaymentExecution();
          
          $execution->setPayerId($request->PayerID);
          
          /**تنفيذ العملية **/
          $result = $payment->execute($execution, $this->_api_context);
          
          if ($result->getState() == 'approved') {
             session()->flash('success', 'نجح الدفع');
             return Redirect::route('/');
          }
          
          session()->flash('error', 'فشل الدفع');
          
          return Redirect::route('/');
        }
    }

    و بالطبع فإننا سنحتاج تعريف مسارين : 

    • واحد للدفع .
    • واحد لتتبع مسار أو حالة الدفع .

    و ليكن : 

    
    Route::post('/payment', ['as' => 'payment', 'uses' => 'PaymentController@payWithpaypal']);
    Route::get('/payment/status',['as' => 'status', 'uses' => 'PaymentController@getPaymentStatus']);

    حيث يتم إرسال طلب POST بمعلومات العنصر + تفاصيل عملية الدفع , ثم طلب GET لجلب حالة الدفع .

    و هذا هو الشكل الأبسط لعملية الدفع عبر بيبال , و بالطبع فإنه يمكن تخصيصها على نطاق واسع و إضافة الكثير من التفاصيل , كأن نقوم بحفظ تفاصيل العملية في قواعد البيانات لدينا و هكذا . 

    كما يمكن أيضا إستخدام أحد الحزم التي تلخص العملية أكثر , من مثل حزمة srmklive/laravel-paypal .

    شكرا كثيرا لك ولكن هل من الممكن ان ترسل لي ايضا الخطوات عندما استخدم حزمةsrmklive/laravel-paypal

    • أعجبني 1
  4. شكرا لك ولكن ان استطعت ان تعطيني لمحه بسيطه عن هذا الموضوع فشكرا لك

    بتاريخ 5 دقائق مضت قال Mohamd Imran:

    Pusher هو مدمج في لارافيل ,أي لن تحتاجي إلى Package  لكن إن أردتي Package تقوم بهذا العمل تفضل هنا Real-Time Chat Package for Laravel

    لم استطع الحصول ع معلومه منه غي واضح مثل pusher

  5. بتاريخ 3 ساعات قال عبود سمير:

    بإمكانك إستخدام حزمة Maatwebsite / Laravel-Excel لتحقيق ذلك:

    حتى تعمل الحزمة بالشكل المطلوب لديها بعض المتطلبات:

    
    PHP: ^7.2\|^8.0
    Laravel: ^5.8
    PhpSpreadsheet: ^1.15
    PHP extension php_zip enabled
    PHP extension php_xml enabled
    PHP extension php_gd2 enabled
    PHP extension php_iconv enabled
    PHP extension php_simplexml enabled
    PHP extension php_xmlreader enabled
    PHP extension php_zlib enabled

    تثبيت الحزمة:

    
    composer require maatwebsite/excel
    

    يُمكنك تسجيل مزود الخدمة الخاص بالحزمة بنفسك إن أردت في ملف config/app.php:

    
    'providers' => [
        /*
         * Package Service Providers...
         */
        Maatwebsite\Excel\ExcelServiceProvider::class,
    ]

    و حفظ الإسم المستعار في المصفوفة aliases:

    
    'aliases' => [
        ...
        'Excel' => Maatwebsite\Excel\Facades\Excel::class,
    ]

    هاتين الخطوتين ليستا ضروريتان لأن الحزمة auto-discovered.

    لنشر ملف الإعدادات الخاص بالحزمة في مجلد الإعدادات:

    
    php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

    تدعم الحزمة التصدير و الإستيراد من و إلى قاعدة البيانات،

    مثال بسيط لتصدير سجلات النموذج User:

    نقوم بإنشاء صنف عن طريق الأمر:

    
    php artisan make:export UsersExport --model=User
    

    سنجد مجلد جديد بالإسم Exports في المجلد app و بداخله الملف UsersExport.php و أي صنف ننُشؤه لاحقاً بنفس الأمر نجده في نفس المسار.

    نقوم بملء الملف بالشكل التالي:

    
    <?php
    
    namespace App\Exports;
    
    use App\Models\User;
    use Maatwebsite\Excel\Concerns\FromCollection;
    
    class UsersExport implements FromCollection
    {
        public function collection()
        {
            return User::all();
        }
    }

    يُمكن التصدير من مجموعة (Collection) او من إستعلام أو من صفحة عرض و كل الطرق مشروحة في توثيق الحزمة.

    في المتحكم المسؤول نقوم بإنشاء دالة جديدة بالشكل التالي:

    
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Exports\UsersExport;
    use Maatwebsite\Excel\Facades\Excel;
    
    class UsersController extends Controller 
    {
        public function export() 
        {
            return Excel::download(new UsersExport, 'users.xlsx');
        }
    }

    ثم ننُشئ المسار الذي من خلاله نصل الى الدالة export:

    
    Route::get('users/export/', 'UsersController@export');

    الآن بإمكانك إنشاء زر للوصول إلى المسار او يُمكنك تصفح الرابط مباشرة من المتصفح و سيتم تحميل ملف إكسل بالإسم users.xlsx. يحتوي على البيانات.

    بإمكانك الإطلاع على التوثيق الرسمي للحزمة للإطلاع على الأمر بشكل موسع: Laravel Excel

    شكرا لك . هل استطيع عمل filter  مع التصدير

×
×
  • أضف...