Exemplo n.º 1
0
def payPalReturn(request, *args, **kwargs):
    """The PayPal method for payment verification."""
    initParam = {}
    token = request.GET.get('token')
    payerID = request.GET.get('PayerID')
    initParam['token'] = token
    initParam['payerid'] = payerID
    if token and payerID:
        p = driver.PayPal()
        EC_RETURNURL = '/'.join([common.getHttpHeader(request), 'payment/paypal_return'])
        EC_CANCELURL = '/'.join([common.getHttpHeader(request), 'payment/paypal_cancel'])
        res_dict = p.GetExpressCheckoutDetailsInfo(EC_RETURNURL, EC_CANCELURL, token)
        state = p._get_value_from_qs(res_dict, 'ACK')
        if state in ["Success", "SuccessWithWarning"]:
            #Show the list of service detail to user.
            executeMethod = kwargs.pop('executeMethod', None)
            if executeMethod:
                gateway = request.session.get('gateway', None)
                if gateway:
                    initParam['gateway'] = gateway
                    serviceDetail, serviceItems, discount_rate = executeMethod(request, initParam=initParam)
                    if serviceDetail and serviceItems:
                        initParam['serviceDetail'] = serviceDetail
                        initParam['serviceItems'] = serviceItems
                        initParam['discount_rate'] = discount_rate
                        return render_to_response('payment/paypal_return.html', initParam, context_instance=RequestContext(request))
                    else:
                        log.error(_('Token %(param1)s, PayerID: %(param2)s, Execute method %(param3)s failed.')
                                  % {'param1': token, 'param2': payerID, 'param3': executeMethod.__name__})
                else:
                    log.error(_('Token %(param1)s, PayerID: %(param2)s. Gateway no exists in request.session.')
                          % {'param1': token, 'param2': payerID})
            else:
                log.error(_('Token %(param1)s, PayerID: %(param2)s, ExecuteMethod does not exist.')
                          % {'param1': token, 'param2': payerID})
        else:
            error = p._get_value_from_qs(res_dict, 'L_SHORTMESSAGE0')
            log.error(_('Token %(param1)s, PayerID: %(param2)s, %(param3)s.')
                      % {'param1': token, 'param2': payerID, 'param3': error})
    else:
        log.error(_('Token or PayerID no exists.'))

    if request.session.get('gateway', None):
        del request.session['gateway']
    success_page = request.session.get('success_page', None)
    back_page = request.session.get('back_page', None)
    if success_page:
        del request.session['success_page']
    if back_page:
        del request.session['back_page']
        error_msg = driver.GENERIC_PAYPAL_ERROR
        page_msg = request.session['back_page_msg']
        return render_to_response('payment/paypal_cancel.html',
          {'error_msg': error_msg, 'back_page': back_page, 'back_page_msg': page_msg}, context_instance=RequestContext(request))
    else:
        error_msg = _('%(param1)s Please payment again.') % {'param1': driver.GENERIC_PAYPAL_ERROR}
        return render_to_response('payment/paypal_error.html',
                                  {"error_msg": error_msg}, context_instance=RequestContext(request))
Exemplo n.º 2
0
def tradeAction(request, *args, **kwargs):
    """Query trade status."""
    initParam = {}
    user_id = string.atoi(kwargs.get('user_id'))
    app_id = kwargs.get('app_id')
    action = kwargs.get('action')
    if 'sell' == action and user_id == request.user.id:
        transaction = get_object_or_404(models.Transaction,
                                        app_id=app_id,
                                        seller_id=user_id,
                                        is_active=True)
    elif 'buy' == action and user_id == request.user.id:
        transaction = get_object_or_404(models.Transaction,
                                        app_id=app_id,
                                        buyer_id=user_id)
        if transaction.status == 2:
            token = common.getToken(key='token_length', default=30)
            initParam['pay_url'] = '/'.join([
                common.getHttpHeader(request), 'transaction/buyer-pay',
                str(app_id),
                str(transaction.id), token
            ])
    else:
        raise Http404

    support_user = common.getSystemParam(key='support_user',
                                         default='appswalk')
    support_users = models.User.objects.filter(username=support_user)
    if support_users:
        initParam['support_user'] = support_users[0]
    else:
        log.error(_('Support user account does not exist.'))

    initParam['transaction'] = transaction
    if transaction.status == 2 or transaction.status == 3:
        if transaction.end_time > datetime.datetime.now():
            initParam['time_remaining'] = time.mktime(
                time.strptime(
                    transaction.end_time.strftime('%Y-%m-%d %H:%M:%S'),
                    '%Y-%m-%d %H:%M:%S'))
        else:
            initParam['time_remaining'] = "Deal Closed"
            initParam['paid_expiry'] = True
        if tradeOperation(request,
                          transaction=transaction,
                          initParam=initParam):
            return redirect(request.path)
    elif transaction.status == 4:
        initParam['time_remaining'] = common.dateBefore(transaction.end_time)

        initParam['seller_txn'] = creditViews.getAppraisement(
            user_id=transaction.seller.id, txn_id=transaction.id)
        initParam['buyer_txn'] = creditViews.getAppraisement(
            user_id=transaction.buyer.id, txn_id=transaction.id)
        if creditViews.createAppraisement(request, initParam=initParam):
            return redirect(request.path)

    return render_to_response('transaction/trade_action.html',
                              initParam,
                              context_instance=RequestContext(request))
Exemplo n.º 3
0
def shareToWeiBo(*args, **kwargs):
    """Share App info to WeiBo"""
    initParam = kwargs.get('initParam')
    request = initParam.get('request')
    app = initParam.get('app')
    if app and request:
        try:
            url = 'https://upload.api.weibo.com/2/statuses/upload.json'
            app_url = '/'.join([common.getHttpHeader(request), 'query/app-detail', str(app.id)])
            status = ''.join(['App "', app.app_name.encode('utf-8'), '" for sale from AppsWalk. ', app_url])
            data = {
                'source': settings.WEIBO_CLIENT_KEY,
                'access_token': settings.WEIBO_ACCESS_TOKEN,
                'status': status
            }
            path = '/'.join([settings.MEDIA_ROOT, app.appinfo.icon])
            files = {'pic': open(path, mode='rb')}

            result = requests.post(url, data=data, files=files)
            data = json.loads(result.text)

            if data.get('error_code'):
                log.error(_('Share App %(param1)s failed to WeiBo, error:%(param2)s')
                          % {'param1': app.app_name, 'param2': data})
            else:
                log.info(_('Share App %(param1)s success to WeiBo.') % {'param1': app.app_name})
        except Exception as e:
            log.error(_('Share App %(param1)s failed to WeiBo, error:%(param2)s')
                      % {'param1': app.app_name, 'param2': str(e)})
Exemplo n.º 4
0
def payment(request, *args, **kwargs):
    """Begin payment operation."""
    initParam = kwargs.get('initParam')
    executeMethod = initParam.pop('executeMethod', None)
    amount = initParam.pop('amount')
    currency = initParam.pop('currency')
    id = initParam.get('serviceDetail_id')
    if amount and currency and id:
        p = driver.PayPal()
        EC_RETURNURL = '/'.join([common.getHttpHeader(request), 'payment/paypal_return'])
        EC_CANCELURL = '/'.join([common.getHttpHeader(request), 'payment/paypal_cancel'])
        result = p.SetExpressCheckout(amount, currency, EC_RETURNURL, EC_CANCELURL, initParam=initParam)
        if result:
            #The needed operation for verification later when payment return token..
            if executeMethod:
                initParam['token'] = p.token
                if executeMethod(request, initParam=initParam):
                    if request.session.get('gateway', None):
                        del request.session['gateway']
                    request.session['gateway'] = initParam.get('gateway')
                    redirect_url = p.paypal_url()
                    return redirect(redirect_url)
                else:
                    log.error(_('ServiceDetail with id %(param1)s. Execute method %(param2)s failed.')
                              % {'param1': id, 'param2': executeMethod.__name__})
            else:
                log.error(_('ServiceDetail with id %(param1)s. ExecuteMethod does not exist.') % {'param1': id})
        else:
            log.error(_('ServiceDetail with id %(param1)s. %(param2)s') % {'param1': id, 'param2': str(p.apierror)})
    else:
        log.error(_('payment. Amount or Currency or ServiceDetail ID no exists.'))

    success_page = request.session.get('success_page', None)
    back_page = request.session.get('back_page', None)
    if success_page:
        del request.session['success_page']
    if back_page:
        del request.session['back_page']
        error_msg = driver.GENERIC_PAYPAL_ERROR
        page_msg = request.session['back_page_msg']
        return render_to_response('payment/paypal_cancel.html',
          {'error_msg': error_msg, 'back_page': back_page, 'back_page_msg': page_msg}, context_instance=RequestContext(request))
    else:
        error_msg = _('%(param1)s Please payment again.') % {'param1': driver.GENERIC_PAYPAL_ERROR}
        return render_to_response('payment/paypal_error.html',
                                  {"error_msg": error_msg}, context_instance=RequestContext(request))
Exemplo n.º 5
0
def shareSocial(request, *args, **kwargs):
    initParam = kwargs.get('initParam')
    app = kwargs.get('app')
    appInfo = app.appinfo
    app_url = '/'.join([common.getHttpHeader(request), 'query/app-detail', str(app.id)])
    twitter = 'http://twitter.com/intent/tweet?'
    text = ''.join(['App (', app.app_name.encode('utf-8'), ') for sale from AppsWalk '])
    # initParam['twitter_url'] = twitter + urllib.urlencode({'status': status})
    initParam['twitter_url'] = twitter + urllib.urlencode({'url': app_url, 'text': text})
    initParam['http_header'] = common.getHttpHeader(request)

    facebook = 'http://www.facebook.com/sharer.php?'
    initParam['facebook_url'] = facebook + urllib.urlencode({'u': app_url, 't': text})

    weibo = 'http://service.weibo.com/share/share.php?'
    title = '- '.join([text, app_url])
    pic = ''.join([common.getHttpHeader(request), settings.MEDIA_URL, appInfo.icon])
    initParam['weibo_url'] = weibo + urllib.urlencode({'appkey': settings.WEIBO_CLIENT_KEY,
                                                       'title': title, 'pic': pic, 'url': app_url})
    initParam['title'] = text
Exemplo n.º 6
0
def buyerPay(request, *args, **kwargs):
    """Buyer pay, after seller begin to trade."""
    initParam = {}
    app_id = kwargs.get('app_id')
    txn_id = kwargs.get('txn_id')
    #TODO:Can use or verify it later.
    token_id = kwargs.get('token')
    transaction = get_object_or_404(models.Transaction,
                                    pk=txn_id,
                                    app_id=app_id,
                                    buyer_id=request.user.id,
                                    status=2,
                                    is_active=True)
    app = transaction.app

    #Buyser pay for app.
    txn_fee_pct = string.atof(
        common.getSystemParam(key='txn_fee_pct', default=0.01))
    initParam['currency'] = app.currency.currency
    initParam['appsWalk_account'] = settings.APPSWALK_ACCOUNT
    initParam['gateway'] = 'paypal'
    gateways = paymentModels.Gateway.objects.filter(
        name__iexact=initParam.get('gateway'))
    acceptGateways = paymentModels.AcceptGateway.objects.filter(
        user_id=transaction.seller.id, type_id=gateways[0].id, is_active=True)
    initParam['seller_account'] = acceptGateways[0].value
    initParam['appsWalk_amount'] = transaction.price * txn_fee_pct
    initParam['seller_amount'] = transaction.price * (1 - txn_fee_pct)
    initParam['txn_id'] = transaction.id
    #The needed operation method in pay.
    initParam['executeMethod'] = updateTransaction
    #The back page, when pay has error.
    if request.session.get('back_page', None):
        del request.session['back_page']
    if request.session.get('back_page_msg', None):
        del request.session['back_page_msg']
    url = '/'.join([
        common.getHttpHeader(request), 'transaction/trade-action/buy',
        str(app.id),
        str(request.user.id)
    ])
    request.session['back_page'] = url
    request.session['back_page_msg'] = 'Trade Action'
    #The success return page, when pay finish.
    if request.session.get('success_page', None):
        del request.session['success_page']
    if request.session.get('success_page_msg', None):
        del request.session['success_page_msg']
    request.session['success_page'] = url
    request.session['success_page_msg'] = 'Trade Action'
    return paymentViews.pay(request, initParam=initParam)
Exemplo n.º 7
0
def pay(request, *args, **kwargs):
    initParam = kwargs.get('initParam')
    executeMethod = initParam.pop('executeMethod', None)
    currency = initParam.get('currency')
    id = initParam.get('txn_id')
    if currency and id:
        p = driver.PayPal()
        AP_RETURNURL = '/'.join(['https://', request.META.get('HTTP_HOST'), 'payment/paypal_ap_return'])
        AP_CANCELURL = '/'.join([common.getHttpHeader(request), 'payment/paypal_cancel'])
        result = p.setAPCall(currency, AP_RETURNURL, AP_CANCELURL, 'PAY', initParam=initParam)
        if result['responseEnvelope.ack'][0] == 'Success':
            pay_key = result['payKey'][0]
            #The needed operation for verification later when pay return pay_key.
            if executeMethod:
                initParam['pay_key'] = pay_key
                if executeMethod(initParam=initParam):
                    #payReturn will do operation by two session values.
                    if request.session.get('pay_key', None):
                        del request.session['pay_key']
                    request.session['pay_key'] = pay_key
                    if request.session.get('gateway', None):
                        del request.session['gateway']
                    request.session['gateway'] = 'paypal'
                    #redirect PayPal pay website.
                    redirect_url = p.paypal_ap_url(pay_key)
                    return redirect(redirect_url)
                else:
                    log.error(_('Transaction with id %(param1)s. Execute method %(param2)s failed.')
                              % {'param1': id, 'param2': executeMethod.__name__})
            else:
                log.error(_('Transaction with id %(param1)s. ExecuteMethod does not exist.') % {'param1': id})
        else:
            log.error(_('Transaction with id %(param1)s. %(param2)s') % {'param1': id, 'param2': str(result['error(0).message'][0])})
    else:
        log.error(_('Pay. Currency or Transaction ID no exists.'))

    success_page = request.session.get('success_page', None)
    back_page = request.session.get('back_page', None)
    if success_page:
        del request.session['success_page']
    if back_page:
        del request.session['back_page']
        error_msg = driver.GENERIC_PAYPAL_ERROR
        page_msg = request.session['back_page_msg']
        return render_to_response('payment/paypal_cancel.html',
          {'error_msg': error_msg, 'back_page': back_page, 'back_page_msg': page_msg}, context_instance=RequestContext(request))
    else:
        error_msg = _('%(param1)s Please transaction again.') % {'param1': driver.GENERIC_PAYPAL_ERROR}
        return render_to_response('payment/paypal_error.html',
                                  {"error_msg": error_msg}, context_instance=RequestContext(request))
Exemplo n.º 8
0
def sendRegisterActiveEmail(request, *args, **kwargs):
    """After user register, send the account active link to his email."""
    user = kwargs.get('user')
    templates = models.NotificationTemplate.objects.filter(name='register_active')
    if user and templates:
        massEmailThread = email.MassEmailThread()
        link_header = common.getHttpHeader(request)
        token = common.getToken(key='token_length', default=30)
        active_link = '/'.join([link_header, 'usersetting', user.username, 'emails', str(user.id),
                                'register-confirm-verification', token])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}', user.username).replace('{param2}', active_link)
        massEmailThread.addEmailData(subject=subject, message=message, recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 9
0
def sendResetPasswordEmail(request, *args, **kwargs):
    """Send the email of reset password."""
    user = kwargs.get('user')
    type = kwargs.get('type')
    templates = models.NotificationTemplate.objects.filter(name='reset_password_email')
    if user and type and templates:
        massEmailThread = email.MassEmailThread()
        header = common.getHttpHeader(request)
        token = common.getToken(key='token_length', default=30)
        url = '/'.join([header, 'usersetting/reset-password', str(type), str(user.id), user.username, token])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}', user.username).replace('{param2}', url)
        massEmailThread.addEmailData(subject=subject, message=message, recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 10
0
def sendSecurityVerificationEmail(request, *args, **kwargs):
    """After user update email in security setting, send the email verification link to the new email."""
    user = kwargs.get('user')
    templates = models.NotificationTemplate.objects.filter(name='email_security_verification')
    if user and templates:
        massEmailThread = email.MassEmailThread()
        link_header = common.getHttpHeader(request)
        token = common.getToken(key='token_length', default=30)
        active_link = '/'.join([link_header, 'usersetting', user.username, 'emails', str(user.id),
                                'email-security-verification', token])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}', user.username).replace('{param2}', active_link)
        massEmailThread.addEmailData(subject=subject, message=message, recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 11
0
def tradeNowInformBuyerPayEmail(request, *args, **kwargs):
    """After seller click button 'Trade Now', send email to buyer inform that he won the bidding, and can pay now."""
    app = kwargs.get('app')
    user = kwargs.get('user')
    templates = models.NotificationTemplate.objects.filter(name='seller_trade_now')
    if app and user and templates:
        massEmailThread = email.MassEmailThread()
        link_header = common.getHttpHeader(request)
        app_detail_url = '/'.join([link_header, 'query/app-detail', str(app.id)])
        pay_url = '/'.join([link_header, 'dashboard/my-bidding'])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}', user.username).replace('{param2}', app.app_name).replace('{param3}', pay_url)
        massEmailThread.addEmailData(subject=subject, message=message, recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 12
0
def shareToWeiBo(*args, **kwargs):
    """Share App info to WeiBo"""
    initParam = kwargs.get('initParam')
    request = initParam.get('request')
    app = initParam.get('app')
    if app and request:
        try:
            url = 'https://upload.api.weibo.com/2/statuses/upload.json'
            app_url = '/'.join([
                common.getHttpHeader(request), 'query/app-detail',
                str(app.id)
            ])
            status = ''.join([
                'App "',
                app.app_name.encode('utf-8'), '" for sale from AppsWalk. ',
                app_url
            ])
            data = {
                'source': settings.WEIBO_CLIENT_KEY,
                'access_token': settings.WEIBO_ACCESS_TOKEN,
                'status': status
            }
            path = '/'.join([settings.MEDIA_ROOT, app.appinfo.icon])
            files = {'pic': open(path, mode='rb')}

            result = requests.post(url, data=data, files=files)
            data = json.loads(result.text)

            if data.get('error_code'):
                log.error(
                    _('Share App %(param1)s failed to WeiBo, error:%(param2)s')
                    % {
                        'param1': app.app_name,
                        'param2': data
                    })
            else:
                log.info(
                    _('Share App %(param1)s success to WeiBo.') %
                    {'param1': app.app_name})
        except Exception as e:
            log.error(
                _('Share App %(param1)s failed to WeiBo, error:%(param2)s') % {
                    'param1': app.app_name,
                    'param2': str(e)
                })
Exemplo n.º 13
0
def tradeAction(request, *args, **kwargs):
    """Query trade status."""
    initParam = {}
    user_id = string.atoi(kwargs.get('user_id'))
    app_id = kwargs.get('app_id')
    action = kwargs.get('action')
    if 'sell' == action and user_id == request.user.id:
        transaction = get_object_or_404(models.Transaction, app_id=app_id, seller_id=user_id, is_active=True)
    elif 'buy' == action and user_id == request.user.id:
        transaction = get_object_or_404(models.Transaction, app_id=app_id, buyer_id=user_id)
        if transaction.status == 2:
            token = common.getToken(key='token_length', default=30)
            initParam['pay_url'] = '/'.join([common.getHttpHeader(request), 'transaction/buyer-pay', str(app_id), str(transaction.id), token])
    else:
        raise Http404

    support_user = common.getSystemParam(key='support_user', default='appswalk')
    support_users = models.User.objects.filter(username=support_user)
    if support_users:
        initParam['support_user'] = support_users[0]
    else:
        log.error(_('Support user account does not exist.'))

    initParam['transaction'] = transaction
    if transaction.status == 2 or transaction.status == 3:
        if transaction.end_time > datetime.datetime.now():
            initParam['time_remaining'] = time.mktime(time.strptime(transaction.end_time.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S'))
        else:
            initParam['time_remaining'] = "Deal Closed"
            initParam['paid_expiry'] = True
        if tradeOperation(request, transaction=transaction, initParam=initParam):
            return redirect(request.path)
    elif transaction.status == 4:
        initParam['time_remaining'] = common.dateBefore(transaction.end_time)

        initParam['seller_txn'] = creditViews.getAppraisement(user_id=transaction.seller.id, txn_id=transaction.id)
        initParam['buyer_txn'] = creditViews.getAppraisement(user_id=transaction.buyer.id, txn_id=transaction.id)
        if creditViews.createAppraisement(request, initParam=initParam):
            return redirect(request.path)

    return render_to_response('transaction/trade_action.html', initParam, context_instance=RequestContext(request))
Exemplo n.º 14
0
def buyerPay(request, *args, **kwargs):
    """Buyer pay, after seller begin to trade."""
    initParam = {}
    app_id = kwargs.get('app_id')
    txn_id = kwargs.get('txn_id')
    #TODO:Can use or verify it later.
    token_id = kwargs.get('token')
    transaction = get_object_or_404(models.Transaction, pk=txn_id, app_id=app_id, buyer_id=request.user.id, status=2, is_active=True)
    app = transaction.app

    #Buyser pay for app.
    txn_fee_pct = string.atof(common.getSystemParam(key='txn_fee_pct', default=0.01))
    initParam['currency'] = app.currency.currency
    initParam['appsWalk_account'] = settings.APPSWALK_ACCOUNT
    initParam['gateway'] = 'paypal'
    gateways = paymentModels.Gateway.objects.filter(name__iexact=initParam.get('gateway'))
    acceptGateways = paymentModels.AcceptGateway.objects.filter(user_id=transaction.seller.id, type_id=gateways[0].id, is_active=True)
    initParam['seller_account'] = acceptGateways[0].value
    initParam['appsWalk_amount'] = transaction.price * txn_fee_pct
    initParam['seller_amount'] = transaction.price * (1 - txn_fee_pct)
    initParam['txn_id'] = transaction.id
    #The needed operation method in pay.
    initParam['executeMethod'] = updateTransaction
    #The back page, when pay has error.
    if request.session.get('back_page', None):
        del request.session['back_page']
    if request.session.get('back_page_msg', None):
        del request.session['back_page_msg']
    url = '/'.join([common.getHttpHeader(request), 'transaction/trade-action/buy', str(app.id), str(request.user.id)])
    request.session['back_page'] = url
    request.session['back_page_msg'] = 'Trade Action'
    #The success return page, when pay finish.
    if request.session.get('success_page', None):
        del request.session['success_page']
    if request.session.get('success_page_msg', None):
        del request.session['success_page_msg']
    request.session['success_page'] = url
    request.session['success_page_msg'] = 'Trade Action'
    return paymentViews.pay(request, initParam=initParam)
Exemplo n.º 15
0
def sendSecurityVerificationEmail(request, *args, **kwargs):
    """After user update email in security setting, send the email verification link to the new email."""
    user = kwargs.get('user')
    templates = models.NotificationTemplate.objects.filter(
        name='email_security_verification')
    if user and templates:
        massEmailThread = email.MassEmailThread()
        link_header = common.getHttpHeader(request)
        token = common.getToken(key='token_length', default=30)
        active_link = '/'.join([
            link_header, 'usersetting', user.username, 'emails',
            str(user.id), 'email-security-verification', token
        ])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}',
                                                user.username).replace(
                                                    '{param2}', active_link)
        massEmailThread.addEmailData(subject=subject,
                                     message=message,
                                     recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 16
0
def sendRegisterActiveEmail(request, *args, **kwargs):
    """After user register, send the account active link to his email."""
    user = kwargs.get('user')
    templates = models.NotificationTemplate.objects.filter(
        name='register_active')
    if user and templates:
        massEmailThread = email.MassEmailThread()
        link_header = common.getHttpHeader(request)
        token = common.getToken(key='token_length', default=30)
        active_link = '/'.join([
            link_header, 'usersetting', user.username, 'emails',
            str(user.id), 'register-confirm-verification', token
        ])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}',
                                                user.username).replace(
                                                    '{param2}', active_link)
        massEmailThread.addEmailData(subject=subject,
                                     message=message,
                                     recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 17
0
def tradeNowInformBuyerPayEmail(request, *args, **kwargs):
    """After seller click button 'Trade Now', send email to buyer inform that he won the bidding, and can pay now."""
    app = kwargs.get('app')
    user = kwargs.get('user')
    templates = models.NotificationTemplate.objects.filter(
        name='seller_trade_now')
    if app and user and templates:
        massEmailThread = email.MassEmailThread()
        link_header = common.getHttpHeader(request)
        app_detail_url = '/'.join(
            [link_header, 'query/app-detail',
             str(app.id)])
        pay_url = '/'.join([link_header, 'dashboard/my-bidding'])
        subject = templates[0].subject
        message = templates[0].template.replace(
            '{param1}',
            user.username).replace('{param2}',
                                   app.app_name).replace('{param3}', pay_url)
        massEmailThread.addEmailData(subject=subject,
                                     message=message,
                                     recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 18
0
def shareToTwitter(*args, **kwargs):
    """Share App info to Twitter"""
    initParam = kwargs.get('initParam')
    request = initParam.get('request')
    app = initParam.get('app')
    if app and request:
        try:
            # url = 'https://api.twitter.com/1.1/statuses/update_with_media.json'
            app_url = '/'.join([
                common.getHttpHeader(request), 'query/app-detail',
                str(app.id)
            ])
            status = ''.join([
                'App "',
                app.app_name.encode('utf-8'), '" for sale from AppsWalk. ',
                app_url
            ])
            pic = open('/'.join([settings.MEDIA_ROOT, app.appinfo.icon]),
                       mode='rb')
            twitter = Twython(
                app_key=settings.TWITTER_CONSUMER_KEY,
                app_secret=settings.TWITTER_CONSUMER_SECRET,
                oauth_token=settings.TWITTER_OAUTH_TOKEN,
                oauth_token_secret=settings.TWITTER_OAUTH_TOKEN_SECRET)

            twitter.update_status_with_media(status=status, media=pic)

            log.info(
                _('Share App %(param1)s success to Twitter.') %
                {'param1': app.app_name})
        except Exception as e:
            log.error(
                _('Share App %(param1)s failed to Twitter, error:%(param2)s') %
                {
                    'param1': app.app_name,
                    'param2': str(e)
                })
Exemplo n.º 19
0
def sendResetPasswordEmail(request, *args, **kwargs):
    """Send the email of reset password."""
    user = kwargs.get('user')
    type = kwargs.get('type')
    templates = models.NotificationTemplate.objects.filter(
        name='reset_password_email')
    if user and type and templates:
        massEmailThread = email.MassEmailThread()
        header = common.getHttpHeader(request)
        token = common.getToken(key='token_length', default=30)
        url = '/'.join([
            header, 'usersetting/reset-password',
            str(type),
            str(user.id), user.username, token
        ])
        subject = templates[0].subject
        message = templates[0].template.replace('{param1}',
                                                user.username).replace(
                                                    '{param2}', url)
        massEmailThread.addEmailData(subject=subject,
                                     message=message,
                                     recipient_list=[user.email])
        massEmailThread.start()
    return None
Exemplo n.º 20
0
def shareToTwitter(*args, **kwargs):
    """Share App info to Twitter"""
    initParam = kwargs.get('initParam')
    request = initParam.get('request')
    app = initParam.get('app')
    if app and request:
        try:
            # url = 'https://api.twitter.com/1.1/statuses/update_with_media.json'
            app_url = '/'.join([common.getHttpHeader(request), 'query/app-detail', str(app.id)])
            status = ''.join(['App "', app.app_name.encode('utf-8'), '" for sale from AppsWalk. ', app_url])
            pic = open('/'.join([settings.MEDIA_ROOT, app.appinfo.icon]), mode='rb')
            twitter = Twython(
                app_key=settings.TWITTER_CONSUMER_KEY,
                app_secret=settings.TWITTER_CONSUMER_SECRET,
                oauth_token=settings.TWITTER_OAUTH_TOKEN,
                oauth_token_secret=settings.TWITTER_OAUTH_TOKEN_SECRET
            )

            twitter.update_status_with_media(status=status, media=pic)

            log.info(_('Share App %(param1)s success to Twitter.') % {'param1': app.app_name})
        except Exception as e:
            log.error(_('Share App %(param1)s failed to Twitter, error:%(param2)s')
                      % {'param1': app.app_name, 'param2': str(e)})
Exemplo n.º 21
0
def onePriceBuy(request, *args, **kwargs):
    """
        Buyer pay by clicking button 'Buy It Now with 10 USD' in app detail page.
        Note: url include app_id, and publisher_id, because of preventing user to cheat.
    """
    initParam = {}
    app_id = kwargs.get('app_id')
    publisher_id = kwargs.get('publisher_id')
    app = get_object_or_404(appModels.App,
                            pk=app_id,
                            publisher_id=publisher_id,
                            status=2)

    transactions = models.Transaction.objects.filter(app_id=app.id,
                                                     seller_id=publisher_id,
                                                     buyer_id=request.user.id,
                                                     status=1)
    if transactions:
        transaction = transactions[0]
    else:
        transaction = models.Transaction()
        transaction.app = app
        transaction.seller = app.publisher
        transaction.status = 1
        transaction.is_active = False
        transaction.buyer = request.user
        transaction.price = app.one_price
        transaction.buy_type = 1
        paid_expiry_date = string.atoi(
            common.getSystemParam(key='paid_expiry_date', default=7))
        transaction.end_time = datetime.datetime.now() + datetime.timedelta(
            days=paid_expiry_date)
        transaction.save()

        #Log transaction
        transactionsLog = models.TransactionLog()
        transactionsLog.transaction = transaction
        transactionsLog.app = transaction.app
        transactionsLog.status = transaction.status
        transactionsLog.buyer = transaction.buyer
        transactionsLog.price = transaction.price
        transactionsLog.buy_type = transaction.buy_type
        transactionsLog.save()

    initParam['transaction'] = transaction
    initParam['page_source'] = 'one-price'
    if transaction.end_time > datetime.datetime.now():
        initParam['time_remaining'] = time.mktime(
            time.strptime(transaction.end_time.strftime('%Y-%m-%d %H:%M:%S'),
                          '%Y-%m-%d %H:%M:%S'))
    else:
        initParam['time_remaining'] = "Deal Closed"
        initParam['paid_expiry'] = True

    if request.method == 'POST':
        #Buyer credit point judge for bidding.
        min_cp = common.getSystemParam(key='min_cp_for_bid', default=50)
        cp = creditViews.getUserCreditPoint(user=request.user)
        if cp == -1 or cp < string.atoi(min_cp):
            initParam['error_msg'] = _(
                'You are not allowed to buy, because your credit points is too low.'
            )
        else:
            #Buyser pay for app.
            txn_fee_pct = string.atof(
                common.getSystemParam(key='txn_fee_pct', default=0.01))
            initParam['currency'] = app.currency.currency
            initParam['appsWalk_account'] = settings.APPSWALK_ACCOUNT
            initParam['gateway'] = 'paypal'
            gateways = paymentModels.Gateway.objects.filter(
                name__iexact=initParam.get('gateway'))
            acceptGateways = paymentModels.AcceptGateway.objects.filter(
                user_id=transaction.seller.id,
                type_id=gateways[0].id,
                is_active=True)
            initParam['seller_account'] = acceptGateways[0].value
            initParam['appsWalk_amount'] = app.one_price * txn_fee_pct
            initParam['seller_amount'] = app.one_price * (1 - txn_fee_pct)
            initParam['txn_id'] = transaction.id
            #The needed operation method in pay.
            initParam['executeMethod'] = updateTransaction
            #The back page, when pay has error.
            if request.session.get('back_page', None):
                del request.session['back_page']
            if request.session.get('back_page_msg', None):
                del request.session['back_page_msg']
            request.session['back_page'] = '/'.join([
                common.getHttpHeader(request), 'query/app-detail',
                str(app.id)
            ])
            request.session['back_page_msg'] = 'App Detail'
            #The success return page, when pay finish.
            if request.session.get('success_page', None):
                del request.session['success_page']
            if request.session.get('success_page_msg', None):
                del request.session['success_page_msg']
            request.session['success_page'] = '/'.join([
                common.getHttpHeader(request), 'transaction/trade-action/buy',
                str(app.id),
                str(request.user.id)
            ])
            request.session['success_page_msg'] = 'Trade Action'
            return paymentViews.pay(request, initParam=initParam)
    return render_to_response('transaction/one_price_buy.html',
                              initParam,
                              context_instance=RequestContext(request))
Exemplo n.º 22
0
        initParam["error_msg"] = _("Link %(param)s is not correct.") % {"param": ""}
        log.error(_("The app store link %(param)s is not correct.") % {"param": match.group(1)})
        log.error(e.message)
        return None
    appInfo.icon = "/".join([str(model.publisher.id), str(model.id), "Icon.jpg"])

    # Make the image of two dimension code for app store link
    if appInfo.app_store_link_code is None:
        app_store_link_code = "/".join([str(model.publisher.id), str(model.id), "app_store_link_code.jpg"])
        path = "/".join([settings.MEDIA_ROOT, app_store_link_code])
        common.makeTwoDimensionCode(data=model.app_store_link, path=path)
        appInfo.app_store_link_code = app_store_link_code

    # Make the image of two dimension code for app detail link
    if appInfo.app_detail_code is None:
        data = "/".join([common.getHttpHeader(request), "query/app-detail", str(model.id)])
        app_detail_code = "/".join([str(model.publisher.id), str(model.id), "app_detail_code.jpg"])
        path = "/".join([settings.MEDIA_ROOT, app_detail_code])
        common.makeTwoDimensionCode(data=data, path=path)
        appInfo.app_detail_code = app_detail_code

    appInfo.save()

    # Save monetize data
    monetize_id = common.getSystemParam(key="monetize", default=4)
    model.monetize.add(get_object_or_404(appModels.Monetize, pk=monetize_id))

    # Save category, subcategory data
    model.category.clear()
    model.subcategory.clear()
    genres = result.get("genres", None)
Exemplo n.º 23
0
         str(model.id), 'Icon.jpg'])

    #Make the image of two dimension code for app store link
    if appInfo.app_store_link_code is None:
        app_store_link_code = '/'.join([
            str(model.publisher.id),
            str(model.id), 'app_store_link_code.jpg'
        ])
        path = '/'.join([settings.MEDIA_ROOT, app_store_link_code])
        common.makeTwoDimensionCode(data=model.app_store_link, path=path)
        appInfo.app_store_link_code = app_store_link_code

    #Make the image of two dimension code for app detail link
    if appInfo.app_detail_code is None:
        data = '/'.join(
            [common.getHttpHeader(request), 'query/app-detail',
             str(model.id)])
        app_detail_code = '/'.join(
            [str(model.publisher.id),
             str(model.id), 'app_detail_code.jpg'])
        path = '/'.join([settings.MEDIA_ROOT, app_detail_code])
        common.makeTwoDimensionCode(data=data, path=path)
        appInfo.app_detail_code = app_detail_code

    appInfo.save()

    #Save monetize data
    monetize_id = common.getSystemParam(key='monetize', default=4)
    model.monetize.add(get_object_or_404(appModels.Monetize, pk=monetize_id))

    #Save category, subcategory data
Exemplo n.º 24
0
def checkout(request, *args, **kwargs):
    """checkout for service detail payment."""
    initParam = {'begin_date': None}
    app_id = kwargs.get('app_id')
    service_id = kwargs.get('service_id')
    service_sn = kwargs.get('service_sn')
    initParam['select'] = request.POST.get('select')
    user = get_object_or_404(User,
                             pk=request.user.id,
                             username=request.user.username)
    app = get_object_or_404(appModels.App, pk=app_id, publisher_id=user.id)
    serviceDetail = get_object_or_404(models.ServiceDetail,
                                      pk=service_id,
                                      app_id=app_id,
                                      sn=service_sn)

    #Init data
    service_expiry_date = string.atoi(
        common.getSystemParam(key='service_expiry_date', default=31))
    initParam['service_expiry_date'] = service_expiry_date
    acceptGateways = user.acceptgateway_set.filter(is_active=True,
                                                   is_default=True)
    serviceDetails = models.ServiceDetail.objects.filter(
        app_id=app_id,
        is_payed=True,
        end_date__gte=datetime.datetime.now().strftime('%Y-%m-%d')).order_by(
            '-pk')
    if serviceDetails:
        initParam['begin_date'] = serviceDetails[0].end_date
        serviceDetail.start_date = serviceDetails[0].end_date
    else:
        serviceDetail.start_date = datetime.datetime.now()
        serviceDetail.end_date = datetime.datetime.now() + datetime.timedelta(
            days=service_expiry_date)
    initParam['currency'] = app.currency.currency
    if acceptGateways:
        initParam['acceptGateway'] = acceptGateways[0]
    initParam['discount_rate'] = common.getSystemParam(key='discount_rate',
                                                       default=1)

    if request.method == "POST":
        form = forms.ServiceDetailForm(request.POST)
        if form.is_valid():
            days = (form.cleaned_data['end_date'] -
                    form.cleaned_data['start_date']).days
            if serviceDetail.is_payed:
                initParam['order_error'] = _('The payment is paid.')
            elif len(acceptGateways) == 0:
                initParam['order_error'] = _(
                    'The gateway is required.Please choice gateway.')
            elif (initParam['begin_date'] and form.cleaned_data['start_date'] <
                  initParam['begin_date']) or days != service_expiry_date:
                initParam['order_error'] = _('Service date is not correct.')
            else:
                form.save(commit=False)
                serviceDetail.start_date = form.cleaned_data['start_date']
                serviceDetail.end_date = form.cleaned_data['end_date']
                serviceDetail.save()

                if serviceDetail.actual_amount <= 0:
                    if checkOutSuccess(request, serviceDetail=serviceDetail):
                        initParam['msg'] = _('The payment is successful.')
                        initParam['success_page'] = '/'.join([
                            common.getHttpHeader(request), 'query/app-detail',
                            str(app.id)
                        ])
                        initParam['success_page_msg'] = 'App Detail'
                        log.info(
                            _('Seller %(param1)s has paid service fee - %(param2)s with service detail id %(param3)s.'
                              ) % {
                                  'param1': request.user.username,
                                  'param2': serviceDetail.actual_amount,
                                  'param3': serviceDetail.id
                              })
                        return render_to_response(
                            'payment/paypal_success.html',
                            initParam,
                            context_instance=RequestContext(request))
                    else:
                        initParam['order_error'] = _(
                            'The payment is failed. Please payment again.')
                else:
                    #Invoke payment method - payment for service detail
                    initParam['serviceDetail_id'] = serviceDetail.id
                    initParam['amount'] = serviceDetail.actual_amount
                    initParam['DESC'] = 'Service fee on AppsWalk.'
                    initParam[
                        'PAYMENTREQUEST_0_DESC'] = 'Service fee for App %(param1)s of user %(param2)s on AppsWalk.' % {
                            'param1': app.app_name,
                            'param2': user.username
                        }
                    initParam['ITEMAMT'] = serviceDetail.actual_amount
                    initParam['L_NAME0'] = 'Service fee on AppsWalk'
                    initParam['L_DESC0'] = 'Service fee for App %(param1)s' % {
                        'param1': app.app_name
                    }
                    initParam['L_AMT0'] = serviceDetail.actual_amount
                    initParam['L_QTY0'] = 1
                    initParam['gateway'] = 'paypal'
                    #The needed operation method in payment.
                    initParam['executeMethod'] = kwargs.get('executeMethod')
                    #The back page, when payment has error.
                    if request.session.get('back_page', None):
                        del request.session['back_page']
                    if request.session.get('back_page_msg', None):
                        del request.session['back_page_msg']
                    request.session['back_page'] = '/'.join([
                        common.getHttpHeader(request), 'seller/payment',
                        str(app.id)
                    ])
                    request.session['back_page_msg'] = 'Payment'
                    #The success return page, when payment finish.
                    if request.session.get('success_page', None):
                        del request.session['success_page']
                    if request.session.get('success_page_msg', None):
                        del request.session['success_page_msg']
                    request.session['success_page'] = '/'.join([
                        common.getHttpHeader(request), 'query/app-detail',
                        str(app.id)
                    ])
                    request.session['success_page_msg'] = 'App Detail'
                    return paymentViews.payment(request, initParam=initParam)
    #Init data
    initParam['form'] = forms.ServiceDetailForm(instance=serviceDetail)

    return render_to_response('order/checkout.html',
                              initParam,
                              context_instance=RequestContext(request))
Exemplo n.º 25
0
def checkout(request, *args, **kwargs):
    """checkout for service detail payment."""
    initParam = {'begin_date': None}
    app_id = kwargs.get('app_id')
    service_id = kwargs.get('service_id')
    service_sn = kwargs.get('service_sn')
    initParam['select'] = request.POST.get('select')
    user = get_object_or_404(User, pk=request.user.id, username=request.user.username)
    app = get_object_or_404(appModels.App, pk=app_id, publisher_id=user.id)
    serviceDetail = get_object_or_404(models.ServiceDetail, pk=service_id, app_id=app_id, sn=service_sn)

    #Init data
    service_expiry_date = string.atoi(common.getSystemParam(key='service_expiry_date', default=31))
    initParam['service_expiry_date'] = service_expiry_date
    acceptGateways = user.acceptgateway_set.filter(is_active=True, is_default=True)
    serviceDetails = models.ServiceDetail.objects.filter(app_id=app_id, is_payed=True,
                            end_date__gte=datetime.datetime.now().strftime('%Y-%m-%d')).order_by('-pk')
    if serviceDetails:
        initParam['begin_date'] = serviceDetails[0].end_date
        serviceDetail.start_date = serviceDetails[0].end_date
    else:
        serviceDetail.start_date = datetime.datetime.now()
        serviceDetail.end_date = datetime.datetime.now() + datetime.timedelta(days=service_expiry_date)
    initParam['currency'] = app.currency.currency
    if acceptGateways:
        initParam['acceptGateway'] = acceptGateways[0]
    initParam['discount_rate'] = common.getSystemParam(key='discount_rate', default=1)

    if request.method == "POST":
        form = forms.ServiceDetailForm(request.POST)
        if form.is_valid():
            days = (form.cleaned_data['end_date'] - form.cleaned_data['start_date']).days
            if serviceDetail.is_payed:
                initParam['order_error'] = _('The payment is paid.')
            elif len(acceptGateways) == 0:
                initParam['order_error'] = _('The gateway is required.Please choice gateway.')
            elif (initParam['begin_date'] and form.cleaned_data['start_date'] < initParam['begin_date']) or days != service_expiry_date:
                initParam['order_error'] = _('Service date is not correct.')
            else:
                form.save(commit=False)
                serviceDetail.start_date = form.cleaned_data['start_date']
                serviceDetail.end_date = form.cleaned_data['end_date']
                serviceDetail.save()

                if serviceDetail.actual_amount <= 0:
                    if checkOutSuccess(request, serviceDetail=serviceDetail):
                        initParam['msg'] = _('The payment is successful.')
                        initParam['success_page'] = '/'.join([common.getHttpHeader(request), 'query/app-detail', str(app.id)])
                        initParam['success_page_msg'] = 'App Detail'
                        log.info(_('Seller %(param1)s has paid service fee - %(param2)s with service detail id %(param3)s.')
                                 % {'param1': request.user.username, 'param2': serviceDetail.actual_amount, 'param3': serviceDetail.id})
                        return render_to_response('payment/paypal_success.html', initParam, context_instance=RequestContext(request))
                    else:
                        initParam['order_error'] = _('The payment is failed. Please payment again.')
                else:
                    #Invoke payment method - payment for service detail
                    initParam['serviceDetail_id'] = serviceDetail.id
                    initParam['amount'] = serviceDetail.actual_amount
                    initParam['DESC'] = 'Service fee on AppsWalk.'
                    initParam['PAYMENTREQUEST_0_DESC'] = 'Service fee for App %(param1)s of user %(param2)s on AppsWalk.' % {'param1':app.app_name, 'param2':user.username}
                    initParam['ITEMAMT'] = serviceDetail.actual_amount
                    initParam['L_NAME0'] = 'Service fee on AppsWalk'
                    initParam['L_DESC0'] = 'Service fee for App %(param1)s' % {'param1':app.app_name}
                    initParam['L_AMT0'] = serviceDetail.actual_amount
                    initParam['L_QTY0'] = 1
                    initParam['gateway'] = 'paypal'
                    #The needed operation method in payment.
                    initParam['executeMethod'] = kwargs.get('executeMethod')
                    #The back page, when payment has error.
                    if request.session.get('back_page', None):
                        del request.session['back_page']
                    if request.session.get('back_page_msg', None):
                        del request.session['back_page_msg']
                    request.session['back_page'] = '/'.join([common.getHttpHeader(request), 'seller/payment', str(app.id)])
                    request.session['back_page_msg'] = 'Payment'
                    #The success return page, when payment finish.
                    if request.session.get('success_page', None):
                        del request.session['success_page']
                    if request.session.get('success_page_msg', None):
                        del request.session['success_page_msg']
                    request.session['success_page'] = '/'.join([common.getHttpHeader(request), 'query/app-detail', str(app.id)])
                    request.session['success_page_msg'] = 'App Detail'
                    return paymentViews.payment(request, initParam=initParam)
    #Init data
    initParam['form'] = forms.ServiceDetailForm(instance=serviceDetail)

    return render_to_response('order/checkout.html', initParam, context_instance=RequestContext(request))
Exemplo n.º 26
0
def payPalReturn(request, *args, **kwargs):
    """The PayPal method for payment verification."""
    initParam = {}
    token = request.GET.get('token')
    payerID = request.GET.get('PayerID')
    initParam['token'] = token
    initParam['payerid'] = payerID
    if token and payerID:
        p = driver.PayPal()
        EC_RETURNURL = '/'.join(
            [common.getHttpHeader(request), 'payment/paypal_return'])
        EC_CANCELURL = '/'.join(
            [common.getHttpHeader(request), 'payment/paypal_cancel'])
        res_dict = p.GetExpressCheckoutDetailsInfo(EC_RETURNURL, EC_CANCELURL,
                                                   token)
        state = p._get_value_from_qs(res_dict, 'ACK')
        if state in ["Success", "SuccessWithWarning"]:
            #Show the list of service detail to user.
            executeMethod = kwargs.pop('executeMethod', None)
            if executeMethod:
                gateway = request.session.get('gateway', None)
                if gateway:
                    initParam['gateway'] = gateway
                    serviceDetail, serviceItems, discount_rate = executeMethod(
                        request, initParam=initParam)
                    if serviceDetail and serviceItems:
                        initParam['serviceDetail'] = serviceDetail
                        initParam['serviceItems'] = serviceItems
                        initParam['discount_rate'] = discount_rate
                        return render_to_response(
                            'payment/paypal_return.html',
                            initParam,
                            context_instance=RequestContext(request))
                    else:
                        log.error(
                            _('Token %(param1)s, PayerID: %(param2)s, Execute method %(param3)s failed.'
                              ) % {
                                  'param1': token,
                                  'param2': payerID,
                                  'param3': executeMethod.__name__
                              })
                else:
                    log.error(
                        _('Token %(param1)s, PayerID: %(param2)s. Gateway no exists in request.session.'
                          ) % {
                              'param1': token,
                              'param2': payerID
                          })
            else:
                log.error(
                    _('Token %(param1)s, PayerID: %(param2)s, ExecuteMethod does not exist.'
                      ) % {
                          'param1': token,
                          'param2': payerID
                      })
        else:
            error = p._get_value_from_qs(res_dict, 'L_SHORTMESSAGE0')
            log.error(
                _('Token %(param1)s, PayerID: %(param2)s, %(param3)s.') % {
                    'param1': token,
                    'param2': payerID,
                    'param3': error
                })
    else:
        log.error(_('Token or PayerID no exists.'))

    if request.session.get('gateway', None):
        del request.session['gateway']
    success_page = request.session.get('success_page', None)
    back_page = request.session.get('back_page', None)
    if success_page:
        del request.session['success_page']
    if back_page:
        del request.session['back_page']
        error_msg = driver.GENERIC_PAYPAL_ERROR
        page_msg = request.session['back_page_msg']
        return render_to_response('payment/paypal_cancel.html', {
            'error_msg': error_msg,
            'back_page': back_page,
            'back_page_msg': page_msg
        },
                                  context_instance=RequestContext(request))
    else:
        error_msg = _('%(param1)s Please payment again.') % {
            'param1': driver.GENERIC_PAYPAL_ERROR
        }
        return render_to_response('payment/paypal_error.html',
                                  {"error_msg": error_msg},
                                  context_instance=RequestContext(request))
Exemplo n.º 27
0
def pay(request, *args, **kwargs):
    initParam = kwargs.get('initParam')
    executeMethod = initParam.pop('executeMethod', None)
    currency = initParam.get('currency')
    id = initParam.get('txn_id')
    if currency and id:
        p = driver.PayPal()
        AP_RETURNURL = '/'.join([
            'https://',
            request.META.get('HTTP_HOST'), 'payment/paypal_ap_return'
        ])
        AP_CANCELURL = '/'.join(
            [common.getHttpHeader(request), 'payment/paypal_cancel'])
        result = p.setAPCall(currency,
                             AP_RETURNURL,
                             AP_CANCELURL,
                             'PAY',
                             initParam=initParam)
        if result['responseEnvelope.ack'][0] == 'Success':
            pay_key = result['payKey'][0]
            #The needed operation for verification later when pay return pay_key.
            if executeMethod:
                initParam['pay_key'] = pay_key
                if executeMethod(initParam=initParam):
                    #payReturn will do operation by two session values.
                    if request.session.get('pay_key', None):
                        del request.session['pay_key']
                    request.session['pay_key'] = pay_key
                    if request.session.get('gateway', None):
                        del request.session['gateway']
                    request.session['gateway'] = 'paypal'
                    #redirect PayPal pay website.
                    redirect_url = p.paypal_ap_url(pay_key)
                    return redirect(redirect_url)
                else:
                    log.error(
                        _('Transaction with id %(param1)s. Execute method %(param2)s failed.'
                          ) % {
                              'param1': id,
                              'param2': executeMethod.__name__
                          })
            else:
                log.error(
                    _('Transaction with id %(param1)s. ExecuteMethod does not exist.'
                      ) % {'param1': id})
        else:
            log.error(
                _('Transaction with id %(param1)s. %(param2)s') % {
                    'param1': id,
                    'param2': str(result['error(0).message'][0])
                })
    else:
        log.error(_('Pay. Currency or Transaction ID no exists.'))

    success_page = request.session.get('success_page', None)
    back_page = request.session.get('back_page', None)
    if success_page:
        del request.session['success_page']
    if back_page:
        del request.session['back_page']
        error_msg = driver.GENERIC_PAYPAL_ERROR
        page_msg = request.session['back_page_msg']
        return render_to_response('payment/paypal_cancel.html', {
            'error_msg': error_msg,
            'back_page': back_page,
            'back_page_msg': page_msg
        },
                                  context_instance=RequestContext(request))
    else:
        error_msg = _('%(param1)s Please transaction again.') % {
            'param1': driver.GENERIC_PAYPAL_ERROR
        }
        return render_to_response('payment/paypal_error.html',
                                  {"error_msg": error_msg},
                                  context_instance=RequestContext(request))
Exemplo n.º 28
0
def payment(request, *args, **kwargs):
    """Begin payment operation."""
    initParam = kwargs.get('initParam')
    executeMethod = initParam.pop('executeMethod', None)
    amount = initParam.pop('amount')
    currency = initParam.pop('currency')
    id = initParam.get('serviceDetail_id')
    if amount and currency and id:
        p = driver.PayPal()
        EC_RETURNURL = '/'.join(
            [common.getHttpHeader(request), 'payment/paypal_return'])
        EC_CANCELURL = '/'.join(
            [common.getHttpHeader(request), 'payment/paypal_cancel'])
        result = p.SetExpressCheckout(amount,
                                      currency,
                                      EC_RETURNURL,
                                      EC_CANCELURL,
                                      initParam=initParam)
        if result:
            #The needed operation for verification later when payment return token..
            if executeMethod:
                initParam['token'] = p.token
                if executeMethod(request, initParam=initParam):
                    if request.session.get('gateway', None):
                        del request.session['gateway']
                    request.session['gateway'] = initParam.get('gateway')
                    redirect_url = p.paypal_url()
                    return redirect(redirect_url)
                else:
                    log.error(
                        _('ServiceDetail with id %(param1)s. Execute method %(param2)s failed.'
                          ) % {
                              'param1': id,
                              'param2': executeMethod.__name__
                          })
            else:
                log.error(
                    _('ServiceDetail with id %(param1)s. ExecuteMethod does not exist.'
                      ) % {'param1': id})
        else:
            log.error(
                _('ServiceDetail with id %(param1)s. %(param2)s') % {
                    'param1': id,
                    'param2': str(p.apierror)
                })
    else:
        log.error(
            _('payment. Amount or Currency or ServiceDetail ID no exists.'))

    success_page = request.session.get('success_page', None)
    back_page = request.session.get('back_page', None)
    if success_page:
        del request.session['success_page']
    if back_page:
        del request.session['back_page']
        error_msg = driver.GENERIC_PAYPAL_ERROR
        page_msg = request.session['back_page_msg']
        return render_to_response('payment/paypal_cancel.html', {
            'error_msg': error_msg,
            'back_page': back_page,
            'back_page_msg': page_msg
        },
                                  context_instance=RequestContext(request))
    else:
        error_msg = _('%(param1)s Please payment again.') % {
            'param1': driver.GENERIC_PAYPAL_ERROR
        }
        return render_to_response('payment/paypal_error.html',
                                  {"error_msg": error_msg},
                                  context_instance=RequestContext(request))
Exemplo n.º 29
0
def onePriceBuy(request, *args, **kwargs):
    """
        Buyer pay by clicking button 'Buy It Now with 10 USD' in app detail page.
        Note: url include app_id, and publisher_id, because of preventing user to cheat.
    """
    initParam = {}
    app_id = kwargs.get('app_id')
    publisher_id = kwargs.get('publisher_id')
    app = get_object_or_404(appModels.App, pk=app_id, publisher_id=publisher_id, status=2)

    transactions = models.Transaction.objects.filter(app_id=app.id, seller_id=publisher_id, buyer_id=request.user.id, status=1)
    if transactions:
        transaction = transactions[0]
    else:
        transaction = models.Transaction()
        transaction.app = app
        transaction.seller = app.publisher
        transaction.status = 1
        transaction.is_active = False
        transaction.buyer = request.user
        transaction.price = app.one_price
        transaction.buy_type = 1
        paid_expiry_date = string.atoi(common.getSystemParam(key='paid_expiry_date', default=7))
        transaction.end_time = datetime.datetime.now() + datetime.timedelta(days=paid_expiry_date)
        transaction.save()

        #Log transaction
        transactionsLog = models.TransactionLog()
        transactionsLog.transaction = transaction
        transactionsLog.app = transaction.app
        transactionsLog.status = transaction.status
        transactionsLog.buyer = transaction.buyer
        transactionsLog.price = transaction.price
        transactionsLog.buy_type = transaction.buy_type
        transactionsLog.save()

    initParam['transaction'] = transaction
    initParam['page_source'] = 'one-price'
    if transaction.end_time > datetime.datetime.now():
        initParam['time_remaining'] = time.mktime(time.strptime(transaction.end_time.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S'))
    else:
        initParam['time_remaining'] = "Deal Closed"
        initParam['paid_expiry'] = True

    if request.method == 'POST':
        #Buyer credit point judge for bidding.
        min_cp = common.getSystemParam(key='min_cp_for_bid', default=50)
        cp = creditViews.getUserCreditPoint(user=request.user)
        if cp == -1 or cp < string.atoi(min_cp):
            initParam['error_msg'] = _('You are not allowed to buy, because your credit points is too low.')
        else:
            #Buyser pay for app.
            txn_fee_pct = string.atof(common.getSystemParam(key='txn_fee_pct', default=0.01))
            initParam['currency'] = app.currency.currency
            initParam['appsWalk_account'] = settings.APPSWALK_ACCOUNT
            initParam['gateway'] = 'paypal'
            gateways = paymentModels.Gateway.objects.filter(name__iexact=initParam.get('gateway'))
            acceptGateways = paymentModels.AcceptGateway.objects.filter(user_id=transaction.seller.id, type_id=gateways[0].id, is_active=True)
            initParam['seller_account'] = acceptGateways[0].value
            initParam['appsWalk_amount'] = app.one_price * txn_fee_pct
            initParam['seller_amount'] = app.one_price * (1 - txn_fee_pct)
            initParam['txn_id'] = transaction.id
            #The needed operation method in pay.
            initParam['executeMethod'] = updateTransaction
            #The back page, when pay has error.
            if request.session.get('back_page', None):
                del request.session['back_page']
            if request.session.get('back_page_msg', None):
                del request.session['back_page_msg']
            request.session['back_page'] = '/'.join([common.getHttpHeader(request), 'query/app-detail', str(app.id)])
            request.session['back_page_msg'] = 'App Detail'
            #The success return page, when pay finish.
            if request.session.get('success_page', None):
                del request.session['success_page']
            if request.session.get('success_page_msg', None):
                del request.session['success_page_msg']
            request.session['success_page'] = '/'.join([common.getHttpHeader(request), 'transaction/trade-action/buy', str(app.id), str(request.user.id)])
            request.session['success_page_msg'] = 'Trade Action'
            return paymentViews.pay(request, initParam=initParam)
    return render_to_response('transaction/one_price_buy.html', initParam, context_instance=RequestContext(request))