From 7e0bd0107dcb428ef23287b72a5e795ae7adb8e1 Mon Sep 17 00:00:00 2001 From: "t@thintz.com" Date: Tue, 7 Aug 2012 13:32:27 -0700 Subject: [PATCH] initial commit --- .gitignore | 4 +++ striped-zebra.meta | 13 +++++++ striped-zebra.release-info | 4 +++ striped-zebra.scm | 70 ++++++++++++++++++++++++++++++++++++++ striped-zebra.setup | 15 ++++++++ 5 files changed, 106 insertions(+) create mode 100644 .gitignore create mode 100644 striped-zebra.meta create mode 100644 striped-zebra.release-info create mode 100644 striped-zebra.scm create mode 100644 striped-zebra.setup diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..606dbf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.so +*.o +*~ +*.import.scm \ No newline at end of file diff --git a/striped-zebra.meta b/striped-zebra.meta new file mode 100644 index 0000000..1dbe400 --- /dev/null +++ b/striped-zebra.meta @@ -0,0 +1,13 @@ +; author: Thomas Hintz +; email: t@thintz.com +; license: bsd + +( +(license "BSD") + +(category web) + +(needs http-client uri-common intarweb json) + +(author "Thomas Hintz") +(synopsis "An API for using the Stripe payment system.")) \ No newline at end of file diff --git a/striped-zebra.release-info b/striped-zebra.release-info new file mode 100644 index 0000000..c76a250 --- /dev/null +++ b/striped-zebra.release-info @@ -0,0 +1,4 @@ +(repo git "git://github.com/ThomasHintz/{egg-name}.git") ; optional + +(uri targz "https://github.com/ThomasHintz/{egg-name}/tarball/{egg-release}") +(release "1") \ No newline at end of file diff --git a/striped-zebra.scm b/striped-zebra.scm new file mode 100644 index 0000000..a9fbf09 --- /dev/null +++ b/striped-zebra.scm @@ -0,0 +1,70 @@ +; author: Thomas Hintz +; email: t@thintz.com +; license: bsd + +; Copyright (c) 2012, Thomas Hintz +; All rights reserved. + +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; * Neither the name of the nor the +; names of its contributors may be used to endorse or promote products +; derived from this software without specific prior written permission. + +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL THOMAS HINTZ BE LIABLE FOR ANY +; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +(module striped-zebra + (;; params + api-endpoint api-version default-username + + ;; procs + send-stripe-request charge add-customer + ) + +(import scheme chicken) +(use http-client intarweb uri-common json) + +(define ++ string-append) + +(define api-endpoint (make-parameter "https://api.stripe.com/")) +(define api-version (make-parameter "/v1/")) +(define default-username (make-parameter "")) + +(define (send-stripe-request #!key (method 'GET) endpoint (body #f) (username (default-username))) + (with-input-from-request + (make-request method: method + uri: (uri-reference (++ (api-endpoint) (api-version) endpoint)) + headers: (headers `((authorization . (#(basic ((username . ,username)))))))) + body + json-read)) + +(define (charge amount #!key (card-token #f) (customer #f) (username (default-username)) (description "")) + (send-stripe-request method: 'POST endpoint: "charges" username: username + body: `((amount . ,amount) + (description . ,description) + (currency . "usd") + (card . ,card-token) + (customer . ,customer)))) + +(define (add-customer card-token #!key (description "") (email "") (username (default-username)) (plan "")) + (send-stripe-request method: 'POST endpoint: "customers" username: username + body: `((card . ,card-token) + (email . ,email) + (plan . ,plan) + (description . ,description)))) + +) diff --git a/striped-zebra.setup b/striped-zebra.setup new file mode 100644 index 0000000..cdd5fc8 --- /dev/null +++ b/striped-zebra.setup @@ -0,0 +1,15 @@ +; author: Thomas Hintz +; email: t@thintz.com +; license: bsd + +(compile -s -O2 -d1 striped-zebra.scm -j striped-zebra) +(compile -s striped-zebra.import.scm -O2 -d0) +(compile -c -O2 -d1 striped-zebra.scm -unit sriped-zebra -j striped-zebra) + +(install-extension + 'striped-zebra + ; Files to install for your extension: + '("striped-zebra.o" "striped-zebra.so" "striped-zebra.import.so") + ; Assoc list with properties for your extension: + '((version 1) + (static "striped-zebra.o"))) ;; for static linking \ No newline at end of file