Gumroad로 Laravel 앱에 대한 결제 액세스

9313 단어 laraveltutorial
저는 최근에 사용자가 애플리케이션에 액세스하기 위해 일회성 구매를 하는 프로젝트에 참여했습니다. 이 정확한 시스템(예: Tailwind UI )을 사용하는 다른 사이트를 따라 Gumroad 을 사용하기로 결정했습니다. Laravel과 함께 작동하게 만든 방법은 다음과 같습니다.

먼저 create a Gumroad account이 필요합니다. 그런 다음 새 제품을 생성하고 모든 필수 필드를 작성합니다. 콘텐츠 섹션에서 Generate a unique license key per sale라는 확인란이 선택되어 있는지 확인해야 합니다. 또한 콘텐츠를 파일 대신 URL로 설정해야 합니다. 제 경우에는 이 URL이 등록 페이지가 됩니다.



이제 Laravel 쪽으로 넘어가 봅시다. 가장 먼저 필요한 것은 Gumroad와 연결하는 방법입니다. 패키지를 다운로드하는 대신 Laravel 7.x에서 새로운Http 클라이언트를 사용하여 Gumroad API와 상호 작용할 수 있습니다. 여기 우리의 삶을 더 쉽게 만들어 줄 간단한 수업이 있습니다.

<?php

namespace App\Utils;

use Illuminate\Http\Client\PendingRequest;

class Gumroad
{
    protected PendingRequest $client;

    public function __construct(PendingRequest $client)
    {
        $this->client = $client->baseUrl('https://api.gumroad.com/v2/')->withToken(config('services.gumroad.token'));
    }

    public function getSale(string $id) : array
    {
        return $this->client->get("/sales/{$id}")->throw()->json();
    }

    public function verifyLicense(string $license) : array
    {
        return $this->client->post('/licenses/verify', [
            'product_permalink' => config('services.microlink.product'),
            'license_key' => $license,
        ])->throw()->json();
    }
}


이를 통해 이제 등록 시 라이선스 키의 유효성을 검사하는 작업을 시작할 수 있습니다. 이를 위해 RegisterController(또는 Fortify를 사용하는 경우 CreateNewUser)의 유효성 검사 배열에 추가할 수 있는 사용자 지정 유효성 검사 규칙을 만들었습니다. 이 규칙은 라이센스 키가 존재하는지 확인할 뿐만 아니라 이전에 사용된 적이 없고 어떤 식으로든 환불 또는 취소되지 않았는지 확인합니다.

<?php

namespace App\Rules;

use Facades\App\Utils\Gumroad;
use Illuminate\Contracts\Validation\Rule;

class GumroadLicense implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $license = Gumroad::verifyLicense($value);

        return
                $license['success'] &&
                $license['uses'] == 1 &&
                !$license['purchase']['refunded'] &&
                !$license['purchase']['disputed'] &&
                !$license['purchase']['chargebacked'];
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The provided license is invalid or has expired.';
    }
}


여기서 멈출 수도 있지만 여전히 사용자 경험을 조금 더 개선할 수 있습니다. 누군가 구매를 완료하면 sale_id라는 특수 쿼리 매개변수를 사용하여 이전에 지정한 URL로 리디렉션됩니다. 이 매개변수를 사용하여 라이선스 키를 검색하고 입력을 미리 채울 수 있습니다. 이렇게 하면 Gumroad가 자신의 키와 복사로 보낸 이메일을 검색하는 사용자가 줄어들어 더 나은 경험을 얻을 수 있습니다. 이를 구현하려면 등록 보기를 반환하기 전에 이 코드를 실행하십시오.

if (request()->query('sale_id')) {
    $sale = Gumroad::getSale($request->query('sale_id'))['sale'];

    request()->session()->flashInput(['email' => $sale['email'], 'license_key' => $sale['license_key']]);
}


이것이 Gumroad로 Laravel 앱에 액세스하기 위해 청구를 시작하는 데 필요한 모든 것입니다!

좋은 웹페이지 즐겨찾기