Separated payment options, for testing
This commit is contained in:
parent
1ef79e4532
commit
11e19fcf66
|
@ -6,7 +6,7 @@ pipeline:
|
|||
- USE_DOCKER=yes
|
||||
- DJANGO_SETTINGS_MODULE=config.settings.test
|
||||
commands:
|
||||
- python manage.py test
|
||||
- python manage.py test mhackspace.subscriptions --verbosity 2
|
||||
|
||||
#volumes:
|
||||
# postgres_data_dev: {}
|
||||
|
@ -42,3 +42,10 @@ services:
|
|||
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__/
|
||||
node_modules
|
||||
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.
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
docker-compose -fdev.yml run 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 dumpdata feeds > 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
|
||||
|
|
|
@ -48,6 +48,7 @@ LOCAL_APPS = (
|
|||
# custom users app
|
||||
# Your stuff: custom apps go here
|
||||
'mhackspace.users.apps.UsersConfig',
|
||||
'mhackspace.subscriptions',
|
||||
'mhackspace.feeds',
|
||||
'mhackspace.contact',
|
||||
'mhackspace.members',
|
||||
|
@ -259,3 +260,33 @@ ADMIN_URL = '^admin/'
|
|||
|
||||
# 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=
|
||||
|
||||
|
||||
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 gocardless
|
||||
import braintree
|
||||
|
||||
from django.conf.settings import payment_providers
|
||||
|
||||
# import gocardless_pro
|
||||
import paypalrestsdk as paypal
|
||||
# import paypalrestsdk as paypal
|
||||
|
||||
from website.config import settings
|
||||
from website.config.settings import app_domain
|
||||
# from website.config import settings
|
||||
# from website.config.import app_domain
|
||||
|
||||
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'
|
||||
}
|
||||
}
|
||||
# from website.config.logger import log
|
||||
|
||||
PROVIDER_ID = {'gocardless':1, 'braintree': 2}
|
||||
PROVIDER_NAME = {1: 'gocardless', 2: 'braintree'}
|
||||
|
||||
def select_provider(type):
|
||||
if type == "gocardless": return gocardless_provider()
|
||||
|
@ -49,12 +31,12 @@ class gocardless_provider:
|
|||
def __init__(self):
|
||||
# gocardless are changing there api, not sure if we can switch yet
|
||||
# self.client = gocardless_pro.Client(
|
||||
# access_token=settings.payment_providers['gocardless']['credentials']['access_token'],
|
||||
# environment=settings.payment_providers['gocardless']['environment'])
|
||||
# access_token=payment_providers['gocardless']['credentials']['access_token'],
|
||||
# environment=payment_providers['gocardless']['environment'])
|
||||
|
||||
print(settings.payment_providers.keys)
|
||||
gocardless.environment = settings.payment_providers['gocardless']['environment']
|
||||
gocardless.set_details(**settings.payment_providers['gocardless']['credentials'])
|
||||
print(payment_providers.keys)
|
||||
gocardless.environment = payment_providers['gocardless']['environment']
|
||||
gocardless.set_details(**payment_providers['gocardless']['credentials'])
|
||||
self.client = gocardless.client.merchant()
|
||||
|
||||
def subscribe_confirm(self, args):
|
||||
|
@ -73,8 +55,8 @@ class gocardless_provider:
|
|||
# print('test')
|
||||
# print(dir(bill))
|
||||
# print(bill.created_at)
|
||||
print(dir(paying_member))
|
||||
print(paying_member.reference_fields)
|
||||
# print(dir(paying_member))
|
||||
# print(paying_member.reference_fields)
|
||||
yield {
|
||||
'status': paying_member.status,
|
||||
'email': user.email,
|
||||
|
@ -83,7 +65,7 @@ class gocardless_provider:
|
|||
'amount': paying_member.amount}
|
||||
|
||||
def get_redirect_url(self):
|
||||
return settings.payment_providers['gocardless']['redirect_url']
|
||||
return payment_providers['gocardless']['redirect_url']
|
||||
|
||||
def get_token(self):
|
||||
return 'N/A'
|
||||
|
@ -103,9 +85,9 @@ class braintree_provider:
|
|||
def __init__(self):
|
||||
braintree.Configuration.configure(
|
||||
environment=braintree.Environment.Sandbox,
|
||||
merchant_id=settings.payment_providers['braintree']['credentials']['merchant_id'],
|
||||
public_key=settings.payment_providers['braintree']['credentials']['public_key'],
|
||||
private_key=settings.payment_providers['braintree']['credentials']['private_key'])
|
||||
merchant_id=payment_providers['braintree']['credentials']['merchant_id'],
|
||||
public_key=payment_providers['braintree']['credentials']['public_key'],
|
||||
private_key=payment_providers['braintree']['credentials']['private_key'])
|
||||
|
||||
def get_token(self):
|
||||
return braintree.ClientToken.generate()
|
||||
|
@ -150,17 +132,17 @@ class payment:
|
|||
self.environment = int(mode=='production')
|
||||
self.provider_id = PROVIDER_ID.get(provider)
|
||||
|
||||
print(settings.payment_providers)
|
||||
print(payment_providers)
|
||||
if provider == 'paypal':
|
||||
paypal.configure(**settings.payment_providers[provider]['credentials'])
|
||||
paypal.configure(**payment_providers[provider]['credentials'])
|
||||
return
|
||||
|
||||
gocardless_pro.Client(
|
||||
access_token=settings.payment_providers[provider]['credentials']['access_token'],
|
||||
environment=settings.payment_providers[provider])
|
||||
#~ environment = int('production' = settings.payment_providers[provider]['environment'])
|
||||
gocardless.environment = settings.payment_providers[provider]['environment']
|
||||
gocardless.set_details(**settings.payment_providers[provider]['credentials'])
|
||||
access_token=payment_providers[provider]['credentials']['access_token'],
|
||||
environment=payment_providers[provider])
|
||||
#~ environment = int('production' = payment_providers[provider]['environment'])
|
||||
gocardless.environment = payment_providers[provider]['environment']
|
||||
gocardless.set_details(**payment_providers[provider]['credentials'])
|
||||
merchant = gocardless.client.merchant()
|
||||
|
||||
def lookup_provider_by_id(self, provider_id):
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import unittest
|
||||
from test_plus.test import TestCase
|
||||
# import unittest
|
||||
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):
|
||||
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):
|
||||
# mock braintree initalisation request
|
||||
mock_request.return_value = Mock(ok=True)
|
||||
|
@ -49,8 +50,8 @@ class TestPaymentGatewaysGocardless(unittest.TestCase):
|
|||
self.assertEqual(item.get('amount'), 20.00)
|
||||
|
||||
|
||||
class TestPaymentGatewaysBraintree(unittest.TestCase):
|
||||
@patch('website.libs.payments.braintree.Configuration.configure')
|
||||
class TestPaymentGatewaysBraintree(TestCase):
|
||||
@patch('mhackspace.subscriptions.payments.braintree.Configuration.configure')
|
||||
def auth_braintree(self, mock_request):
|
||||
# mock braintree initalisation request
|
||||
mock_request.return_value = Mock(ok=True)
|
||||
|
@ -63,7 +64,7 @@ class TestPaymentGatewaysBraintree(unittest.TestCase):
|
|||
|
||||
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):
|
||||
provider = self.auth_braintree()
|
||||
|
||||
|
|
|
@ -48,6 +48,10 @@ rcssmin==1.0.6
|
|||
django-compressor==2.1
|
||||
|
||||
lxml==3.7.2
|
||||
mock
|
||||
|
||||
gocardless
|
||||
braintree
|
||||
|
||||
# Your custom requirements go here
|
||||
-e git+https://github.com/olymk2/scaffold.git#egg=scaffold
|
||||
|
|
Loading…
Reference in New Issue