bitpay /
bitpay-python
| 1 | from bitpay.exceptions import * |
||
| 2 | import bitpay.key_utils as bku |
||
| 3 | from bitpay.client import * |
||
| 4 | import pprint |
||
| 5 | import requests |
||
| 6 | import json |
||
| 7 | import re |
||
| 8 | import os.path |
||
| 9 | |||
| 10 | #API_HOST = "https://bitpay.com" #for production, live bitcoin |
||
| 11 | API_HOST = "https://test.bitpay.com" #for testing, testnet bitcoin |
||
| 12 | KEY_FILE = "/tmp/key.priv" |
||
| 13 | TOKEN_FILE = "/tmp/token.priv" |
||
| 14 | |||
| 15 | # check if there is a preexisting key file |
||
| 16 | if os.path.isfile(KEY_FILE): |
||
| 17 | f = open(KEY_FILE, 'r') |
||
| 18 | key = f.read() |
||
| 19 | f.close() |
||
| 20 | print("Creating a bitpay client using existing private key from disk.") |
||
| 21 | else: |
||
| 22 | key = bku.generate_pem() |
||
| 23 | f = open(KEY_FILE, 'w') |
||
| 24 | f.write(key) |
||
| 25 | f.close() |
||
| 26 | |||
| 27 | client = Client(API_HOST, False, key) |
||
| 28 | |||
| 29 | View Code Duplication | def fetch_token(facade): |
|
|
0 ignored issues
–
show
Duplication
introduced
by
Loading history...
|
|||
| 30 | if os.path.isfile(TOKEN_FILE + facade): |
||
| 31 | f = open(TOKEN_FILE + facade, 'r') |
||
| 32 | token = f.read() |
||
| 33 | f.close() |
||
| 34 | print("Reading " + facade + " token from disk.") |
||
| 35 | #global client |
||
| 36 | #client = Client(API_HOST, False, key, {facade: token}) |
||
| 37 | client.tokens[facade] = token |
||
| 38 | else: |
||
| 39 | pairingCode = client.create_token(facade) |
||
| 40 | print("Creating " + facade + " token.") |
||
| 41 | print("Please go to: %s/dashboard/merchant/api-tokens then enter \"%s\" then click the \"Find\" button, then click \"Approve\"" % (API_HOST, pairingCode)) |
||
| 42 | raw_input("When you've complete the above, hit enter to continue...") |
||
| 43 | print("token is: %s" % client.tokens[facade]) |
||
| 44 | f = open(TOKEN_FILE + facade, 'w') |
||
| 45 | f.write(client.tokens[facade]) |
||
| 46 | f.close() |
||
| 47 | |||
| 48 | View Code Duplication | def get_from_bitpay_api(client, uri, token): |
|
|
0 ignored issues
–
show
|
|||
| 49 | payload = "?token=%s" % token |
||
| 50 | xidentity = bku.get_compressed_public_key_from_pem(client.pem) |
||
| 51 | xsignature = bku.sign(uri + payload, client.pem) |
||
| 52 | headers = {"content-type": "application/json", |
||
| 53 | "X-Identity": xidentity, |
||
| 54 | "X-Signature": xsignature, "X-accept-version": "2.0.0"} |
||
| 55 | try: |
||
| 56 | pp.pprint(headers) |
||
| 57 | print(uri + payload) |
||
| 58 | response = requests.get(uri + payload, headers=headers, verify=client.verify) |
||
| 59 | except Exception as pro: |
||
| 60 | raise BitPayConnectionError(pro.args) |
||
| 61 | if response.ok: |
||
| 62 | return response.json()['data'] |
||
| 63 | client.response_error(response) |
||
| 64 | |||
| 65 | """ |
||
| 66 | POST to any resource |
||
| 67 | Make sure to include the proper token in the params |
||
| 68 | """ |
||
| 69 | View Code Duplication | def post_to_bitpay_api(client, uri, resource, params): |
|
|
0 ignored issues
–
show
|
|||
| 70 | payload = json.dumps(params) |
||
| 71 | uri = uri + "/" + resource |
||
| 72 | xidentity = key_utils.get_compressed_public_key_from_pem(client.pem) |
||
| 73 | xsignature = key_utils.sign(uri + payload, client.pem) |
||
| 74 | headers = {"content-type": "application/json", |
||
| 75 | "accept": "application/json", "X-Identity": xidentity, |
||
| 76 | "X-Signature": xsignature, "X-accept-version": "2.0.0"} |
||
| 77 | try: |
||
| 78 | response = requests.post(uri, data=payload, headers=headers, |
||
| 79 | verify=client.verify) |
||
| 80 | except Exception as pro: |
||
| 81 | raise BitPayConnectionError(pro.args) |
||
| 82 | if response.ok: |
||
| 83 | return response.json()['data'] |
||
| 84 | client.response_error(response) |
||
| 85 | |||
| 86 | fetch_token("merchant") |
||
| 87 | |||
| 88 | #Now we assume that the pairing code that we generated along with the crypto keys is paired with your merchant account |
||
| 89 | # |
||
| 90 | print("We will create an invoice using the merchant facade") |
||
| 91 | |||
| 92 | invoice = client.create_invoice({"price": 50.00, "currency": "USD", "token": client.tokens['merchant']}) |
||
| 93 | |||
| 94 | pp = pprint.PrettyPrinter(indent=4) |
||
| 95 | pp.pprint(invoice) |
||
| 96 | |||
| 97 | print("hopefully the above looks OK?") |
||
| 98 | |||
| 99 | print("continuing if we can...") |
||
| 100 | |||
| 101 | |||
| 102 | invoiceId = "REPLACE_BY_VALID_INVOICEID" |
||
| 103 | print("**") |
||
| 104 | print("Now fetching an invoice with invoiceId " + invoiceId) |
||
| 105 | print("**") |
||
| 106 | token = client.tokens['merchant'] |
||
| 107 | invoice = get_from_bitpay_api(client, client.uri + "/invoices/" + invoiceId, token) |
||
| 108 | pp.pprint(invoice) |
||
| 109 | |||
| 110 |