From a4a6af6695e5248be378e021ae622576b4b2ff46 Mon Sep 17 00:00:00 2001
From: Alexander Plutov <pliutau.aliaksandr@lazada.com>
Date: Wed, 14 Oct 2015 12:30:28 +0700
Subject: [PATCH] Initial types

---
 examples/main.go | 18 ++++++++++++++++++
 paypal.go        | 16 ++++++++++++++++
 types.go         | 35 +++++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)
 create mode 100644 examples/main.go
 create mode 100644 paypal.go
 create mode 100644 types.go

diff --git a/examples/main.go b/examples/main.go
new file mode 100644
index 0000000..1749a4b
--- /dev/null
+++ b/examples/main.go
@@ -0,0 +1,18 @@
+package main
+
+import (
+    "paypalsdk"
+
+    "fmt"
+    "os"
+)
+
+func main() {
+    client, err := paypalsdk.NewClient("123", "123", paypalsdk.APIBaseSandBox)
+    if err == nil {
+        fmt.Println("DEBUG: ClientID=" + client.ClientID + " APIBase=" + client.APIBase)
+    } else {
+        fmt.Println("ERROR: " + err.Error())
+        os.Exit(1)
+    }
+}
diff --git a/paypal.go b/paypal.go
new file mode 100644
index 0000000..f36ecec
--- /dev/null
+++ b/paypal.go
@@ -0,0 +1,16 @@
+package paypalsdk
+
+import (
+    "net/http"
+)
+
+// NewClient returns new Client struct
+func NewClient(clientID string, secret string, APIBase string) (*Client, error) {
+    return &Client{
+        &http.Client{},
+        clientID,
+        secret,
+        APIBase,
+        nil,
+    }, nil
+}
diff --git a/types.go b/types.go
new file mode 100644
index 0000000..b67d3d0
--- /dev/null
+++ b/types.go
@@ -0,0 +1,35 @@
+package paypalsdk
+
+import (
+    "net/http"
+    "time"
+)
+
+const (
+    // APIBaseSandBox points to the sandbox (for testing) version of the API
+    APIBaseSandBox = "https://api.sandbox.paypal.com/v1"
+
+    // APIBaseLive points to the live version of the API
+    APIBaseLive = "https://api.paypal.com/v1"
+)
+
+type (
+    // Client represents a Paypal REST API Client
+    Client struct {
+        client   *http.Client
+        ClientID string
+        Secret   string
+        APIBase  string
+        Token    *TokenResponse
+    }
+
+    // TokenResponse maps to the API response for the /oauth2/token endpoint
+    TokenResponse struct {
+        Scope     string    `json:"scope"`        // "https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/vault/credit-card/.*",
+        Token     string    `json:"access_token"` // "EEwJ6tF9x5WCIZDYzyZGaz6Khbw7raYRIBV_WxVvgmsG",
+        Type      string    `json:"token_type"`   // "Bearer",
+        AppID     string    `json:"app_id"`       // "APP-6XR95014BA15863X",
+        ExpiresIn int       `json:"expires_in"`   // 28800
+        ExpiresAt time.Time `json:"expires_at"`
+    }
+)