Separated payment options, for testing
This commit is contained in:
parent
1ef79e4532
commit
11e19fcf66
|
@ -6,7 +6,7 @@ pipeline:
|
||||||
- USE_DOCKER=yes
|
- USE_DOCKER=yes
|
||||||
- DJANGO_SETTINGS_MODULE=config.settings.test
|
- DJANGO_SETTINGS_MODULE=config.settings.test
|
||||||
commands:
|
commands:
|
||||||
- python manage.py test
|
- python manage.py test mhackspace.subscriptions --verbosity 2
|
||||||
|
|
||||||
#volumes:
|
#volumes:
|
||||||
# postgres_data_dev: {}
|
# postgres_data_dev: {}
|
||||||
|
@ -42,3 +42,10 @@ services:
|
||||||
mailhog:
|
mailhog:
|
||||||
image: mailhog/mailhog
|
image: mailhog/mailhog
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
ssh:
|
||||||
|
target: test.maidstone-hackspace.org.uk:/var/www/test-maidstone-hackspace.org.uk 22
|
||||||
|
artifacts:
|
||||||
|
- build.result
|
||||||
|
- config/file
|
||||||
|
cmd: /opt/bin/redeploy.sh
|
||||||
|
|
|
@ -3,3 +3,4 @@ mhackspace/media/*
|
||||||
__pycache__/
|
__pycache__/
|
||||||
node_modules
|
node_modules
|
||||||
src
|
src
|
||||||
|
.env
|
10
README.org
10
README.org
|
@ -50,6 +50,12 @@ docker-compose -f dev.yml run django python manage.py createsuperuser
|
||||||
If you want to export some data you entered into the admin area you can use =dumpdata= and =loaddata= to export and import.
|
If you want to export some data you entered into the admin area you can use =dumpdata= and =loaddata= to export and import.
|
||||||
|
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
docker-compose -fdev.yml run django python manage.py dumpdata feeds > mhackspace/feeds/fixtures/defaults.json
|
docker-compose -fdev.yml run --rm django python manage.py dumpdata feeds > mhackspace/feeds/fixtures/defaults.json
|
||||||
docker-compose -fdev.yml run django python manage.py loaddata mhackspace/feeds/fixtures/defaults.json
|
docker-compose -fdev.yml run --rm django python manage.py loaddata mhackspace/feeds/fixtures/defaults.json
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
** Django Commands
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
docker-compose -fdev.yml run --rm django python manage.py list_subscriptions
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
|
@ -48,6 +48,7 @@ LOCAL_APPS = (
|
||||||
# custom users app
|
# custom users app
|
||||||
# Your stuff: custom apps go here
|
# Your stuff: custom apps go here
|
||||||
'mhackspace.users.apps.UsersConfig',
|
'mhackspace.users.apps.UsersConfig',
|
||||||
|
'mhackspace.subscriptions',
|
||||||
'mhackspace.feeds',
|
'mhackspace.feeds',
|
||||||
'mhackspace.contact',
|
'mhackspace.contact',
|
||||||
'mhackspace.members',
|
'mhackspace.members',
|
||||||
|
@ -259,3 +260,33 @@ ADMIN_URL = '^admin/'
|
||||||
|
|
||||||
# Your common stuff: Below this line define 3rd party library settings
|
# Your common stuff: Below this line define 3rd party library settings
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
payment_providers = {
|
||||||
|
'braintree': {
|
||||||
|
'mode': 'sandbox',
|
||||||
|
'credentials': {
|
||||||
|
'merchant_id': env('BRAINTREE_MERCHANT_ID'),
|
||||||
|
'public_key': env('BRAINTREE_PUBLIC_KEY'),
|
||||||
|
'private_key': env('BRAINTREE_PRIVATE_KEY') ,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'paypal': {
|
||||||
|
"mode": "sandbox", # sandbox or live
|
||||||
|
'credentials': {
|
||||||
|
"mode": "sandbox", # sandbox or live
|
||||||
|
"client_id": end('PAYPAL_CLIENT_ID'),
|
||||||
|
"client_secret": env('PAYPAL_CLIENT_SECRET')}
|
||||||
|
},
|
||||||
|
'gocardless':{
|
||||||
|
'environment': 'sandbox',
|
||||||
|
'credentials': {
|
||||||
|
'app_id': env('GOCARDLESS_APP_ID') ,
|
||||||
|
'app_secret': env('GOCARDLESS_APP_SECRET'),
|
||||||
|
'access_token': env('GOCARDLESS_ACCESS_TOKEN'),
|
||||||
|
'merchant_id': env('GOCARDLESS_MERCHANT_ID'),
|
||||||
|
},
|
||||||
|
'redirect_url':'https://test.maidstone-hackspace.org.uk'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
14
env.example
14
env.example
|
@ -28,3 +28,17 @@ DJANGO_ACCOUNT_ALLOW_REGISTRATION=True
|
||||||
|
|
||||||
COMPRESS_ENABLED=
|
COMPRESS_ENABLED=
|
||||||
|
|
||||||
|
|
||||||
|
PAYMENT_ENVIRONMENT = 'sandbox'
|
||||||
|
|
||||||
|
BRAINTREE_MERCHANT_ID = ''
|
||||||
|
BRAINTREE_PUBLIC_KEY = ''
|
||||||
|
BRAINTREE_PRIVATE_KEY = ''
|
||||||
|
|
||||||
|
PAYPAL_CLIENT_ID = ""
|
||||||
|
PAYPAL_CLIENT_SECRET = ""
|
||||||
|
|
||||||
|
GOCARDLESS_APP_ID = ''
|
||||||
|
GOCARDLESS_APP_SECRET = ''
|
||||||
|
GOCARDLESS_ACCESS_TOKEN = ''
|
||||||
|
GOCARDLESS_MERCHANT_ID = ''
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from mhackspace.subscriptions.payments import select_provider
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'List payment provider subscriptions'
|
||||||
|
|
||||||
|
# def add_arguments(self, parser):
|
||||||
|
# parser.add_argument(
|
||||||
|
# 'blog_id',
|
||||||
|
# nargs='*',
|
||||||
|
# type=int,
|
||||||
|
# default=False,
|
||||||
|
# help='Specify a blog to get feeds form'
|
||||||
|
# )
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
provider = select_provider('gocardless')
|
||||||
|
|
||||||
|
self.stdout.write(
|
||||||
|
self.style.NOTICE(
|
||||||
|
'== Gocardless subscriptions =='))
|
||||||
|
|
||||||
|
for sub in provider.fetch_subscriptions():
|
||||||
|
self.stdout.write(
|
||||||
|
self.style.SUCCESS(
|
||||||
|
'\t{reference} - {amount} - {status} - {email}'.format(**sub)))
|
|
@ -2,37 +2,19 @@ from pprint import pprint
|
||||||
import pytz
|
import pytz
|
||||||
import gocardless
|
import gocardless
|
||||||
import braintree
|
import braintree
|
||||||
|
|
||||||
|
from django.conf.settings import payment_providers
|
||||||
|
|
||||||
# import gocardless_pro
|
# import gocardless_pro
|
||||||
import paypalrestsdk as paypal
|
# import paypalrestsdk as paypal
|
||||||
|
|
||||||
from website.config import settings
|
# from website.config import settings
|
||||||
from website.config.settings import app_domain
|
# from website.config.import app_domain
|
||||||
|
|
||||||
from website.config.logger import log
|
# from website.config.logger import log
|
||||||
|
|
||||||
PROVIDER_ID = {'gocardless':1, 'paypal': 2}
|
|
||||||
PROVIDER_NAME = {1: 'gocardless', 2: 'paypal'}
|
|
||||||
|
|
||||||
payment_providers = {
|
|
||||||
'paypal': {
|
|
||||||
"mode": "sandbox", # sandbox or live
|
|
||||||
'credentials': {
|
|
||||||
"mode": "sandbox", # sandbox or live
|
|
||||||
"client_id": "AaGlNEvd26FiEJiJi53nfpXh19_oKetteV1NGkBi4DDYZSqBexKVgaz9Lp0SI82gYFSAYpsmxO4iDtxU",
|
|
||||||
"client_secret": "EMcIuDJE_VDNSNZS7C7NLi9DEHaDvVu9jlIYyCCHaLmrLuy_VQ6C0bbcRnyF-7B6CcN__Dn6HqUwsgMG"}
|
|
||||||
},
|
|
||||||
'gocardless':{
|
|
||||||
'environment': 'sandbox',
|
|
||||||
'credentials': {
|
|
||||||
'app_id': 'MNHBS3C4X4ZG211SM70WSS7WCN8B3X1KAWZBKV9S8N6KH2RNH6YZ5Z5865RFD3H6',
|
|
||||||
'app_secret': 'NE4NWYDQY4FNN1B47VT9SZ318GPQND130DW7QGQ73JMVTZQZHJQNF23ZFNP48GKV',
|
|
||||||
'access_token': 'CJ7G7V36VAH5KVAHTYXD8VE8M4M0S41EQXH2E1HTGV5AN5TAZBER36ERAF4CG2NR',
|
|
||||||
'merchant_id': '11QFXD7TTA',
|
|
||||||
},
|
|
||||||
'redirect_url':'https://test.maidstone-hackspace.org.uk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
PROVIDER_ID = {'gocardless':1, 'braintree': 2}
|
||||||
|
PROVIDER_NAME = {1: 'gocardless', 2: 'braintree'}
|
||||||
|
|
||||||
def select_provider(type):
|
def select_provider(type):
|
||||||
if type == "gocardless": return gocardless_provider()
|
if type == "gocardless": return gocardless_provider()
|
||||||
|
@ -49,12 +31,12 @@ class gocardless_provider:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# gocardless are changing there api, not sure if we can switch yet
|
# gocardless are changing there api, not sure if we can switch yet
|
||||||
# self.client = gocardless_pro.Client(
|
# self.client = gocardless_pro.Client(
|
||||||
# access_token=settings.payment_providers['gocardless']['credentials']['access_token'],
|
# access_token=payment_providers['gocardless']['credentials']['access_token'],
|
||||||
# environment=settings.payment_providers['gocardless']['environment'])
|
# environment=payment_providers['gocardless']['environment'])
|
||||||
|
|
||||||
print(settings.payment_providers.keys)
|
print(payment_providers.keys)
|
||||||
gocardless.environment = settings.payment_providers['gocardless']['environment']
|
gocardless.environment = payment_providers['gocardless']['environment']
|
||||||
gocardless.set_details(**settings.payment_providers['gocardless']['credentials'])
|
gocardless.set_details(**payment_providers['gocardless']['credentials'])
|
||||||
self.client = gocardless.client.merchant()
|
self.client = gocardless.client.merchant()
|
||||||
|
|
||||||
def subscribe_confirm(self, args):
|
def subscribe_confirm(self, args):
|
||||||
|
@ -73,8 +55,8 @@ class gocardless_provider:
|
||||||
# print('test')
|
# print('test')
|
||||||
# print(dir(bill))
|
# print(dir(bill))
|
||||||
# print(bill.created_at)
|
# print(bill.created_at)
|
||||||
print(dir(paying_member))
|
# print(dir(paying_member))
|
||||||
print(paying_member.reference_fields)
|
# print(paying_member.reference_fields)
|
||||||
yield {
|
yield {
|
||||||
'status': paying_member.status,
|
'status': paying_member.status,
|
||||||
'email': user.email,
|
'email': user.email,
|
||||||
|
@ -83,7 +65,7 @@ class gocardless_provider:
|
||||||
'amount': paying_member.amount}
|
'amount': paying_member.amount}
|
||||||
|
|
||||||
def get_redirect_url(self):
|
def get_redirect_url(self):
|
||||||
return settings.payment_providers['gocardless']['redirect_url']
|
return payment_providers['gocardless']['redirect_url']
|
||||||
|
|
||||||
def get_token(self):
|
def get_token(self):
|
||||||
return 'N/A'
|
return 'N/A'
|
||||||
|
@ -103,9 +85,9 @@ class braintree_provider:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
braintree.Configuration.configure(
|
braintree.Configuration.configure(
|
||||||
environment=braintree.Environment.Sandbox,
|
environment=braintree.Environment.Sandbox,
|
||||||
merchant_id=settings.payment_providers['braintree']['credentials']['merchant_id'],
|
merchant_id=payment_providers['braintree']['credentials']['merchant_id'],
|
||||||
public_key=settings.payment_providers['braintree']['credentials']['public_key'],
|
public_key=payment_providers['braintree']['credentials']['public_key'],
|
||||||
private_key=settings.payment_providers['braintree']['credentials']['private_key'])
|
private_key=payment_providers['braintree']['credentials']['private_key'])
|
||||||
|
|
||||||
def get_token(self):
|
def get_token(self):
|
||||||
return braintree.ClientToken.generate()
|
return braintree.ClientToken.generate()
|
||||||
|
@ -150,17 +132,17 @@ class payment:
|
||||||
self.environment = int(mode=='production')
|
self.environment = int(mode=='production')
|
||||||
self.provider_id = PROVIDER_ID.get(provider)
|
self.provider_id = PROVIDER_ID.get(provider)
|
||||||
|
|
||||||
print(settings.payment_providers)
|
print(payment_providers)
|
||||||
if provider == 'paypal':
|
if provider == 'paypal':
|
||||||
paypal.configure(**settings.payment_providers[provider]['credentials'])
|
paypal.configure(**payment_providers[provider]['credentials'])
|
||||||
return
|
return
|
||||||
|
|
||||||
gocardless_pro.Client(
|
gocardless_pro.Client(
|
||||||
access_token=settings.payment_providers[provider]['credentials']['access_token'],
|
access_token=payment_providers[provider]['credentials']['access_token'],
|
||||||
environment=settings.payment_providers[provider])
|
environment=payment_providers[provider])
|
||||||
#~ environment = int('production' = settings.payment_providers[provider]['environment'])
|
#~ environment = int('production' = payment_providers[provider]['environment'])
|
||||||
gocardless.environment = settings.payment_providers[provider]['environment']
|
gocardless.environment = payment_providers[provider]['environment']
|
||||||
gocardless.set_details(**settings.payment_providers[provider]['credentials'])
|
gocardless.set_details(**payment_providers[provider]['credentials'])
|
||||||
merchant = gocardless.client.merchant()
|
merchant = gocardless.client.merchant()
|
||||||
|
|
||||||
def lookup_provider_by_id(self, provider_id):
|
def lookup_provider_by_id(self, provider_id):
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import unittest
|
from test_plus.test import TestCase
|
||||||
|
# import unittest
|
||||||
from mock import patch, Mock
|
from mock import patch, Mock
|
||||||
|
|
||||||
from website.libs.payments import payment, gocardless_provider, braintree_provider
|
from mhackspace.subscriptions.payments import payment, gocardless_provider, braintree_provider
|
||||||
|
|
||||||
class TestPaymentGatewaysGocardless(unittest.TestCase):
|
class TestPaymentGatewaysGocardless(TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.auth_gocardless()
|
self.auth_gocardless()
|
||||||
|
|
||||||
@patch('website.libs.payments.gocardless.request.requests.get', autospec=True)
|
@patch('mhackspace.subscriptions.payments.gocardless.request.requests.get', autospec=True)
|
||||||
def auth_gocardless(self, mock_request):
|
def auth_gocardless(self, mock_request):
|
||||||
# mock braintree initalisation request
|
# mock braintree initalisation request
|
||||||
mock_request.return_value = Mock(ok=True)
|
mock_request.return_value = Mock(ok=True)
|
||||||
|
@ -49,8 +50,8 @@ class TestPaymentGatewaysGocardless(unittest.TestCase):
|
||||||
self.assertEqual(item.get('amount'), 20.00)
|
self.assertEqual(item.get('amount'), 20.00)
|
||||||
|
|
||||||
|
|
||||||
class TestPaymentGatewaysBraintree(unittest.TestCase):
|
class TestPaymentGatewaysBraintree(TestCase):
|
||||||
@patch('website.libs.payments.braintree.Configuration.configure')
|
@patch('mhackspace.subscriptions.payments.braintree.Configuration.configure')
|
||||||
def auth_braintree(self, mock_request):
|
def auth_braintree(self, mock_request):
|
||||||
# mock braintree initalisation request
|
# mock braintree initalisation request
|
||||||
mock_request.return_value = Mock(ok=True)
|
mock_request.return_value = Mock(ok=True)
|
||||||
|
@ -63,7 +64,7 @@ class TestPaymentGatewaysBraintree(unittest.TestCase):
|
||||||
|
|
||||||
self.provider = braintree_provider()
|
self.provider = braintree_provider()
|
||||||
|
|
||||||
@patch('website.libs.payments.braintree.Subscription.search')
|
@patch('mhackspace.subscriptions.payments.braintree.Subscription.search')
|
||||||
def test_fetch_subscription_braintree(self, mock_request):
|
def test_fetch_subscription_braintree(self, mock_request):
|
||||||
provider = self.auth_braintree()
|
provider = self.auth_braintree()
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,10 @@ rcssmin==1.0.6
|
||||||
django-compressor==2.1
|
django-compressor==2.1
|
||||||
|
|
||||||
lxml==3.7.2
|
lxml==3.7.2
|
||||||
|
mock
|
||||||
|
|
||||||
|
gocardless
|
||||||
|
braintree
|
||||||
|
|
||||||
# Your custom requirements go here
|
# Your custom requirements go here
|
||||||
-e git+https://github.com/olymk2/scaffold.git#egg=scaffold
|
-e git+https://github.com/olymk2/scaffold.git#egg=scaffold
|
||||||
|
|
Loading…
Reference in New Issue