order = ("VERSIO", "MYYJA", "KYSELYTUNNUS", "MAKSUTUNNUS", "VIITE", "TARKISTE-VERSIO", "secret") s = "" for p in order: if p == "secret": s += self.get_setting("merchant_secret") else: s += data[p] import md5 m = md5.new(s) data["TARKISTE"] = m.hexdigest().upper() con = urllib2.urlopen(self.QUERY_URL, urlencode(data)) resp = con.read() print resp #respdata = cgi.parse_qs(resp) # No response MAC is sent. return if respdata["ReturnCode"] == "000": return (True, respdata) else: return (False, respdata) PaymentProcessor.register_processor(OpPaymentProcessor)
"AAB_REJECT": "error", } PAYMENT_REQ_MAC = "AAB_MAC" PAYMENT_REQ_PARAMS = ( ("AAB_VERSION", "data"), ("AAB_STAMP", "data"), ("AAB_RCV_ID", "data"), ("AAB_AMOUNT", "data"), ("AAB_REF", "data"), ("AAB_DATE", "data"), ("AAB_CUR", "data"), ("merchant_secret", "processor"), ) PAYMENT_REQ_SEPARATOR = "&" PAYMENT_RESP_MAC = "AAB-RETURN-MAC" PAYMENT_RESP_PARAMS = ( ("AAB-RETURN-VERSION", "GET"), ("AAB-RETURN-STAMP","GET"), ("AAB-RETURN-REF", "GET"), ("AAB-RETURN-PAID", "GET"), ("merchant_secret", "processor"), ) PAYMENT_RESP_SEPARATOR = "&" COST_FIXED = "0.34" COST_PERCENTAGE = "0.00" PaymentProcessor.register_processor(SpankkiPaymentProcessor)
data["gsNextAkt"] = "InetPaySt" data["Version"] = "0001" data["gsResp"] = "S" order = ("secret", "MerchantID", "Refno") s = "" for p in order: if p == "secret": s += self.get_setting("merchant_secret") else: s += data[p] import md5 m = md5.new(s) data["VerifyCode"] = m.hexdigest().upper() con = urllib2.urlopen(self.QUERY_URL, urlencode(data)) resp = con.read() respdata = cgi.parse_qs(resp) # No response MAC is sent. if respdata["ReturnCode"] == "000": return (True, respdata) else: return (False, respdata) PaymentProcessor.register_processor(SampoPaymentProcessor)
""" Payment processor for Aktia/SP/POP-maksu. Extends the generic Samlink payment processor. Features: authcap, (query) Region(s): FI Specifications: ?? Merchant credentials for testing: merchant_key = "0000000000" merchant_secret = "11111111111111111111" Client credentials for testing: username = "******" password = "******" """ METHOD = "aktia" URL = "https://verkkomaksu.inetpankki.samlink.fi/vm/login.html" QUERY_URL = "https://verkkomaksu.inetpankki.samlink.fi/vm/kysely.html" BUTTON_URL = "FIXME" COST_FIXED = "0.34" COST_PERCENTAGE = "0.00" PaymentProcessor.register_processor(AktiaPaymentProcessor)
"NET_REJECT": "error", } PAYMENT_REQ_MAC = "NET_MAC" PAYMENT_REQ_PARAMS = ( ("NET_VERSION", "data"), ("NET_STAMP", "data"), ("NET_SELLER_ID", "data"), ("NET_AMOUNT", "data"), ("NET_REF", "data"), ("NET_DATE", "data"), ("NET_CUR", "data"), ("merchant_secret", "processor"), ) PAYMENT_REQ_SEPARATOR = "&" PAYMENT_RESP_MAC = "NET_RETURN_MAC" PAYMENT_RESP_PARAMS = ( ("NET_RETURN_VERSION", "GET"), ("NET_RETURN_STAMP","GET"), ("NET_RETURN_REF", "GET"), ("NET_RETURN_PAID", "GET"), ("merchant_secret", "processor"), ) PAYMENT_RESP_SEPARATOR = "&" COST_FIXED = "1.10" COST_PERCENTAGE = "0.00" PaymentProcessor.register_processor(SppopPaymentProcessor)
for (var, source) in self.PAYMENT_RESP_PARAMS: if source == 'GET': s += request.GET.get(var, '') elif source == 'POST': s += request.POST.get(var, '') elif source == 'processor': s += self.get_parameter(var) elif source == 'payment': value = payment.get_value(var) if var == 'amount': value = self.massage_amount(value) s += value elif source == 'fixed': s += var else: pass s += self.PAYMENT_RESP_SEPARATOR m = md5.new(s) return_mac = request.GET.get(self.PAYMENT_RESP_MAC, '') if m.hexdigest().upper() != return_mac.upper(): raise PaymentInvalidMacError("Return MAC doesn't match!") @classmethod def massage_amount(self, value): return value.replace(".", "") PaymentProcessor.register_processor(PaypalPaymentProcessor)
for (var, source) in self.PAYMENT_RESP_PARAMS: if source == 'GET': s += request.GET.get(var, '') elif source == 'POST': s += request.POST.get(var, '') elif source == 'processor': s += self.get_setting(var) elif source == 'payment': value = payment.get_value(var) if var == 'amount': value = self.massage_amount(value) s += value elif source == 'fixed': s += var else: pass s += self.PAYMENT_RESP_SEPARATOR m = md5.new(s) return_mac = request.GET.get(self.PAYMENT_RESP_MAC, '') if m.hexdigest().upper() != return_mac.upper(): raise PaymentInvalidMacError("Return MAC doesn't match!") @classmethod def massage_amount(self, value): return value.replace(".", "") PaymentProcessor.register_processor(LuottokuntaPaymentProcessor)
xml = XML(resp) for e in xml.getiterator(): if e.tag.startswith("SOLOPMT_"): respdata[e.tag] = e.text for p in REFUND_RESP_PARAMS: if p in respdata: macs += respdata[p] + "&" print "USE:", p else: print "NOT:", p # print "%s = %s" % (e.tag, e.text) macs += self.get_setting("merchant_secret") + "&" respmac = respdata["SOLOPMT_MAC"] import md5 m = md5.new(macs) print "macs", macs print "MAC-A", m.hexdigest().upper() print "MAC-B", respmac from exceptions import PaymentInvalidMacError if respmac != m.hexdigest().upper(): raise PaymentInvalidMacError("Response MAC is invalid.") return respdata PaymentProcessor.register_processor(NordeaPaymentProcessor)
"AAB_REJECT": "error", } PAYMENT_REQ_MAC = "AAB_MAC" PAYMENT_REQ_PARAMS = ( ("AAB_VERSION", "data"), ("AAB_STAMP", "data"), ("AAB_RCV_ID", "data"), ("AAB_AMOUNT", "data"), ("AAB_REF", "data"), ("AAB_DATE", "data"), ("AAB_CUR", "data"), ("merchant_secret", "processor"), ) PAYMENT_REQ_SEPARATOR = "&" PAYMENT_RESP_MAC = "AAB-RETURN-MAC" PAYMENT_RESP_PARAMS = ( ("AAB-RETURN-VERSION", "GET"), ("AAB-RETURN-STAMP","GET"), ("AAB-RETURN-REF", "GET"), ("AAB-RETURN-PAID", "GET"), ("merchant_secret", "processor"), ) PAYMENT_RESP_SEPARATOR = "&" COST_FIXED = "0.35" COST_PERCENTAGE = "0.00" PaymentProcessor.register_processor(TapiolaPaymentProcessor)