本文整理汇总了Python中stats.models.Contribution.save方法的典型用法代码示例。如果您正苦于以下问题:Python Contribution.save方法的具体用法?Python Contribution.save怎么用?Python Contribution.save使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stats.models.Contribution
的用法示例。
在下文中一共展示了Contribution.save方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: contribute
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def contribute(request, addon):
contrib_type = request.GET.get('type', 'suggested')
is_suggested = contrib_type == 'suggested'
source = request.GET.get('source', '')
comment = request.GET.get('comment', '')
amount = {
'suggested': addon.suggested_amount,
'onetime': request.GET.get('onetime-amount', '')}.get(contrib_type, '')
if not amount:
amount = settings.DEFAULT_SUGGESTED_CONTRIBUTION
contribution_uuid = hashlib.md5(str(uuid.uuid4())).hexdigest()
if addon.charity:
name, paypal_id = ('%s: %s' % (addon.name, addon.charity.name),
addon.charity.paypal)
else:
name, paypal_id = addon.name, addon.paypal_id
# l10n: {0} is the addon name
contrib_for = _(u'Contribution for {0}').format(jinja2.escape(name))
paykey, error = '', ''
try:
paykey = paypal.get_paykey(dict(uuid=contribution_uuid,
slug=addon.slug, amount=amount, email=paypal_id,
memo=contrib_for, ip=request.META.get('REMOTE_ADDR'),
pattern='addons.paypal'))
except:
log.error('Error getting paykey, contribution for addon: %s'
% addon.pk, exc_info=True)
error = _('There was an error communicating with PayPal.')
if paykey:
contrib = Contribution(addon_id=addon.id,
charity_id=addon.charity_id,
amount=amount,
source=source,
source_locale=request.LANG,
annoying=addon.annoying,
uuid=str(contribution_uuid),
is_suggested=is_suggested,
suggested_amount=addon.suggested_amount,
comment=comment,
paykey=paykey)
contrib.save()
assert settings.PAYPAL_FLOW_URL, 'settings.PAYPAL_FLOW_URL is not defined'
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if request.GET.get('result_type') == 'json' or request.is_ajax():
# If there was an error getting the paykey, then JSON will
# not have a paykey and the JS can cope appropriately.
return http.HttpResponse(json.dumps({'url': url,
'paykey': paykey,
'error': error}),
content_type='application/json')
return http.HttpResponseRedirect(url)
示例2: purchase
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def purchase(request, addon):
log.debug("Starting purchase of addon: %s by user: %s" % (addon.pk, request.amo_user.pk))
amount = addon.premium.get_price()
source = request.GET.get("source", "")
uuid_ = hashlib.md5(str(uuid.uuid4())).hexdigest()
# l10n: {0} is the addon name
contrib_for = _(u"Purchase of {0}").format(jinja2.escape(addon.name))
paykey, error = "", ""
try:
paykey = paypal.get_paykey(
dict(
uuid=uuid_,
slug=addon.slug,
amount=amount,
memo=contrib_for,
email=addon.paypal_id,
ip=request.META.get("REMOTE_ADDR"),
pattern="addons.purchase.finished",
qs={"realurl": request.GET.get("realurl")},
ipn=False,
)
)
except:
log.error("Error getting paykey, purchase of addon: %s" % addon.pk, exc_info=True)
error = _("There was an error communicating with PayPal.")
if paykey:
contrib = Contribution(
addon_id=addon.id,
amount=amount,
source=source,
source_locale=request.LANG,
uuid=str(uuid_),
type=amo.CONTRIB_PENDING,
paykey=paykey,
user=request.amo_user,
)
contrib.save()
log.debug("Got paykey for addon: %s by user: %s" % (addon.pk, request.amo_user.pk))
url = "%s?paykey=%s" % (settings.PAYPAL_FLOW_URL, paykey)
if request.GET.get("result_type") == "json" or request.is_ajax():
return http.HttpResponse(
json.dumps({"url": url, "paykey": paykey, "error": error}), content_type="application/json"
)
return http.HttpResponseRedirect(url)
示例3: purchase
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def purchase(request, addon):
log.debug('Starting purchase of addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
amount = addon.premium.get_price()
source = request.GET.get('source', '')
uuid_ = hashlib.md5(str(uuid.uuid4())).hexdigest()
# l10n: {0} is the addon name
contrib_for = _(u'Purchase of {0}').format(jinja2.escape(addon.name))
paykey, error = '', ''
try:
pattern = 'addons.purchase.finished'
slug = addon.slug
if addon.is_webapp():
pattern = 'apps.purchase.finished'
slug = addon.app_slug
paykey = paypal.get_paykey(dict(uuid=uuid_, slug=slug,
amount=amount, memo=contrib_for, email=addon.paypal_id,
ip=request.META.get('REMOTE_ADDR'),
pattern=pattern,
qs={'realurl': request.GET.get('realurl')},
chains=settings.PAYPAL_CHAINS))
except:
log.error('Error getting paykey, purchase of addon: %s' % addon.pk,
exc_info=True)
error = _('There was an error communicating with PayPal.')
if paykey:
contrib = Contribution(addon_id=addon.id, amount=amount,
source=source, source_locale=request.LANG,
uuid=str(uuid_), type=amo.CONTRIB_PENDING,
paykey=paykey, user=request.amo_user)
log.debug('Storing contrib for uuid: %s' % uuid_)
contrib.save()
else:
log.error('No paykey present for uuid: %s' % uuid_)
log.debug('Got paykey for addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if request.GET.get('result_type') == 'json' or request.is_ajax():
return http.HttpResponse(json.dumps({'url': url,
'paykey': paykey,
'error': error}),
content_type='application/json')
return http.HttpResponseRedirect(url)
示例4: old_contribute
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def old_contribute(request, addon):
contrib_type = request.GET.get('type', '')
is_suggested = contrib_type == 'suggested'
source = request.GET.get('source', '')
comment = request.GET.get('comment', '')
amount = {
'suggested': addon.suggested_amount,
'onetime': request.GET.get('onetime-amount', ''),
'monthly': request.GET.get('monthly-amount', '')}.get(contrib_type, '')
contribution_uuid = hashlib.md5(str(uuid.uuid4())).hexdigest()
contrib = Contribution(addon_id=addon.id,
charity_id=addon.charity_id,
amount=amount,
source=source,
source_locale=request.LANG,
annoying=addon.annoying,
uuid=str(contribution_uuid),
is_suggested=is_suggested,
suggested_amount=addon.suggested_amount,
comment=comment)
contrib.save()
return_url = "%s?%s" % (reverse('addons.thanks', args=[addon.slug]),
urllib.urlencode({'uuid': contribution_uuid}))
# L10n: {0} is an add-on name.
if addon.charity:
name, paypal = addon.charity.name, addon.charity.paypal
else:
name, paypal = addon.name, addon.paypal_id
contrib_for = _(u'Contribution for {0}').format(jinja2.escape(name))
redirect_url_params = contribute_url_params(
paypal,
addon.id,
contrib_for,
absolutify(return_url),
amount,
contribution_uuid,
contrib_type == 'monthly',
comment)
return http.HttpResponseRedirect(settings.PAYPAL_CGI_URL
+ '?'
+ urllib.urlencode(redirect_url_params))
示例5: contribute
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def contribute(request, addon_id):
addon = get_object_or_404(Addon.objects.valid(), id=addon_id)
contrib_type = request.GET.get('type', '')
is_suggested = contrib_type == 'suggested'
source = request.GET.get('source', '')
comment = request.GET.get('comment', '')
amount = {
'suggested': addon.suggested_amount,
'onetime': request.GET.get('onetime-amount', ''),
'monthly': request.GET.get('monthly-amount', '')}.get(contrib_type, '')
contribution_uuid = hashlib.md5(str(uuid.uuid4())).hexdigest()
contrib = Contribution(addon_id=addon.id,
amount=amount,
source=source,
source_locale=request.LANG,
annoying=addon.annoying,
uuid=str(contribution_uuid),
is_suggested=is_suggested,
suggested_amount=addon.suggested_amount,
comment=comment)
contrib.save()
return_url = "%s?%s" % (reverse('addons.thanks', args=[addon.id]),
urllib.urlencode({'uuid': contribution_uuid}))
""" L10n: Phrase that will appear on the paypal
site specifying who the contribution is for"""
contrib_for = _('Contribution for {addon_name}').format(addon_name=addon.name)
redirect_url_params = contribute_url_params(
addon.paypal_id,
addon.id,
contrib_for,
absolutify(return_url),
amount,
contribution_uuid,
contrib_type == 'monthly',
comment)
return http.HttpResponseRedirect(settings.PAYPAL_CGI_URL
+ '?'
+ urllib.urlencode(redirect_url_params))
示例6: test_total_contributions
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def test_total_contributions(self):
c = Contribution()
c.addon_id = 3615
c.amount = "9.99"
c.save()
tasks.addon_total_contributions(3615)
a = Addon.objects.no_cache().get(pk=3615)
eq_(float(a.total_contributions), 9.99)
c = Contribution()
c.addon_id = 3615
c.amount = "10.00"
c.save()
tasks.addon_total_contributions(3615)
a = Addon.objects.no_cache().get(pk=3615)
eq_(float(a.total_contributions), 19.99)
示例7: purchase
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
#.........这里部分代码省略.........
'memo': contrib_for})
except client.Error as error:
# Note that by assigning this to error, it will go into the return
# value for the json. General solitude errors will then be
# reported back to the user.
paypal.paypal_log_cef(request, addon, uuid_,
'PayKey Failure', 'PAYKEYFAIL',
'There was an error getting the paykey')
log.error('Error getting paykey: %s' % addon.pk, exc_info=True)
# TODO(solitude): just use the dictionary when solitude is live.
paykey = result.get('pay_key', '')
status = result.get('status', '')
uuid_ = result.get('uuid', '')
else:
# TODO(solitude): remove this when solitude goes live.
try:
paykey, status = paypal.get_paykey(dict(
amount=amount,
chains=settings.PAYPAL_CHAINS,
currency=currency,
email=addon.paypal_id,
ip=request.META.get('REMOTE_ADDR'),
memo=contrib_for,
pattern='purchase.done',
preapproval=preapproval,
qs={'realurl': request.POST.get('realurl')},
slug=addon.app_slug,
uuid=uuid_
))
except paypal.PaypalError as error:
paypal.paypal_log_cef(request, addon, uuid_,
'PayKey Failure', 'PAYKEYFAIL',
'There was an error getting the paykey')
log.error('Error getting paykey, purchase of addon: %s' % addon.pk,
exc_info=True)
if paykey:
# TODO(solitude): at some point we'll have to see what to do with
# contributions.
download_source = request.REQUEST.get('src', '')
contrib = Contribution(addon_id=addon.id, amount=amount,
source=download_source,
source_locale=request.LANG,
uuid=str(uuid_), type=amo.CONTRIB_PENDING,
paykey=paykey, user=request.amo_user,
price_tier=addon.premium.price,
client_data=ClientData.get_or_create(request))
log.debug('Storing contrib for uuid: %s' % uuid_)
# If this was a pre-approval, it's completed already, we'll
# double check this with PayPal, just to be sure nothing went wrong.
if status == 'COMPLETED':
paypal.paypal_log_cef(request, addon, uuid_,
'Purchase', 'PURCHASE',
'A user purchased using pre-approval')
log.debug('Status completed for uuid: %s' % uuid_)
if waffle.flag_is_active(request, 'solitude-payments'):
result = client.post_pay_check(data={'pay_key': paykey})
if result['status'] == 'COMPLETED':
contrib.type = amo.CONTRIB_PURCHASE
else:
log.error('Check purchase failed on uuid: %s' % uuid_)
status = 'NOT-COMPLETED'
else:
#TODO(solitude): remove this when solitude goes live.
if paypal.check_purchase(paykey) == 'COMPLETED':
log.debug('Check purchase completed for uuid: %s' % uuid_)
contrib.type = amo.CONTRIB_PURCHASE
else:
# In this case PayPal disagreed, we should not be trusting
# what get_paykey said. Which is a worry.
log.error('Check purchase failed on uuid: %s' % uuid_)
status = 'NOT-COMPLETED'
contrib.save()
else:
log.error('No paykey present for uuid: %s' % uuid_)
log.debug('Got paykey for addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if request.POST.get('result_type') == 'json' or request.is_ajax():
return http.HttpResponse(json.dumps({'url': url,
'paykey': paykey,
'error': str(error),
'status': status}),
content_type='application/json')
# This is the non-Ajax fallback.
if status != 'COMPLETED':
return http.HttpResponseRedirect(url)
messages.success(request, _('Purchase complete'))
return http.HttpResponseRedirect(addon.get_detail_url())
示例8: purchase
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def purchase(request, addon):
log.debug('Starting purchase of addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
amount = addon.premium.get_price()
source = request.POST.get('source', '')
uuid_ = hashlib.md5(str(uuid.uuid4())).hexdigest()
# L10n: {0} is the addon name.
contrib_for = (_(u'Mozilla Marketplace purchase of {0}')
.format(addon.name))
# Default is USD.
amount, currency = addon.premium.get_price(), 'USD'
# If tier is specified, then let's look it up.
if waffle.switch_is_active('currencies'):
form = PriceCurrencyForm(data=request.POST, addon=addon)
if form.is_valid():
tier = form.get_tier()
if tier:
amount, currency = tier.price, tier.currency
if not amount:
# We won't write a contribution row for this because there
# will not be a valid Paypal transaction. But we have to write the
# Purchase row, something that writing to the contribution normally
# does for us.
AddonPurchase.objects.safer_get_or_create(addon=addon,
user=request.amo_user)
return http.HttpResponse(json.dumps({'url': '', 'paykey': '',
'error': '',
'status': 'COMPLETED'}),
content_type='application/json')
paykey, status, error = '', '', ''
preapproval = None
if request.amo_user:
preapproval = request.amo_user.get_preapproval()
# User the users default currency.
if currency == 'USD' and preapproval and preapproval.currency:
currency = preapproval.currency
try:
paykey, status = paypal.get_paykey(dict(
amount=amount,
chains=settings.PAYPAL_CHAINS,
currency=currency,
email=addon.paypal_id,
ip=request.META.get('REMOTE_ADDR'),
memo=contrib_for,
pattern='purchase.done',
preapproval=preapproval,
qs={'realurl': request.POST.get('realurl')},
slug=addon.app_slug,
uuid=uuid_
))
except paypal.PaypalError as error:
paypal.paypal_log_cef(request, addon, uuid_,
'PayKey Failure', 'PAYKEYFAIL',
'There was an error getting the paykey')
log.error('Error getting paykey, purchase of addon: %s' % addon.pk,
exc_info=True)
if paykey:
contrib = Contribution(addon_id=addon.id, amount=amount,
source=source, source_locale=request.LANG,
uuid=str(uuid_), type=amo.CONTRIB_PENDING,
paykey=paykey, user=request.amo_user)
log.debug('Storing contrib for uuid: %s' % uuid_)
# If this was a pre-approval, it's completed already, we'll
# double check this with PayPal, just to be sure nothing went wrong.
if status == 'COMPLETED':
paypal.paypal_log_cef(request, addon, uuid_,
'Purchase', 'PURCHASE',
'A user purchased using pre-approval')
log.debug('Status is completed for uuid: %s' % uuid_)
if paypal.check_purchase(paykey) == 'COMPLETED':
log.debug('Check purchase is completed for uuid: %s' % uuid_)
contrib.type = amo.CONTRIB_PURCHASE
else:
# In this case PayPal disagreed, we should not be trusting
# what get_paykey said. Which is a worry.
log.error('Check purchase failed on uuid: %s' % uuid_)
status = 'NOT-COMPLETED'
contrib.save()
else:
log.error('No paykey present for uuid: %s' % uuid_)
log.debug('Got paykey for addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if request.POST.get('result_type') == 'json' or request.is_ajax():
return http.HttpResponse(json.dumps({'url': url,
'paykey': paykey,
'error': str(error),
'status': status}),
content_type='application/json')
#.........这里部分代码省略.........
示例9: contribute
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def contribute(request, addon):
webapp = addon.is_webapp()
contrib_type = request.POST.get('type', 'suggested')
is_suggested = contrib_type == 'suggested'
source = request.POST.get('source', '')
comment = request.POST.get('comment', '')
amount = {
'suggested': addon.suggested_amount,
'onetime': request.POST.get('onetime-amount', '')
}.get(contrib_type, '')
if not amount:
amount = settings.DEFAULT_SUGGESTED_CONTRIBUTION
# This is all going to get shoved into solitude. Temporary.
form = ContributionForm({'amount': amount})
if not form.is_valid():
return http.HttpResponse(json.dumps({'error': 'Invalid data.',
'status': '', 'url': '',
'paykey': ''}),
content_type='application/json')
contribution_uuid = hashlib.md5(str(uuid.uuid4())).hexdigest()
if addon.charity:
# TODO(andym): Figure out how to get this in the addon authors
# locale, rather than the contributors locale.
name, paypal_id = (u'%s: %s' % (addon.name, addon.charity.name),
addon.charity.paypal)
else:
name, paypal_id = addon.name, addon.paypal_id
# l10n: {0} is the addon name
contrib_for = _(u'Contribution for {0}').format(jinja2.escape(name))
preapproval = None
if waffle.flag_is_active(request, 'allow-pre-auth') and request.amo_user:
preapproval = request.amo_user.get_preapproval()
paykey, error, status = '', '', ''
try:
paykey, status = paypal.get_paykey(
dict(amount=amount,
email=paypal_id,
ip=request.META.get('REMOTE_ADDR'),
memo=contrib_for,
pattern='%s.paypal' % ('apps' if webapp else 'addons'),
preapproval=preapproval,
slug=addon.slug,
uuid=contribution_uuid))
except paypal.PaypalError as error:
paypal.paypal_log_cef(request, addon, contribution_uuid,
'PayKey Failure', 'PAYKEYFAIL',
'There was an error getting the paykey')
log.error('Error getting paykey, contribution for addon: %s'
% addon.pk, exc_info=True)
if paykey:
contrib = Contribution(addon_id=addon.id, charity_id=addon.charity_id,
amount=amount, source=source,
source_locale=request.LANG,
annoying=addon.annoying,
uuid=str(contribution_uuid),
is_suggested=is_suggested,
suggested_amount=addon.suggested_amount,
comment=comment, paykey=paykey)
contrib.save()
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if request.GET.get('result_type') == 'json' or request.is_ajax():
# If there was an error getting the paykey, then JSON will
# not have a paykey and the JS can cope appropriately.
return http.HttpResponse(json.dumps({'url': url,
'paykey': paykey,
'error': str(error),
'status': status}),
content_type='application/json')
return http.HttpResponseRedirect(url)
示例10: purchase
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def purchase(request, addon):
log.debug('Starting purchase of addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
amount = addon.premium.get_price()
source = request.POST.get('source', '')
uuid_ = hashlib.md5(str(uuid.uuid4())).hexdigest()
# l10n: {0} is the addon name
contrib_for = _(u'Purchase of {0}').format(jinja2.escape(addon.name))
# Default is USD.
amount, currency = addon.premium.get_price(), 'USD'
# If tier is specified, then let's look it up.
form = PriceCurrencyForm(data=request.POST, addon=addon)
if form.is_valid():
tier = form.get_tier()
if tier:
amount, currency = tier.price, tier.currency
paykey, status, error = '', '', ''
preapproval = None
if waffle.flag_is_active(request, 'allow-pre-auth') and request.amo_user:
preapproval = request.amo_user.get_preapproval()
try:
pattern = 'addons.purchase.finished'
slug = addon.slug
if addon.is_webapp():
pattern = 'apps.purchase.finished'
slug = addon.app_slug
paykey, status = paypal.get_paykey(
dict(amount=amount,
chains=settings.PAYPAL_CHAINS,
currency=currency,
email=addon.paypal_id,
ip=request.META.get('REMOTE_ADDR'),
memo=contrib_for,
pattern=pattern,
preapproval=preapproval, qs={'realurl':
request.POST.get('realurl')},
slug=slug, uuid=uuid_))
except paypal.PaypalError as error:
paypal.paypal_log_cef(request, addon, uuid_,
'PayKey Failure', 'PAYKEYFAIL',
'There was an error getting the paykey')
log.error('Error getting paykey, purchase of addon: %s' % addon.pk,
exc_info=True)
if paykey:
contrib = Contribution(addon_id=addon.id, amount=amount,
source=source, source_locale=request.LANG,
uuid=str(uuid_), type=amo.CONTRIB_PENDING,
paykey=paykey, user=request.amo_user)
log.debug('Storing contrib for uuid: %s' % uuid_)
# If this was a pre-approval, it's completed already, we'll
# double check this with PayPal, just to be sure nothing went wrong.
if status == 'COMPLETED':
paypal.paypal_log_cef(request, addon, uuid_,
'Purchase', 'PURCHASE',
'A user purchased using pre-approval')
log.debug('Status is completed for uuid: %s' % uuid_)
if paypal.check_purchase(paykey) == 'COMPLETED':
log.debug('Check purchase is completed for uuid: %s' % uuid_)
contrib.type = amo.CONTRIB_PURCHASE
else:
# In this case PayPal disagreed, we should not be trusting
# what get_paykey said. Which is a worry.
log.error('Check purchase failed on uuid: %s' % uuid_)
status = 'NOT-COMPLETED'
contrib.save()
else:
log.error('No paykey present for uuid: %s' % uuid_)
log.debug('Got paykey for addon: %s by user: %s'
% (addon.pk, request.amo_user.pk))
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if request.POST.get('result_type') == 'json' or request.is_ajax():
return http.HttpResponse(json.dumps({'url': url,
'paykey': paykey,
'error': str(error),
'status': status}),
content_type='application/json')
# This is the non-Ajax fallback.
if status != 'COMPLETED':
return http.HttpResponseRedirect(url)
messages.success(request, _('Purchase complete'))
return http.HttpResponseRedirect(shared_url('addons.detail', addon))
示例11: TODO
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
% uuid_)
status = 'NOT-COMPLETED'
else:
# TODO(solitude): remove this when solitude goes live.
if paypal.check_purchase(paykey) == 'COMPLETED':
log.debug('Check in-app payment is completed for uuid: %s'
% uuid_)
contrib.type = amo.CONTRIB_INAPP
else:
# In this case PayPal disagreed, we should not be trusting
# what get_paykey said. Which is a worry.
log.error('Check in-app payment failed on uuid: %s'
% uuid_)
status = 'NOT-COMPLETED'
contrib.save()
payment = InappPayment.objects.create(
config=pay_req['_config'],
contribution=contrib,
name=pay_req['request']['name'],
description=pay_req['request']['description'],
app_data=pay_req['request']['productdata'])
InappPayLog.log(request, 'PAY', config=pay_req['_config'])
url = '%s?paykey=%s' % (settings.PAYPAL_FLOW_URL, paykey)
if status != 'COMPLETED':
return http.HttpResponseRedirect(url)
示例12: contribute
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def contribute(request, addon):
contrib_type = request.POST.get("type", "suggested")
is_suggested = contrib_type == "suggested"
source = request.POST.get("source", "")
comment = request.POST.get("comment", "")
amount = {"suggested": addon.suggested_amount, "onetime": request.POST.get("onetime-amount", "")}.get(
contrib_type, ""
)
if not amount:
amount = settings.DEFAULT_SUGGESTED_CONTRIBUTION
form = ContributionForm({"amount": amount})
if not form.is_valid():
return http.HttpResponse(
json.dumps({"error": "Invalid data.", "status": "", "url": "", "paykey": ""}),
content_type="application/json",
)
contribution_uuid = hashlib.md5(str(uuid.uuid4())).hexdigest()
if addon.charity:
# TODO(andym): Figure out how to get this in the addon authors
# locale, rather than the contributors locale.
name, paypal_id = (u"%s: %s" % (addon.name, addon.charity.name), addon.charity.paypal)
else:
name, paypal_id = addon.name, addon.paypal_id
# l10n: {0} is the addon name
contrib_for = _(u"Contribution for {0}").format(jinja2.escape(name))
paykey, error, status = "", "", ""
try:
paykey, status = paypal.get_paykey(
dict(
amount=amount,
email=paypal_id,
ip=request.META.get("REMOTE_ADDR"),
memo=contrib_for,
pattern="addons.paypal",
slug=addon.slug,
uuid=contribution_uuid,
)
)
except paypal.PaypalError as error:
paypal.paypal_log_cef(
request, addon, contribution_uuid, "PayKey Failure", "PAYKEYFAIL", "There was an error getting the paykey"
)
log.error("Error getting paykey, contribution for addon: %s" % addon.pk, exc_info=True)
if paykey:
contrib = Contribution(
addon_id=addon.id,
charity_id=addon.charity_id,
amount=amount,
source=source,
source_locale=request.LANG,
annoying=addon.annoying,
uuid=str(contribution_uuid),
is_suggested=is_suggested,
suggested_amount=addon.suggested_amount,
comment=comment,
paykey=paykey,
)
contrib.save()
url = "%s?paykey=%s" % (settings.PAYPAL_FLOW_URL, paykey)
if request.GET.get("result_type") == "json" or request.is_ajax():
# If there was an error getting the paykey, then JSON will
# not have a paykey and the JS can cope appropriately.
return http.HttpResponse(
json.dumps({"url": url, "paykey": paykey, "error": str(error), "status": status}),
content_type="application/json",
)
return http.HttpResponseRedirect(url)
示例13: purchase
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def purchase(request, addon):
log.debug("Starting purchase of addon: %s by user: %s" % (addon.pk, request.amo_user.pk))
amount = addon.premium.get_price()
source = request.POST.get("source", "")
uuid_ = hashlib.md5(str(uuid.uuid4())).hexdigest()
# l10n: {0} is the addon name
contrib_for = _(u"Purchase of {0}").format(jinja2.escape(addon.name))
# Default is USD.
amount, currency = addon.premium.get_price(), "USD"
# If tier is specified, then let's look it up.
form = PriceCurrencyForm(data=request.POST, price=addon.premium.price)
if form.is_valid():
tier = form.get_tier()
if tier:
amount, currency = tier.price, tier.currency
paykey, status, error = "", "", ""
preapproval = None
if waffle.flag_is_active(request, "allow-pre-auth") and request.amo_user:
preapproval = request.amo_user.get_preapproval()
try:
pattern = "addons.purchase.finished"
slug = addon.slug
if addon.is_webapp():
pattern = "apps.purchase.finished"
slug = addon.app_slug
paykey, status = paypal.get_paykey(
dict(
amount=amount,
chains=settings.PAYPAL_CHAINS,
currency=currency,
email=addon.paypal_id,
ip=request.META.get("REMOTE_ADDR"),
memo=contrib_for,
pattern=pattern,
preapproval=preapproval,
qs={"realurl": request.POST.get("realurl")},
slug=slug,
uuid=uuid_,
)
)
except paypal.PaypalError as error:
paypal.paypal_log_cef(
request, addon, uuid_, "PayKey Failure", "PAYKEYFAIL", "There was an error getting the paykey"
)
log.error("Error getting paykey, purchase of addon: %s" % addon.pk, exc_info=True)
if paykey:
contrib = Contribution(
addon_id=addon.id,
amount=amount,
source=source,
source_locale=request.LANG,
uuid=str(uuid_),
type=amo.CONTRIB_PENDING,
paykey=paykey,
user=request.amo_user,
)
log.debug("Storing contrib for uuid: %s" % uuid_)
# If this was a pre-approval, it's completed already, we'll
# double check this with PayPal, just to be sure nothing went wrong.
if status == "COMPLETED":
paypal.paypal_log_cef(request, addon, uuid_, "Purchase", "PURCHASE", "A user purchased using pre-approval")
log.debug("Status is completed for uuid: %s" % uuid_)
if paypal.check_purchase(paykey) == "COMPLETED":
log.debug("Check purchase is completed for uuid: %s" % uuid_)
contrib.type = amo.CONTRIB_PURCHASE
else:
# In this case PayPal disagreed, we should not be trusting
# what get_paykey said. Which is a worry.
log.error("Check purchase failed on uuid: %s" % uuid_)
status = "NOT-COMPLETED"
contrib.save()
else:
log.error("No paykey present for uuid: %s" % uuid_)
log.debug("Got paykey for addon: %s by user: %s" % (addon.pk, request.amo_user.pk))
url = "%s?paykey=%s" % (settings.PAYPAL_FLOW_URL, paykey)
if request.POST.get("result_type") == "json" or request.is_ajax():
return http.HttpResponse(
json.dumps({"url": url, "paykey": paykey, "error": str(error), "status": status}),
content_type="application/json",
)
# This is the non-Ajax fallback.
if status != "COMPLETED":
return redirect(url)
messages.success(request, _("Purchase complete"))
return redirect(shared_url("addons.detail", addon))
示例14: contribute
# 需要导入模块: from stats.models import Contribution [as 别名]
# 或者: from stats.models.Contribution import save [as 别名]
def contribute(request, addon):
contrib_type = request.GET.get("type", "suggested")
is_suggested = contrib_type == "suggested"
source = request.GET.get("source", "")
comment = request.GET.get("comment", "")
amount = {"suggested": addon.suggested_amount, "onetime": request.GET.get("onetime-amount", "")}.get(
contrib_type, ""
)
if not amount:
amount = settings.DEFAULT_SUGGESTED_CONTRIBUTION
contribution_uuid = hashlib.md5(str(uuid.uuid4())).hexdigest()
if addon.charity:
name, paypal_id = ("%s: %s" % (addon.name, addon.charity.name), addon.charity.paypal)
else:
name, paypal_id = addon.name, addon.paypal_id
# l10n: {0} is the addon name
contrib_for = _(u"Contribution for {0}").format(jinja2.escape(name))
paykey, error = "", ""
try:
paykey = paypal.get_paykey(
dict(
uuid=contribution_uuid,
slug=addon.slug,
amount=amount,
email=paypal_id,
memo=contrib_for,
ip=request.META.get("REMOTE_ADDR"),
pattern="addons.paypal",
)
)
except:
log.error("Error getting paykey, contribution for addon: %s" % addon.pk, exc_info=True)
error = _("There was an error communicating with PayPal.")
if paykey:
contrib = Contribution(
addon_id=addon.id,
charity_id=addon.charity_id,
amount=amount,
source=source,
source_locale=request.LANG,
annoying=addon.annoying,
uuid=str(contribution_uuid),
is_suggested=is_suggested,
suggested_amount=addon.suggested_amount,
comment=comment,
paykey=paykey,
)
contrib.save()
assert settings.PAYPAL_FLOW_URL, "settings.PAYPAL_FLOW_URL is not defined"
url = "%s?paykey=%s" % (settings.PAYPAL_FLOW_URL, paykey)
if request.GET.get("result_type") == "json" or request.is_ajax():
# If there was an error getting the paykey, then JSON will
# not have a paykey and the JS can cope appropriately.
return http.HttpResponse(
json.dumps({"url": url, "paykey": paykey, "error": error}), content_type="application/json"
)
return http.HttpResponseRedirect(url)