def make_payment(content_object, request=None, transaction_opts={}): """""" trans = Transaction(content_object=content_object) trans.status = Transaction.PROCESSING trans.save() # Basic params, needed in all cases. params = {amount_name: u"%.2f" % trans.amount, "MerchantReference": trans.merchant_reference} # set up params for an interactive payment url_root = u"http://%s" % request.META['HTTP_HOST'] params.update({"UrlFail": url_root + trans.get_failure_url(), "UrlSuccess": url_root + trans.get_success_url()}) params.update(transaction_opts) return begin_interactive(params)
def make_payment(content_object, request=None, transaction_opts={}): """Main entry point. If we have a request we do it interactive, otherwise it's a batch/offline payment.""" trans = Transaction(content_object=content_object) trans.status = Transaction.PROCESSING trans.save() # PxPost and PxPay have different element names. amount_name = "AmountInput" if request else "Amount" # Basic params, needed in all cases. params = {amount_name: u"%.2f" % trans.amount, "MerchantReference": trans.merchant_reference} if request: # set up params for an interactive payment url_root = u"http://%s" % request.META['HTTP_HOST'] params.update({"UrlFail": url_root + trans.get_failure_url(), "UrlSuccess": url_root + trans.get_success_url()}) if getattr(content_object, "is_recurring", lambda: False)(): assert hasattr(content_object, "set_billing_token") assert hasattr(content_object, "get_billing_token") params["EnableAddBillCard"] = "1" else: # set up for an offline/batch payment. params.update({"DpsBillingId": content_object.get_billing_token(), "TxnId": trans.transaction_id}) params.update(transaction_opts) if request: return begin_interactive(params) else: (success, result) = offline_payment(params) if success: status_updated = trans.set_status(Transaction.SUCCESSFUL) callback = getattr(content_object, "transaction_succeeded", lambda *args: None) else: status_updated = trans.set_status(Transaction.FAILED) callback = getattr(content_object, "transaction_failed", lambda *args: None) trans.result = result trans.save() callback(trans, False, status_updated) return (success, trans)