Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba,
Laravel için paraşüt api kullandınız mı ? Paket yüklemeden https://apidocs.parasut.com/ OAuth2 curl olarak.
Paket olarak var curl olarak laravel koduna rastlamadım, aranızda yapan var mı ?
https://github.com/netinternet/parasut-v4 bu kullanılabalir mi ?

  • mgsmus bunu yanıtladı.
  • ms_dizzy_ Öncelikle elinizde Paraşüt'ün admini dışında ikinici bir kullanıcı olsun. Oluşturma imkanınız varsa parasut-api@domain.com şeklinde ayrı bir mail oluşturabilirsiniz ya da mevcut herhangi bir emaili kullanabilirsiniz, sadece güvenli ellerde olduğundan emin olun. Paraşüt'ün müşteri panelinde Ayarlar > Kullanıcılar kısmında bu maili kullanıcı olarak davet edin, davet ederken tüm yetkileri tam olarak verin. Bu kullanıcı API kullanıcı olacak, bunu sadece siz bileceksiniz ve şifresinin değişmemesi gerekiyor. Değişirse uygulamada da değişmesi gerekir çünkü. Size ayrı bir kullanıcı açtırmamın sebebi bu. Şimdi artık token alabilirsiniz:

    config/servcies.php içerisinde parasut anahtarı tanımlayın:

    'parasut' => [     
        // Paraşüt'ün size vereceği client_id
        'client_id' => env('PARASUT_CLIENT_ID', 'client_id'), 
    
        // Paraşüt'ün size vereceği client_secret
        'client_secret' => env('PARASUT_CLIENT_SECRET', 'client_secret'), 
    
        //Davet ettiğiniz API kullanıcısının maili
        'username' => env('PARASUT_USERNAME', 'parasut-api@domain.com'),
    
        // Davet ettiğiniz API kullanıcısının Paraşüt şifresi
        'password' => env('PARASUT_PASSWORD', '12345'),
    
        // Paraşüt firma ID'si. Paraşüt panele girince üstte https://uygulama.parasut.com/12345/
        // şeklinde gördüğünüz ID yani. Token alırken değil ama işlemlerde kullanıyorsunuz.
        'company_id' => env('PARASUT_COMPANY_ID', '12345'),
    ],
    use \Illuminate\Support\Facades\Http;
    
    $response = Http::post('https://api.parasut.com/oauth/token', [
        'client_id' => config('service.parasut.client_id') , 
        'client_secret' => config('service.parasut.client_secret') , 
        'username' => config('service.parasut.username') , 
        'password' => config('service.parasut.password') , 
        'grant_type' => 'password',
        'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
    ]);
    
    $tokenInfo = $response->json();

    Eğer her şey yolunda giderse $tokenInfo şöyle bir array olacak:

    [
        "access_token" => "jHtKPpXxlOak9SX0sHC2bGSu0nEoTTF7"
        "token_type" => "Bearer"
        "expires_in" => 6200
        "refresh_token" => "FTzUCjXnVnzXBzuSfdBwXuGfPjdkIj1i"
        "scope" => "public"
        "created_at" => 1620493602
    ]

    Bu obje olarak tutmanızı sağlayacak bir tane sınıf oluşturabilirsiniz:

    class ParasutToken
    {
        public function __construct(
            public string $accessToken,
            public string $tokenType,
            public int $expiresIn,
            public string $refreshToken,
            public string $scope,
            public int $createdAt,
        )
        {}
    
        public static function createFromResponse(array $response): static
        {
            return new static(
                $response['access_token'],
                $response['token_type'],
                $response['expires_in'],
                $response['refresh_token'],
                $response['scope'],
                $response['created_at'],
            );
        }
    
        public function isExpired(): bool
        {
            return Date::createFromTimestamp($this->createdAt)
                ->addHours(2)
                ->isPast();
        }
    }

    Şöyle kullanırsınız:

    $response = Http::post('https://api.parasut.com/oauth/token', [
        'client_id' => config('service.parasut.client_id') , 
        'client_secret' => config('service.parasut.client_secret') , 
        'username' => config('service.parasut.username') , 
        'password' => config('service.parasut.password') , 
        'grant_type' => 'password',
        'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
    ]);
    
    $token = ParasutToken::createFromResponse($response->json());

    Paraşüt işlemleri için de artık token ile istek atabilirsiniz. Mesela fatura oluşturma:

    $url = 'https://api.parasut.com/'.config('services.parasut.company_id. '/sales_invoices';
    
    $response = Http::withToken($token->accessToken)->post($url, [
        'data' => [
            'type' => 'sales_invoices',
            'attributes' => [
                'item_type' => 'invoice',
                'description' => 'Açıklama',
                ...
            ]
        ]  
    ]);

    ms_dizzy_ Bu paketi kullanmadım ama kullanılabilir gibi duruyor. Zaten Paraşüt'ün basit bir API'ı var Http ile siz de yapabilirsiniz. İçerisinde kullanmayacağınız bir çok endpoint var, siz sadece kendi ihtiyacınız olanı yazarsınız.

      mgsmus hocam http ile ne şekilde yapabilirim anlayamadım.

        mgsmus hocam ben nasıl yapacağımı tam olarak çözemedim, http ile nasıl yapabilirim, küçük bi kod örneği var mı ?

          ms_dizzy_ Öncelikle elinizde Paraşüt'ün admini dışında ikinici bir kullanıcı olsun. Oluşturma imkanınız varsa parasut-api@domain.com şeklinde ayrı bir mail oluşturabilirsiniz ya da mevcut herhangi bir emaili kullanabilirsiniz, sadece güvenli ellerde olduğundan emin olun. Paraşüt'ün müşteri panelinde Ayarlar > Kullanıcılar kısmında bu maili kullanıcı olarak davet edin, davet ederken tüm yetkileri tam olarak verin. Bu kullanıcı API kullanıcı olacak, bunu sadece siz bileceksiniz ve şifresinin değişmemesi gerekiyor. Değişirse uygulamada da değişmesi gerekir çünkü. Size ayrı bir kullanıcı açtırmamın sebebi bu. Şimdi artık token alabilirsiniz:

          config/servcies.php içerisinde parasut anahtarı tanımlayın:

          'parasut' => [     
              // Paraşüt'ün size vereceği client_id
              'client_id' => env('PARASUT_CLIENT_ID', 'client_id'), 
          
              // Paraşüt'ün size vereceği client_secret
              'client_secret' => env('PARASUT_CLIENT_SECRET', 'client_secret'), 
          
              //Davet ettiğiniz API kullanıcısının maili
              'username' => env('PARASUT_USERNAME', 'parasut-api@domain.com'),
          
              // Davet ettiğiniz API kullanıcısının Paraşüt şifresi
              'password' => env('PARASUT_PASSWORD', '12345'),
          
              // Paraşüt firma ID'si. Paraşüt panele girince üstte https://uygulama.parasut.com/12345/
              // şeklinde gördüğünüz ID yani. Token alırken değil ama işlemlerde kullanıyorsunuz.
              'company_id' => env('PARASUT_COMPANY_ID', '12345'),
          ],
          use \Illuminate\Support\Facades\Http;
          
          $response = Http::post('https://api.parasut.com/oauth/token', [
              'client_id' => config('service.parasut.client_id') , 
              'client_secret' => config('service.parasut.client_secret') , 
              'username' => config('service.parasut.username') , 
              'password' => config('service.parasut.password') , 
              'grant_type' => 'password',
              'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
          ]);
          
          $tokenInfo = $response->json();

          Eğer her şey yolunda giderse $tokenInfo şöyle bir array olacak:

          [
              "access_token" => "jHtKPpXxlOak9SX0sHC2bGSu0nEoTTF7"
              "token_type" => "Bearer"
              "expires_in" => 6200
              "refresh_token" => "FTzUCjXnVnzXBzuSfdBwXuGfPjdkIj1i"
              "scope" => "public"
              "created_at" => 1620493602
          ]

          Bu obje olarak tutmanızı sağlayacak bir tane sınıf oluşturabilirsiniz:

          class ParasutToken
          {
              public function __construct(
                  public string $accessToken,
                  public string $tokenType,
                  public int $expiresIn,
                  public string $refreshToken,
                  public string $scope,
                  public int $createdAt,
              )
              {}
          
              public static function createFromResponse(array $response): static
              {
                  return new static(
                      $response['access_token'],
                      $response['token_type'],
                      $response['expires_in'],
                      $response['refresh_token'],
                      $response['scope'],
                      $response['created_at'],
                  );
              }
          
              public function isExpired(): bool
              {
                  return Date::createFromTimestamp($this->createdAt)
                      ->addHours(2)
                      ->isPast();
              }
          }

          Şöyle kullanırsınız:

          $response = Http::post('https://api.parasut.com/oauth/token', [
              'client_id' => config('service.parasut.client_id') , 
              'client_secret' => config('service.parasut.client_secret') , 
              'username' => config('service.parasut.username') , 
              'password' => config('service.parasut.password') , 
              'grant_type' => 'password',
              'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
          ]);
          
          $token = ParasutToken::createFromResponse($response->json());

          Paraşüt işlemleri için de artık token ile istek atabilirsiniz. Mesela fatura oluşturma:

          $url = 'https://api.parasut.com/'.config('services.parasut.company_id. '/sales_invoices';
          
          $response = Http::withToken($token->accessToken)->post($url, [
              'data' => [
                  'type' => 'sales_invoices',
                  'attributes' => [
                      'item_type' => 'invoice',
                      'description' => 'Açıklama',
                      ...
                  ]
              ]  
          ]);