Esempio n. 1
0
def confhb(request, entext):
    code = request.GET.get('code')
    state = request.GET.get('state')
    if code == None or state == None:
        raise Http404
    r = requests.get(
        url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +
        settings.WEIXIN['appid'] + "&secret=" + settings.WEIXIN['appsecret'] +
        "&code=" + code + "&grant_type=authorization_code")
    r.encoding = 'utf-8'
    jdata = json.loads(r.text)

    access_token = jdata['access_token']
    openid = jdata['openid']

    mc = MyCrypt(settings.WEIXIN['encodingaeskey'], settings.WEIXIN['appid'])
    ret, detext = mc.DecryptMsg(
        base64.urlsafe_b64decode(entext.encode("utf-8")))
    openid1, utimestamp = weixin_helper.divide_str_dvdstr(detext, '-#-')
    if openid != openid1:
        raise Http404
    else:
        print >> sys.stderr, '--htmlhtml1--', entext
    url = weixin_helper.tran_url("http://" + request.get_host() +
                                 request.get_full_path())
    jsconfig = getJSConfig(request, url)
    return render_to_response('hongbao_config.html', {
        'entext': entext,
        'jsconfig': jsconfig,
    })
Esempio n. 2
0
def hbsendlist(request, entext):
    #imgurl = request.GET.get('imgurl')
    #nickname = request.GET.get('nickname')
    mc = MyCrypt(settings.WEIXIN['encodingaeskey'], settings.WEIXIN['appid'])
    ret, entext = mc.DecryptMsg(
        base64.urlsafe_b64decode(entext.encode("utf-8")))
    openid, utimestamp = weixin_helper.divide_str_dvdstr(entext, '-#-')
    user_data = User.objects.raw(
        "select a.id as id,a.nickname as nickname,b.headimgurl as imgurl from weixin_user a,weixin_userdetail b where a.openid='"
        + openid + "' and b.openid_id=a.openid")
    #todo:判断超时问题

    hbssum = weixin_helper.trans_number(
        Hongbao.objects.filter(hbhost=openid).aggregate(
            Sum('hbsum'))['hbsum__sum'])
    hbsnum = weixin_helper.trans_number(
        Hongbao.objects.filter(hbhost=openid).aggregate(
            Sum('hbnum'))['hbnum__sum'])
    mysendhbs = Hongbao.objects.raw(
        "select a.id, a.hbuuid as hbuuid, a.hbnum as hbnum , count(b.hbdowneropenid_id) as  hbdusednum ,FROM_UNIXTIME(left(a.hbstime,10),'%%Y-%%m-%%d') as hbtime ,a.hbtype as bhtype ,a.hbsum as hbsum,replace(a.enhbid,'=','%%3D') as enhbid from weixin_hongbao a right join weixin_hbdetail b on a.hbuuid=b.hbduuid_id where a.hbhost_id='"
        + openid + "'  group by a.hbuuid order by a.hbstime desc")[:10]
    url = weixin_helper.tran_url("http://" + request.get_host() +
                                 request.get_full_path())
    jsconfig = getJSConfig(request, url)
    return render_to_response(
        'hongbao_hbsendlist.html', {
            'entext': entext,
            'imgurl': user_data[0].imgurl,
            'nickname': user_data[0].nickname,
            'mysendhbs': mysendhbs,
            'hbssum': hbssum,
            'hbsnum': hbsnum,
            'jsconfig': jsconfig
        })
Esempio n. 3
0
def hongbaodesc(request, enhbid):

    content = {}
    url = "http://" + request.get_host() + request.get_full_path()
    url = url.replace('=', "%3D")
    print >> sys.stderr, '------hehehehe----', url
    if request.GET.get('ismine'):
        content['ismine'] = request.GET.get('ismine')

    try:
        mc = MyCrypt(settings.WEIXIN['encodingaeskey'],
                     settings.WEIXIN['appid'])
        ret, detxt = mc.DecryptMsg(
            base64.urlsafe_b64decode(enhbid.encode("utf-8")))
        if ret != 0:
            raise Http404

        jsconfig = getJSConfig(request, url)
        hbid, hbstime = weixin_helper.divide_str_dvdstr(detxt, '-#-')
        hongbao_data = Hongbao.objects.get(hbid=hbid, hbstime=hbstime)
        if hongbao_data is None:
            raise Http404

        ntimestamp = int(time.time() * 1000)
        if hongbao_data.hbtype == 'temporary':
            if (ntimestamp - 1000 * 60 * 30) > int(hbstime):
                return render_to_response('hongbao_fail.html',
                                          {'errmsg': '超过红包有效时限,遗憾呐!!'})
        elif hongbao_data.hbtype == 'eternal':
            if (ntimestamp - 1000 * 60 * 60 * 24) > int(hbstime):
                return render_to_response('hongbao_fail.html',
                                          {'errmsg': '超过红包有效时限,遗憾呐!!'})
            if (ntimestamp - 1000 * 60 * 29) > int(hongbao_data.qrcodeutime):
                qrcodeurl = weixin_helper.get_tmp_qrcode(hbid)
                if qrcodeurl is None:
                    raise Http404
                hongbao_data.hbqrcodeurl = qrcodeurl
                hongbao_data.qrcodeutime = ntimestamp
                hongbao_data.save()

        user_data = hongbao_data.hbhost
        content['nickname'] = user_data.nickname
        content['hbsum'] = hongbao_data.hbsum
        content['hbnum'] = hongbao_data.hbnum
        content['hbgreetings'] = hongbao_data.hbgreetings
        content[
            'gethburl'] = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + settings.WEIXIN[
                'appid'] + "&redirect_uri=http://" + settings.WEIXIN[
                    'domainname'] + "/weixin/gethb/" + enhbid + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
        content['hbqrcodeurl'] = hongbao_data.hbqrcodeurl
        content['jsconfig'] = jsconfig

    except Exception, e:
        print >> sys.stderr, '----------', e
        raise Http404
Esempio n. 4
0
def senddoge(request):
    if request.method == 'GET':
        raise Http404
    outaddress = request.POST.get('outaddress')
    outnum = request.POST.get('outnum')
    entext = request.POST.get('entext')
    #return HttpResponse(outaddress+outnum+entext)
    if outaddress == None or outnum == None or entext == None:
        return HttpResponse(json.dumps({
            'success': 1,
            'errmsg': '请填写完整提币信息'
        },
                                       ensure_ascii=False),
                            content_type="application/json")
    mc = MyCrypt(settings.WEIXIN['encodingaeskey'], settings.WEIXIN['appid'])
    ret, detxt = mc.DecryptMsg(entext)
    if ret != 0:
        raise Http404
    openid, stimestamp = weixin_helper.divide_str_dvdstr(detxt, "-##")
    ntimestamp = time.time() * 1000
    if (ntimestamp - 1000 * 60 * 5) > int(stimestamp):
        return HttpResponse(json.dumps(
            {
                'success': 1,
                'errmsg': '此页面已经超时,请关闭此页,重新打开'
            }, ensure_ascii=False),
                            content_type="application/json")
    user_data = User.objects.get(openid=openid)
    if user_data.lockamount < 0:
        return HttpResponse(json.dumps({
            'success': 1,
            'errmsg': '账户异常!'
        },
                                       ensure_ascii=False),
                            content_type="application/json")
    ret, rst = MyDogecoinConn().sendfrom(user_data, user_data.account,
                                         outaddress, outnum,
                                         DogeConfig.DOGE_MIN_CONF,
                                         str(ntimestamp),
                                         "from http://www.5idoge.com")
    if ret != 0:
        return HttpResponse(json.dumps({
            'success': 1,
            'errmsg': rst
        },
                                       ensure_ascii=False),
                            content_type="application/json")
    return HttpResponse(json.dumps({
        'success': ret,
        'errmsg': rst
    },
                                   ensure_ascii=False),
                        content_type="application/json")
Esempio n. 5
0
def sendhb(request):
    if request.method == 'GET':
        raise Http404
    hbsum = request.POST.get('hbsum')
    hbnum = request.POST.get('hbnum')
    entext = request.POST.get('entext')
    hbtype = request.POST.get('hbtype')
    hbgreetings = request.POST.get('hbgreetings')

    enhbid = ''
    try:
        mc = MyCrypt(settings.WEIXIN['encodingaeskey'],
                     settings.WEIXIN['appid'])
        ret, entext = mc.DecryptMsg(
            base64.urlsafe_b64decode(entext.encode("utf-8")))
        openid, utimestamp = weixin_helper.divide_str_dvdstr(entext, '-#-')

        user_data = User.objects.get(openid=openid)
        if user_data is None:
            return render_to_response('hongbao_config.html', {
                'entext': entext,
                'errmsg': '还没有关注【吾爱doge】公众账号吧!请关注公众账号再发送'
            })
        else:
            nickname = user_data.nickname
        stimestamp = int(time.time() * 1000)
        if (stimestamp - int(utimestamp)) > 30 * 60 * 1000:
            return render_to_response('hongbao_config.html', {
                'entext': entext,
                'errmsg': '链接超时,请关闭此页面重新点击活动--》红包'
            })

        ret, rst = MyDogecoinConn().getbalance(user_data.account,
                                               DogeConfig.DOGE_MIN_CONF)
        print >> sys.stderr, ret, type(rst)
        if ret != 0:
            return HttpResponse('内部异常!!')
        if rst < (decimal.Decimal(hbsum) + user_data.lockamount):
            return HttpResponse('主人,你的账号里doge不足啊')

        hbid = 0
        if hbtype == 'temporary' or hbtype == 'eternal':
            if Hongbao.objects.filter(hbid__gt=100000).count() == 0:
                hbid = 100001
            else:
                hbid = int(
                    Hongbao.objects.filter(hbid__gt=100000).aggregate(
                        Max('hbid'))['hbid__max']) + 1

        hongbao_data = Hongbao(
            hbuuid=str(uuid.uuid4()),
            hbtype=hbtype,
            hbid=hbid,
            hbnum=hbnum,
            hbrandomtype='1',
            hbsum=hbsum,
            hbhost=user_data,
            hbgreetings=hbgreetings,
            hbstime=stimestamp,
            hbutime=utimestamp,
            qrcodeutime=stimestamp,
        )
        hongbao_data.save()
        hbdarr = weixin_helper.get_hongbao_random(float(hbsum), int(hbnum),
                                                  random.randint(3, 5))
        print >> sys.stderr, hbdarr
        for n in range(0, len(hbdarr)):
            hbd_data = Hbdetail(
                hbduuid=hongbao_data,
                hbdseq=n,
                hbdnum=hbdarr[n],
                hbdused=False,
                #hbdowneropenid = user_data,
            )
            hbd_data.save()

        hbqrcodeurl = weixin_helper.get_tmp_qrcode(hbid)
        ret, enhbid = mc.EncryptMsg(str(hbid) + '-#-' + str(stimestamp))
        enhbid = base64.urlsafe_b64encode(enhbid)

        if hbqrcodeurl is None:
            hongbao_data.hbqrcodeurl = 'fail'
        hongbao_data.hbqrcodeurl = hbqrcodeurl
        hongbao_data.enhbid = enhbid
        hongbao_data.save()
        user_data.lockamount = decimal.Decimal(hbsum) + user_data.lockamount
        user_data.save()
        #TODO: 区分限时和不限时的差别
        if hongbao_data.hbtype == 'temporary':
            hello_world1.apply_async((hongbao_data.hbuuid, user_data.openid),
                                     countdown=60 * 32,
                                     retry=False)
        elif hongbao_data.hbtype == 'eternal':
            hello_world1.apply_async((hongbao_data.hbuuid, user_data.openid),
                                     countdown=60 * 60 * 24,
                                     retry=False)
        print >> sys.stderr, '------sendhb base64------', enhbid
    except Exception, e:
        print >> sys.stderr, '------sendhberror------', e
        return render_to_response('hongbao_fail.html')