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, })
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 })
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
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")
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')