بايثون/جانجو:ما هي مكتبة Authorize.net التي يجب أن أستخدمها؟
-
08-07-2019 - |
سؤال
أحتاج إلى تكامل Authorize.net لدفعات الاشتراك، على الأرجح باستخدام CIM.المتطلبات بسيطة - دفعات شهرية متكررة، مع بضع نقاط سعر مختلفة.سيتم تخزين معلومات بطاقة ائتمان العميل على موقع Authorize.net.
يوجد عدد لا بأس به من المكتبات ومقتطفات الأكواد البرمجية، وأنا أبحث عن توصيات بشأن أي منها يعمل بشكل أفضل.
- يبدو أن Satchmo أكثر مما أحتاج إليه، ويبدو أنه معقد.
- جانغو بورسار يبدو أنه ما أحتاج إليه، ولكنه مدرج في فئة ألفا.
- ال أدرول/تخويل المكتبة تبدو أيضًا جيدة جدًا.
- لا تبدو واجهات برمجة تطبيقات CIM XML سيئة للغاية، حيث يمكنني الاتصال بها مباشرةً.
وهناك عدد لا بأس به من مقتطفات التعليمات البرمجية الأخرى.
ما هو الخيار الأفضل الآن، في ضوء متطلباتي البسيطة إلى حد ما؟
المحلول 5
لما يستحق انتهى بنا الأمر باستخدام مكتبة ترخيص adroll.يبدو كل من Paython وDjango-authorizenet مثيرين للاهتمام، وسيتم التحقق من ذلك.
نصائح أخرى
باختصار، لم يلبي أي من الحلول الحالية احتياجاتي.لقد كانت إما غير قابلة للصيانة، أو غير معلقة، أو غير مختبرة، أو تفتقر إلى البطاقات المحفوظة.لذا بالطبع قمت ببناء الحل الخاص بي وفتحته مفتوح المصدر:
تفويض الصلصة: https://github.com/jeffschenck/authorizesauce
يتعامل مع المعاملات الأساسية (API AIM)، والبطاقات المحفوظة (API CIM)، والمدفوعات المتكررة (API ARB).إنه موثق بالكامل ويحتوي على مجموعة اختبار كاملة.
أتوقع أن الملصق الأصلي قد تم تغييره منذ فترة طويلة، ولكن إذا كان بإمكانه مساعدة أي شخص آخر على تجنب بعض آلام معالجة الدفع، فسأشعر بسعادة غامرة.
يحرر: https://github.com/agiliq/merchant/blob/master/billing/gateways/authorize_net_gateway.pyيبدو جميلا جدا، لم أجربه بعد.
يحرر:[بالنسبة لمشروعي التالي الذي يستخدم Authorize.net، سألقي نظرة فاحصة على: http://github.com/zen4ever/django-authorizenet يبدو لطيفا جدا.لا أعتقد أن لديه دعمًا للمدفوعات المتكررة بالرغم من ذلك.]
في الماضي قمت بتنفيذ القليل من التطبيقات لمرة واحدة.
للنشر البسيط في بوابة الدفع AIM، يمكنك استخدام شيء مثل هذا:
URL = 'https://test.authorize.net/gateway/transact.dll'
API = {'x_login':'XXX',
'x_tran_key':'XXX', 'x_method':'CC', 'x_type':'AUTH_ONLY',
'x_delim_data':'TRUE', 'x_duplicate_window':'10', 'x_delim_char':'|',
'x_relay_response':'FALSE', 'x_version':'3.1'}
def call_auth(amount, card_num, exp_date, card_code, zip_code, request_ip=None):
'''Call authorize.net and get a result dict back'''
import urllib2, urllib
payment_post = API
payment_post['x_amount'] = amount
payment_post['x_card_num'] = card_num
payment_post['x_exp_date'] = exp_date
payment_post['x_card_code'] = card_code
payment_post['x_zip'] = zip_code
payment_request = urllib2.Request(URL, urllib.urlencode(payment_post))
r = urllib2.urlopen(payment_request).read()
return r
def call_capture(trans_id): # r.split('|')[6] we get back from the first call, trans_id
capture_post = API
capture_post['x_type'] = 'PRIOR_AUTH_CAPTURE'
capture_post['x_trans_id'] = trans_id
capture_request = urllib2.Request(URL, urllib.urlencode(capture_post))
r = urllib2.urlopen(capture_request).read()
return r
للتفويض، عليك القيام بشيء مثل:
r = authorize.call_auth(
unicode(decimal_total),
request.POST.get('card_num'),
request.POST.get('exp_date'),
request.POST.get('card_code'),
request.POST.get('zip_code') if request.POST.get('zip_code') else address.zip_code,
)
if r.split('|')[0] == '1':
# it's good, we have authorized the card...
else:
error = "%s Please try again." % (r.split('|')[3])
ومن ثم يمكننا التقاط:
r = authorize.call_capture(trans_id) # r.split('|')[6] in first response..
if r.split('|')[0] == '1':
# we captured it.
else:
error = r.split('|')[3]
هناك المزيد من الخيارات وطرق الطلب والفروق الدقيقة في الاستجابة للتحليل...أفترض ب / ج A
في AIM
تمثل advanced
أن جميع خيارات Authorize.net متاحة.
http://developer.authorize.net/guides/AIM/
أعلم أن سؤالك هو ما هو lib الأفضل ..حسنًا، قد يكون من الأسهل فقط تنفيذ طلبك المخصص والاستجابة لمتطلباتك المحددة بدلاً من محاولة البحث عن واجهة برمجة التطبيقات أعلى واجهة برمجة التطبيقات.
هناك دائمًا بايثون: https://github.com/abunsen/Paython
يدعم حاليًا أكثر من 5 بوابات دفع:
- Authorize.net
- البيانات الأولى/نقطة الارتباط
- بوابة مبتكرة (من إحدس)
- بلجن باي
- شريط
هنا مثال:
from paython import CreditCard, AuthorizeNet
قم بإعداد البطاقة أولاً:
credit_card = CreditCard(
number = '4111111111111111',
exp_mo = '02',
exp_yr = '2012',
first_name = 'John',
last_name = 'Doe',
cvv = '911',
strict = False
)
تحقق مما إذا كانت صالحة:
if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date
قم بإعداد بيانات العميل لتحصيل الرسوم، ليست كل الحقول مطلوبة:
customer_data = dict(
address='123 Main St',
address2='Apt 1',
city='Pleasantville',
state='IA',
zipcode='54321',
country='US',
phone='654-369-9589',
email='john@localwoodshop.com',
ip='127.0.0.1')
التفويض ضد البوابة، تتضمن الخيارات إخراج التصحيح أو بيانات اعتماد الاختبار:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.auth(amount='0.05', credit_card=credit_card, billing_info=customer_data, shipping_info=None)
الآن يمكنك تسوية:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.settle(amount='0.05', trans_id='2156729380')
لقد كتبت مؤخرًا واجهة برمجة التطبيقات هذه لـ Python وAuthorize.net بعد الفشل في العثور على واجهة تدعم جميع وظائف Authorize.net.
أدرك أن هذا متأخر بعض الشيء، ولكن آمل أن يساعد الآخرين.
لقد صادفت مؤخرا Py-Authorize
الذي يحتوي على بعض الوثائق الرائعة، مقارنة بالحزم الأخرى المتاحة.يمكنك تثبيته عبر:
pip install Py-Authorize
يبدو أنه يقوم بتثبيت التبعية (colondar
) والتي عند تثبيتها عبر pip
قديم لذا يمكنك الحصول على الأحدث (في وقت كتابة هذه السطور) عن طريق القيام بما يلي:
pip install git+git://github.com/Pylons/colander.git@1.0b1
المستندات هنا: http://vcatalano.github.io/py-authorize/index.html
يعمل بشكل رائع حسب تجربتي، ولكن بالنسبة للمشروع الذي أستخدمه فيه، كنت بحاجة فقط إلى AuthCapture وليس ARB أو أي شيء آخر...جربه.أفضل حزمة وجدتها حتى الآن.