coinbase

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 17, 2022 License: BSD-3-Clause Imports: 4 Imported by: 0

README

Go Doc Release Go Report Card Build Status Sourcegraph

logo

Getting Started

Most requests to the Commerce API must be authenticated with an API key. You can create an API key in your Settings page after creating a Coinbase Commerce account.

Installation

go get -v github.com/rizalgowandy/coinbase-commerce-go

Quick Start

package main

import (
	"context"
	"log"

	"github.com/rizalgowandy/coinbase-commerce-go"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/api"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/entity"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/enum"
)

func main() {
	client, err := coinbase.NewClient(api.Config{
		Key:              "REPLACE_WITH_YOUR_API_KEY",
		Timeout:          0,    // Default: 1 min.
		RetryCount:       0,    // Default: 0 = disable.
		RetryMaxWaitTime: 0,    // Default: 2 secs.
		Debug:            true, // Turn on on development for easier debugging.
	})
	if err != nil {
		log.Fatal(err)
	}

	// Create a charge.
	createResp, err := client.CreateCharge(context.Background(), &entity.CreateChargeReq{
		Name:        "The Sovereign Individual",
		Description: "Mastering the Transition to the Information Age",
		LocalPrice: entity.CreateChargePrice{
			Amount:   "100.00",
			Currency: "USD",
		},
		PricingType: enum.PricingTypeFixedPrice,
		Metadata: entity.CreateChargeMetadata{
			CustomerID:   "id_1005",
			CustomerName: "Satoshi Nakamoto",
		},
		RedirectURL: "https://charge/completed/page",
		CancelURL:   "https://charge/canceled/page",
	})
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%+v", createResp)

	// Show a charge by providing either the code or id.
	showResp, err := client.ShowCharge(context.Background(), &entity.ShowChargeReq{
		ChargeCode: createResp.Data.Code,
		ChargeID:   "",
	})
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%+v", showResp)
}

For more example check here.

Test Double / Stub

Sometime it's make sense to make an API call without actually calling the API. In order to support that this library has a built-in stub that can be triggered. You can enable stub by injecting certain value to the context data. You can also enforce that certain API call will always return error with specific type and message.

package main

import (
	"context"
	"log"

	"github.com/rizalgowandy/coinbase-commerce-go"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/api"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/entity"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/enum"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/api/stub"
)

func AlwaysSuccess(ctx context.Context, client *coinbase.Client) {
	// Enable stub that always success and return data.
	ctx = stub.Enable(ctx)

	// Call any client method.
	resp, err := client.CreateCharge(ctx, &entity.CreateChargeReq{})
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%+v", resp)
}

func AlwaysError(ctx context.Context, client *coinbase.Client) {
	// Enable stub that always error and return specific error.
	ctx = stub.SetErrDetailResp(context.Background(), entity.ErrDetailResp{
		Type:    "bad_request",
		Message: "stub: error triggered",
	})

	// Call any client method.
	resp, err := client.CreateCharge(ctx, &entity.CreateChargeReq{})
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%+v", resp)
}

For more example, check here.

Webhook

Webhooks make it easier to integrate with Coinbase Commerce by allowing you to subscribe to a set of charge events. In a sense webhook is basically callback to notify our app after a change of state in resource such as charges. Just like before, you can enable that by injecting certain value to the context.

package main

import (
	"context"
	"log"

	"github.com/rizalgowandy/coinbase-commerce-go"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/api"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/entity"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/enum"
	"github.com/rizalgowandy/coinbase-commerce-go/pkg/api/stub"
)

func SendWebhook(ctx context.Context, client *coinbase.Cliet) {
	// Enable stub that will send webhook after certain times.
	ctx := stub.SetWebhookReq(context.Background(), &entity.WebhookReq{
		URL:             "http://127.0.0.1:9000/test",
		SharedSecretKey: "WEBHOOK_SECRET_KEY",
		Resource:        stub.CreateWebhooksResource(),
	})
	resp, err := client.CreateCharge(ctx, &entity.CreateChargeReq{})
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%+v", resp)
}

For more example, check here.

Supported API

Version: 2018-03-22

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CompareWebhookSignature

func CompareWebhookSignature(ctx context.Context, req *entity.WebhookResource, receivedSignature, sharedSecretKey string) error

CompareWebhookSignature used for the handler middleware to verify webhook. Mismatch signature will return an error.

Payload: req => from request body. receivedSignature => from "X-CC-Webhook-Signature" header. sharedSecretKey => from webhook setting page secret key.

Reference: https://commerce.coinbase.com/docs/api/#securing-webhooks

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is the main client to interact with Coinbase Commerce API.

func NewClient

func NewClient(cfg api.Config) (*Client, error)

NewClient creates a client to interact with Coinbase Commerce API.

func (*Client) CancelCharge

func (c *Client) CancelCharge(ctx context.Context, req *entity.CancelChargeReq) (*entity.CancelChargeResp, error)

CancelCharge cancels a charge that has been previously created. Supply the unique charge code or id that was returned when the charge was created. This information is also returned when a charge is first created.

Note: Only new charges can be successfully canceled. Once payment is detected, charge can no longer be canceled.

Reference: https://commerce.coinbase.com/docs/api/#cancel-a-charge

func (*Client) CreateCharge

func (c *Client) CreateCharge(ctx context.Context, req *entity.CreateChargeReq) (*entity.CreateChargeResp, error)

CreateCharge charge a customer with certain amount of currency. To get paid in cryptocurrency, you need to create a charge object and provide the user with a cryptocurrency address to which they must send cryptocurrency. Once a charge is created a customer must broadcast a payment to the blockchain before the charge expires. Reference: https://commerce.coinbase.com/docs/api/#create-a-charge

func (*Client) CreateCheckout

func (c *Client) CreateCheckout(ctx context.Context, req *entity.CreateCheckoutReq) (*entity.CreateCheckoutResp, error)

CreateCheckout create a new checkout. Reference: https://commerce.coinbase.com/docs/api/#create-a-checkout

func (*Client) CreateInvoice

func (c *Client) CreateInvoice(ctx context.Context, req *entity.CreateInvoiceReq) (*entity.CreateInvoiceResp, error)

CreateInvoice to send an invoice in cryptocurrency, you need to create an invoice object and provide the user with the hosted url where they will be able to pay. Once an invoice is viewed at the hosted url, a charge will be generated on the invoice. Reference: https://commerce.coinbase.com/docs/api/#create-an-invoice

func (*Client) DeleteCheckout

func (c *Client) DeleteCheckout(ctx context.Context, req *entity.DeleteCheckoutReq) (*entity.DeleteCheckoutResp, error)

DeleteCheckout delete a checkout. Reference: https://commerce.coinbase.com/docs/api/#delete-a-checkout

func (*Client) ListCharges

func (c *Client) ListCharges(ctx context.Context, req *entity.ListChargesReq) (*entity.ListChargesResp, error)

ListCharges lists all the charges. Reference: https://commerce.coinbase.com/docs/api/#list-charges

func (*Client) ListCheckouts

func (c *Client) ListCheckouts(ctx context.Context, req *entity.ListCheckoutsReq) (*entity.ListCheckoutsResp, error)

ListCheckouts lists all the checkouts. Reference: https://commerce.coinbase.com/docs/api/#list-checkouts

func (*Client) ListEvents

func (c *Client) ListEvents(ctx context.Context, req *entity.ListEventsReq) (*entity.ListEventsResp, error)

ListEvents lists all the events. Reference: https://commerce.coinbase.com/docs/api/#list-events

func (*Client) ListInvoices

func (c *Client) ListInvoices(ctx context.Context, req *entity.ListInvoicesReq) (*entity.ListInvoicesResp, error)

ListInvoices lists all the invoices. Reference: https://commerce.coinbase.com/docs/api/#list-invoices

func (*Client) ResolveCharge

func (c *Client) ResolveCharge(ctx context.Context, req *entity.ResolveChargeReq) (*entity.ResolveChargeResp, error)

ResolveCharge resolves a charge that has been previously marked as unresolved. Supply the unique charge code or id that was returned when the charge was created. This information is also returned when a charge is first created.

Note: Only unresolved charges can be successfully resolved

Reference: https://commerce.coinbase.com/docs/api/#resolve-a-charge

func (*Client) ResolveInvoice

func (c *Client) ResolveInvoice(ctx context.Context, req *entity.ResolveInvoiceReq) (*entity.ResolveInvoiceResp, error)

ResolveInvoice resolve an invoice that has been previously marked as unresolved. Supply the unique invoice code or id that was returned when the charge was created.

Note: Only invoices with an unresolved charge can be successfully resolved.

Reference: https://commerce.coinbase.com/docs/api/#resolve-an-invoice

func (*Client) ShowCharge

func (c *Client) ShowCharge(ctx context.Context, req *entity.ShowChargeReq) (*entity.ShowChargeResp, error)

ShowCharge retrieves the details of a charge that has been previously created. Supply the unique charge code or id that was returned when the charge was created. This information is also returned when a charge is first created. Reference: https://commerce.coinbase.com/docs/api/#show-a-charge

func (*Client) ShowCheckout

func (c *Client) ShowCheckout(ctx context.Context, req *entity.ShowCheckoutReq) (*entity.ShowCheckoutResp, error)

ShowCheckout show a single checkout. Reference: https://commerce.coinbase.com/docs/api/#show-a-checkout

func (*Client) ShowEvent

func (c *Client) ShowEvent(ctx context.Context, req *entity.ShowEventReq) (*entity.ShowEventResp, error)

ShowEvent retrieves the details of an event. Supply the unique identifier of the event, which you might have received in a webhook. Reference: https://commerce.coinbase.com/docs/api/#show-an-event

func (*Client) ShowInvoice

func (c *Client) ShowInvoice(ctx context.Context, req *entity.ShowInvoiceReq) (*entity.ShowInvoiceResp, error)

ShowInvoice retrieves the details of an invoice that has been previously created. Supply the unique invoice code or id that was returned when the charge was created. This information is also returned when an invoice is first created. Reference: https://commerce.coinbase.com/docs/api/#show-an-invoice

func (*Client) UpdateCheckout

func (c *Client) UpdateCheckout(ctx context.Context, req *entity.UpdateCheckoutReq) (*entity.UpdateCheckoutResp, error)

UpdateCheckout update a checkout. Reference: https://commerce.coinbase.com/docs/api/#update-a-checkout

func (*Client) VoidInvoice

func (c *Client) VoidInvoice(ctx context.Context, req *entity.VoidInvoiceReq) (*entity.VoidInvoiceResp, error)

VoidInvoice voids an invoice that has been previously created. Supply the unique invoice code or id that was returned when the charge was created.

Note: Only invoices with OPEN or VIEWED status can be voided. Once a payment is detected, the invoice can no longer be voided.

Reference: https://commerce.coinbase.com/docs/api/#void-an-invoice

Directories

Path Synopsis
pkg
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL