小白兔晒黑了

导航

 

1 自己创建一个ServiceProvider的步骤

1.1 创建服务提供者

php artisan make:provider FamilyServiceProvider 

执行成功后会出现这个文件 \app\Providers\FamilyServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class FamilyServiceProvider extends ServiceProvider
{
    
    
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
     
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}
 

1.2 创建服务

1.2.1  app\Service\Family\FamilyService.php

<?php
namespace App\Service\Family;
class FamilyService
{
    public function __construct(PersonService $person,TvService $tv)
    {
        $this->person = $person;
        echo 'Family实例创建成功 <br>';
    }
    
    public  function  testabc()
    {
        $this->person->test();
    }
}
View Code

1.2.2 app\Service\Family\PersonService.php

<?php
namespace App\Service\Family;
class PersonService
{
    public function __construct(Walk $walk)
    {
        echo "person实例创建成功</br>";
    }
    public function test()
    {
        echo "我是person类中的方法";
    }
}
View Code

1.2.3 app\Service\Family\TvService.php

<?php
namespace App\Service\Family;
class TvService
{
    public function __construct()
    {
        echo "Tv实例创建成功</br>";
    }
    public function test()
    {
        echo "我是tv类中的方法";
    }
}
View Code

1.2.4 app\Service\Family\Walk.php

<?php
namespace App\Service\Family;
class Walk
{
    public function __construct()
    {
        echo "Walk的实例创建成功<br>";
    }
}
View Code

1.3在 providers数组里声明服务提供者

\config\app.php

  /*
         * Package Service Providers...
         */
        App\Providers\FamilyServiceProvider::class,

1.4 在服务提供者里注册服务

    public function register()
    {
        
        //第1种方式
        $this->app->singleton('Family', function () {
            return FamilyService(new PersonService(),new TvService());
        });
        //第2种方式
        //$this->app->bind(FamilyService::class);
        //$this->app->bind("App\Service\Family\FamilyService");
    
        //第3种方式
        //$this->app->bind("Family","App\Service\Family\FamilyService");
        
    }

1.5 使用

routes\web.php

Route::get('/', function () {
//    别名的方式
//    app("Family")->testabc();
//    完全路径调用
    app('App\Service\Family\FamilyService')->testabc();
//     return view('welcome');
});

 

2 yansongda/laravel-pay 支付服务

2.1 安装

composer require yansongda/laravel-pay

 * 如果不是laravel  用 yansongda/pay

vendor\yansongda\laravel-pay\src\PayServiceProvider.php

  public function register()
    {
        $this->mergeConfigFrom(dirname(__DIR__).'/config/pay.php', 'pay');

        $this->app->singleton('pay.alipay', function () {
            return Pay::alipay(config('pay.alipay'));
        });
        $this->app->singleton('pay.wechat', function () {
            return Pay::wechat(config('pay.wechat'));
        });
    }

 

2.2 使用说明

https://packagist.org/packages/yansongda/laravel-pay

https://github.com/yansongda/pay

2.3 注册

laravel >5.5 自动注册

php artisan vendor:publish --provider="Yansongda\LaravelPay\PayServiceProvider" --tag=laravel-pay

\vendor\laravel\framework\src\Illuminate\Contracts\Foundation\Application.php

  'yansongda/laravel-pay' => 
  array (
    'providers' => 
    array (
      0 => 'Yansongda\\LaravelPay\\PayServiceProvider',
    ),
    'aliases' => 
    array (
      'Pay' => 'Yansongda\\LaravelPay\\Facades\\Pay',
    ),
  ),

config\pay.php

<?php

return [
    'alipay' => [
        // 支付宝分配的 APPID
        'app_id' => env('ALI_APP_ID', ''),

        // 支付宝异步通知地址
        'notify_url' => '',

        // 支付成功后同步通知地址
        'return_url' => '',

        // 阿里公共密钥,验证签名时使用
        'ali_public_key' => env('ALI_PUBLIC_KEY', ''),

        // 自己的私钥,签名时使用
        'private_key' => env('ALI_PRIVATE_KEY', ''),

        // 使用公钥证书模式,请配置下面两个参数,同时修改 ali_public_key 为以 .crt 结尾的支付宝公钥证书路径,如(./cert/alipayCertPublicKey_RSA2.crt)
        // 应用公钥证书路径
        // 'app_cert_public_key' => './cert/appCertPublicKey.crt',

        // 支付宝根证书路径
        // 'alipay_root_cert' => './cert/alipayRootCert.crt',

        // optional,默认 warning;日志路径为:sys_get_temp_dir().'/logs/yansongda.pay.log'
        'log' => [
            'file' => storage_path('logs/alipay.log'),
        //  'level' => 'debug'
        //  'type' => 'single', // optional, 可选 daily.
        //  'max_file' => 30,
        ],

        // optional,设置此参数,将进入沙箱模式
        // 'mode' => 'dev',
    ],

    'wechat' => [
        // 公众号 APPID
        'app_id' => env('WECHAT_APP_ID', ''),

        // 小程序 APPID
        'miniapp_id' => env('WECHAT_MINIAPP_ID', ''),

        // APP 引用的 appid
        'appid' => env('WECHAT_APPID', ''),

        // 微信支付分配的微信商户号
        'mch_id' => env('WECHAT_MCH_ID', ''),

        // 微信支付异步通知地址
        'notify_url' => '',

        // 微信支付签名秘钥
        'key' => env('WECHAT_KEY', ''),

        // 客户端证书路径,退款、红包等需要用到。请填写绝对路径,linux 请确保权限问题。pem 格式。
        'cert_client' => '',

        // 客户端秘钥路径,退款、红包等需要用到。请填写绝对路径,linux 请确保权限问题。pem 格式。
        'cert_key' => '',

        // optional,默认 warning;日志路径为:sys_get_temp_dir().'/logs/yansongda.pay.log'
        'log' => [
            'file' => storage_path('logs/wechat.log'),
        //  'level' => 'debug'
        //  'type' => 'single', // optional, 可选 daily.
        //  'max_file' => 30,
        ],

        // optional
        // 'dev' 时为沙箱模式
        // 'hk' 时为东南亚节点
        // 'mode' => 'dev',
    ],
];
View Code
dd(app());

可以看到 不用写一行代码 就已经注册到bindings数组里了。

 

 

 

posted on 2021-03-30 02:21  小白兔晒黑了  阅读(1073)  评论(0)    收藏  举报