コード例 #1
0
ファイル: views.py プロジェクト: ribozz/cratis
    def get(self, request, *args, **kwargs):

        method = self.load_method(kwargs['method'])
        settings = method.behavior().config

        order = Order.objects.get(pk=request.session['order_id'])

        detalisation = order.get_detalisation()

    #    for row in detalisation['rows']:
    #        ulink_order.items.append(UlinkOrderItem(smart_str(row['title']), '', str(row['price'])))

        order_total = int(detalisation['full_total'] * 100)
        order_id = order.id


    #    key = """

    #"""
    #    oid = 'EB00310653'
        oid = settings['id']

        ecuno = str(order_id + 100000)
        ver = '004'
        eamount = str(order_total)
        cur = 'EUR'
        datetime = time.strftime("%Y%m%d%H%M%S")
        feedbackurl = 'http://' + request.META['HTTP_HOST'] + reverse('kardikeskus_payment_callback',
                                                                      kwargs={'method': method.slug})
        delivery = 'S'

        # padding
        feedbackurl = feedbackurl.ljust(128)
        ecuno = ecuno.zfill(12)
        eamount = eamount.zfill(12)

        data = ver + oid + ecuno + eamount + cur + datetime + feedbackurl + delivery

        signed = ssl_sign(data, load_pem_private_key(settings['pkey']))

        mac = signed.encode('hex')

        data = {
            'lang': 'et', # get_language(),
            'action': 'gaf',
            'ver': ver,
            'id': oid,
            'ecuno': ecuno,
            'eamount': eamount,
            'cur': 'EUR',
            'datetime': datetime,
            'charEncoding': 'UTF-8',
            'feedBackUrl': feedbackurl.strip(),
            'delivery': delivery,
            'mac': mac
        }

        log_payment(request, 'kardikeskus', 'pay_start', data)

        return render(request, 'payment/post_redirect.html', {'url': settings['url'], 'fields': data.items()})
コード例 #2
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):
        log_payment(request, 'dibs', 'pay_cancel')

    #    order_id = request.POST['orderid']
    #    order = Order.objects.get(order_id)
    #    order.mark_paid()

        return HttpResponseRedirect(reverse('orders_checkout'))
コード例 #3
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):
        log_payment(request, "paytrail", "pay_cancel")

        #    order_id = request.GET['orderid']
        #    order = Order.objects.get(order_id)
        #    order.mark_paid()

        return HttpResponseRedirect(reverse("orders_checkout"))
コード例 #4
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):
        log_payment(request, "paytrail", "pay_callback")

        # skip validation
        order_id = request.GET["orderid"]
        order = Order.objects.get(order_id)
        order.mark_paid()

        return HttpResponse("ok")
コード例 #5
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):
        log_payment(request, 'dibs', 'pay_callback')

        # skip validation
        order_id = request.POST['orderid']
        order = Order.objects.get(order_id)
        order.mark_paid()

        return HttpResponse('ok')
コード例 #6
0
ファイル: views.py プロジェクト: ribozz/cratis
    def get(self, request, *args, **kwargs):

        method = self.load_method(kwargs['method'])
        settings = method.behavior().config

        order = Order.objects.get(pk=request.session['order_id'])

        detalisation = order.get_detalisation()

        order_total = detalisation['full_total']
        order_id = order.id


        oid = settings['id']

        ecuno = str(order_id + 100000)
        eamount = str(order_total)
        feedbackurl = 'http://' + request.META['HTTP_HOST'] + reverse('pangalink_payment_callback',
                                                                      kwargs={'method': method.slug})
        cancelurl = 'http://' + request.META['HTTP_HOST'] + reverse('pangalink_payment_callback',
                                                                      kwargs={'method': method.slug})

        # padding
        feedbackurl = feedbackurl.ljust(128)
        ecuno = ecuno.zfill(12)
        eamount = eamount.zfill(12)

        data = {
            'VK_SERVICE': '1001',
            'VK_VERSION': '008',
            'VK_SND_ID': oid,
            'VK_STAMP': ecuno,
            'VK_AMOUNT': eamount,
            'VK_CURR': 'EUR',
            'VK_ACC': settings['account'],
            'VK_NAME': settings['owner'],
            'VK_REF': '',
            'VK_MSG': 'Order id ' + str(order_id),
            'VK_RETURN': feedbackurl,
            'VK_ENCODING': 'utf-8',
        }

        mac_data = ''
        for field in ['VK_SERVICE', 'VK_VERSION', 'VK_SND_ID',
                'VK_STAMP', 'VK_AMOUNT', 'VK_CURR',
                'VK_ACC', 'VK_NAME', 'VK_REF', 'VK_MSG']:
            v = data[field]
            vlen = len(v)
            mac_data += str(vlen).zfill(3) + v

        signed = ssl_sign(mac_data.encode('utf-8'), load_pem_private_key(settings['pkey']))

        data['VK_MAC'] = re.sub('\s+', '', signed.encode('base64'))

        log_payment(request, 'pangalink', 'pay_start', data)

        return render(request, 'payment/post_redirect.html', {'url': settings['url'], 'fields': data.items()})
コード例 #7
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):
        log_payment(request, 'dibs', 'pay_accept')

        # skip validation
        order_id = request.POST['orderid']
        print order_id
        order = Order.objects.get(pk=order_id)
        order.mark_paid()

        return HttpResponseRedirect(reverse('cratis.app.ecommerce.orders.views.confirm'))
コード例 #8
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):

        method = self.load_method(kwargs['method'])

        log_payment(request, 'voucher_' + kwargs['method'], 'pay_callback')

        order = Order.objects.get(pk=request.session['order_id'])
        order.comment = 'Voucher: %s phone: %s email: %s' % (request.POST['voucher_code'], request.POST['phone'], request.POST['email'])
        order.mark_confirmed()

        return HttpResponseRedirect(reverse('cratis.app.ecommerce.orders.views.confirm'))
コード例 #9
0
ファイル: views.py プロジェクト: ribozz/cratis
def validate_payment(request):

    settings = config_get_group('PAYMENT_DIBS')
    transaction_id = request.POST['transact']
    amount = request.POST['amount']
    currency = request.POST['currency']

    hash_data = '&transact=' + smart_str(transaction_id) + '&amount=' + smart_str(amount) + '&currency=' + smart_str(currency)
    md5_key1 = settings['MD51']
    md5_key2 = settings['MD52']

    calculated_authkey = md5(md5_key2 + md5(md5_key1 + hash_data))
    if calculated_authkey != request.POST['authkey']:
        log_payment(request, 'dibs', 'pay_accept_error',
            'Siganture not valid. Data: ' + hash_data + ' Key: ' + calculated_authkey)
        return False
    return True
コード例 #10
0
ファイル: views.py プロジェクト: ribozz/cratis
    def get(self, request, *args, **kwargs):
        log_payment(request, "paytrail", "pay_accept")

        method = self.load_method(kwargs["method"])
        settings = method.behavior().config

        # skip validation

        order_id = request.GET["ORDER_NUMBER"]
        timestamp = request.GET["TIMESTAMP"]
        paid = request.GET["PAID"]
        method = request.GET["METHOD"]
        authcode = request.GET["RETURN_AUTHCODE"]

        mac_data = "|".join((order_id, timestamp, paid, method, settings["secret"]))

        if md5(mac_data).upper() != authcode:
            return HttpResponse("Bad signature. Can not accpet payment.", None, 403)

        order = Order.objects.get(pk=order_id)
        order.mark_paid()

        return HttpResponseRedirect(reverse("cratis.app.ecommerce.orders.views.confirm"))
コード例 #11
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):

        method = self.load_method(kwargs['method'])
        settings = method.behavior().config

        log_payment(request, 'pangalink_' + kwargs['method'], 'pay_callback')

        if request.POST['VK_SERVICE'] != '1101':
            log_payment(request, 'pangalink', 'pay_cancel')

            return self.bad_payment(request)

        mac_data = ''
        for field in ['VK_SERVICE', 'VK_VERSION', 'VK_SND_ID',
                'VK_REC_ID', 'VK_STAMP', 'VK_T_NO', 'VK_AMOUNT', 'VK_CURR',
                'VK_REC_ACC', 'VK_REC_NAME', 'VK_SND_ACC', 'VK_SND_NAME',
                'VK_REF', 'VK_MSG', 'VK_T_DATE']:
            v = request.POST[field]
            vlen = len(v)
            mac_data += str(vlen).zfill(3) + v

        public_key = load_pem_cert_public_key(settings['pubkey'])

        if ssl_verify(mac_data.encode('utf-8'), request.POST['VK_MAC'].decode('base64'), public_key):

            ecuno = request.POST['VK_STAMP']

            order_id = int(ecuno) - 100000

            log_payment(request, 'pangalink', 'pay_success')

            order = Order.objects.get(pk=order_id)
            order.mark_paid()

            return HttpResponseRedirect(reverse('cratis.app.ecommerce.orders.views.confirm'))

        else:

            print request.POST['VK_MAC']
コード例 #12
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):

        method = self.load_method(kwargs['method'])
        settings = method.behavior().config

        log_payment(request, 'kardikeskus_' + kwargs['method'], 'pay_callback')

        oid = settings['id']

        ecuno = request.POST['ecuno']

        receipt_no = request.POST['receipt_no']
        eamount = request.POST['eamount']
        datetime = request.POST['datetime']
        mac = request.POST['mac'].decode('hex')
        respcode = request.POST['respcode']
        msgdata = request.POST['msgdata']
        actiontext = request.POST['actiontext']
        id = request.POST['id']
        ver = request.POST['ver']
        cur = request.POST['cur']

        #ver = '004'
        #eamount = str(order_total)
        #cur = 'EUR'
        #datetime = time.strftime("%Y%m%d%H%M%S")
        #feedbackurl = 'http://' + request.META['HTTP_HOST'] + reverse('kardikeskus_payment_callback',
        #                                                              kwargs={'method': method.slug})
        #delivery = 'S'
        #
        ## padding
        #feedbackurl = feedbackurl.ljust(128)
        #ecuno = ecuno.zfill(12)
        #eamount = eamount.zfill(12)
        #
        #
        #
        #

        data = ''
        data += ver.zfill(3)
        data += id.ljust(10, ' ')
        data += ecuno.zfill(12)
        data += receipt_no.zfill(6)
        data += eamount.zfill(12)
        data += cur.rjust(3, ' ')
        data += respcode
        data += datetime
        data += unicode(msgdata).ljust(40, ' ')
        data += unicode(actiontext).ljust(40, ' ')


        #sprintf("%03s", $ver) . sprintf("%-10s", "$id") .
#sprintf("%012s", $ecuno) . sprintf("%06s", $receipt_no) . sprintf("%012s",
#$eamount) . sprintf("%3s", $cur) . $respcode . $datetime . mb_sprintf("%-40s",
#$msgdata) . mb_sprintf("%-40s", $actiontext);
#

        #print data
        #print mac
        #data = ver+id+ecuno+receipt_no+eamount+cur+respcode+datetime+msgdata+actiontext

        order_id = int(ecuno) - 100000

        #if ssl_verify(data, mac, load_pem_public_key(settings['pubkey'])):
        #
        #    return HttpResponse('okkkk')
        #else:
        #    return HttpResponse('not ok')


        log_payment(request, 'kardikeskus', 'pay_callback')

        # skip validation
        #order_id = request.POST['orderid']
        order = Order.objects.get(pk=order_id)
        order.mark_paid()

        return HttpResponseRedirect(reverse('cratis.app.ecommerce.orders.views.confirm'))
コード例 #13
0
ファイル: views.py プロジェクト: ribozz/cratis
    def get(self, request, *args, **kwargs):
        method = self.load_method(kwargs["method"])
        settings = method.behavior().config

        order = Order.objects.get(pk=request.session["order_id"])

        detalisation = order.get_detalisation()

        order_total = detalisation["full_total"]

        data = OrderedDict()
        data["MERCHANT_ID"] = settings["id"]
        data["AMOUNT"] = str(order_total)
        data["ORDER_NUMBER"] = str(order.id)
        data["REFERENCE_NUMBER"] = ""
        data["ORDER_DESCRIPTION"] = ""
        data["CURRENCY"] = "EUR"
        data["RETURN_ADDRESS"] = (
            "http://" + request.META["HTTP_HOST"] + reverse("paytrail_payment_accept", kwargs={"method": method.slug})
        )
        data["CANCEL_ADDRESS"] = (
            "http://" + request.META["HTTP_HOST"] + reverse("paytrail_payment_cancel", kwargs={"method": method.slug})
        )
        data["PENDING_ADDRESS"] = ""
        data["NOTIFY_ADDRESS"] = (
            "http://" + request.META["HTTP_HOST"] + reverse("paytrail_payment_callback", kwargs={"method": method.slug})
        )

        data["TYPE"] = "S1"
        data["CULTURE"] = "en_US"
        data["PRESELECTED_METHOD"] = ""
        data["MODE"] = "1"
        data["VISIBLE_METHODS"] = ""
        data["GROUP"] = ""

        # 6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ|13466|99.90|123456||Testitilaus|EUR|http://www.esimerkki.fi/success|http://www.esimerkki.fi/cancel||http://www.esimerkki.fi/notify|S1|fi_FI|1||
        # 6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ|13466|99.90|123456||Testitilaus|EUR|http://www.esimerkki.fi/success|http://www.esimerkki.fi/cancel||http://www.esimerkki.fi/notify|S1|fi_FI||1||

        #
        # data['MERCHANT_ID'] = settings['id']
        # data['AMOUNT'] = '99.90'
        # data['ORDER_NUMBER'] = '123456'
        # data['REFERENCE_NUMBER'] = ''
        # data['ORDER_DESCRIPTION'] = 'Testitilaus'
        # data['CURRENCY'] = 'EUR'
        # data['RETURN_ADDRESS'] = 'http://www.esimerkki.fi/success'
        # data['CANCEL_ADDRESS'] = 'http://www.esimerkki.fi/cancel'
        # data['PENDING_ADDRESS'] = ''
        # data['NOTIFY_ADDRESS'] = 'http://www.esimerkki.fi/notify'
        #
        # data['TYPE'] = 'S1'
        # data['CULTURE'] = 'fi_FI'
        # data['PRESELECTED_METHOD'] = ''
        # data['MODE'] = '1'
        # data['VISIBLE_METHODS'] = ''
        # data['GROUP'] = ''

        mac_data = settings["secret"] + "|" + "|".join(data.values())

        mac = md5(mac_data).upper()

        data["AUTHCODE"] = mac

        log_payment(request, "paytrail", "pay_start", data)

        url = "https://payment.verkkomaksut.fi/"

        return render(request, "payment/post_redirect.html", {"url": url, "fields": data.items()})
コード例 #14
0
ファイル: views.py プロジェクト: ribozz/cratis
    def get(self, request, *args, **kwargs):

        method = self.load_method(kwargs['method'])
        settings = method.behavior().config

        order = Order.objects.get(pk=request.session['order_id'])
    #    order.mark_confirmed()

        detalisation = order.get_detalisation()

    #    for row in detalisation['rows']:
    #        ulink_order.items.append(UlinkOrderItem(smart_str(row['title']), '', str(row['price'])))


        # Preparing the data that we are sending to DIBS
        # Order total to be sent to DIBS must be an int specified in cents or
        # equivalent.
        order_total = int(detalisation['full_total'] * 100)
        order_id = order.id

        # Create md5 hash to make payment secure:
        md5_key = md5(settings['MD52'] +
                        md5(settings['MD51'] + 'merchant=%s&orderid=%s&currency=%s&amount=%s' % (settings['MERCHANT'], order_id, settings['CURRENCY'], order_total)))

        # Create the cancel and accept url, based on the request to get the host
        # and reverse to get the url.
        #        cancelurl = 'http://' + request.META['HTTP_HOST'] + reverse('satchmo_checkout-step1')
        #        accepturl = 'http://' + request.META['HTTP_HOST'] + reverse('DIBS_satchmo_checkout-success')
        #        callbackurl = 'http://' + request.META['HTTP_HOST'] + reverse('DIBS_satchmo_checkout-step4') + '?order_id=' + str(order.id)
        #
        cancelurl = 'http://' + settings['CALLBACK_DOMAIN'] + reverse('dibs_payment_cancel', kwargs={'method': method.slug})
        accepturl = 'http://' + settings['CALLBACK_DOMAIN'] + reverse('dibs_payment_accept', kwargs={'method': method.slug})
        callbackurl = 'http://' + settings['CALLBACK_DOMAIN'] + reverse('dibs_payment_callback', kwargs={'method': method.slug})

        data = [
            ('merchant', settings['MERCHANT']),
            ('amount', order_total),
            ('currency', settings['CURRENCY']),
            ('orderid', order_id),
            ('accepturl', accepturl),
            ('cancelurl', cancelurl),
            ('callbackurl', callbackurl),
            ('ip', get_client_ip(request)),
            #('uniqueoid', 'yes'),
            ('lang', get_language()),
            ('md5key', md5_key),
            ('calcfee', 'yes'),
            # Currently not implemented in the flex window.
            # ('delivery1', order.ship_addressee),
            # ('delivery2', order.ship_street1),
            # ('delivery3',  order.ship_postal_code + ' ' +  order.ship_city)
            ('capturenow', 'yes'),
        ]

        log_payment(request, 'dibs', 'pay_start', data)

    #    if settings['CAPTURE']:
    #    data.append(('capturenow', 'yes'))

        if not settings['LIVE']:
            data.append(('test', 'yes'))

        send_data = urllib.urlencode(data)

        return HttpResponseRedirect('https://payment.architrade.com/paymentweb/start.action?' + send_data)
コード例 #15
0
ファイル: views.py プロジェクト: ribozz/cratis
    def post(self, request, *args, **kwargs):
        log_payment(request, 'pangalink', 'pay_cancel')

        return HttpResponseRedirect(reverse('orders_checkout'))