def post(self, request): username = request.POST.get('username') feed_id = request.POST.get('feed_id') title = request.POST.get('title') reco_num = int(request.POST.get('reco_num')) # calc_num = request.POST.get('calc_num') display_time = request.POST.get('display_time') user = get_object_or_none(User, email=username) weixin_user = WeixinService.get_weixin_user_by_uid(user=user) if not weixin_user: return JsonResponse( { 'msg': 'not found weixin user', 'status': 'error' } ) openid = weixin_user.openid send_data = WeixinService.get_feed_notify_msg_tpl() url = '{0}{1}/'.format( WeixinService.get_recommand_url(), feed_id ) send_data['first']['value'] = "聘宝刚刚为您推荐了{0}封简历,优质候选人不能等,请尽快查阅简历".format(reco_num), send_data['remark']['value'] = "小宝提示:手机上每个职位定制只能浏览最多5封简历哦,请返回PC上查看全部的简历推荐." if reco_num == 0: send_data['first']['value'] = "小宝遗憾的通知您,以下职位暂时没有合适的人才匹配:", send_data['remark']['value'] = "不要气馁!小宝秘籍在此:你可以尝试修改定制内容,可能会有惊喜哦!" url = WeixinService.get_customize_url() send_data['keyword1']['value'] = title send_data['keyword2']['value'] = reco_num send_data['keyword3']['value'] = display_time ret = WxUtils.send_tpl_msg( openid=openid, tpl_id=WeixinService.get_template_msg_id(), data=send_data, url=url, ) if ret.get('errcode') != 0: return JsonResponse( { 'status': 'error', 'msg': ret.get('errmsg') } ) return JsonResponse( { 'status': 'ok', 'msg': 'success' } )
def get(self, request): user = request.user ret = WeixinService.is_bind(user=user) nickname = '' if not ret else ret.nickname ret = True if WeixinService.is_bind(user=user) else False return JsonResponse({ 'status': 'ok', 'msg': '', 'is_bind': ret, 'nickname': nickname, })
def get(self, request): user = request.user ret = WeixinService.is_bind(user=user) nickname = '' if not ret else ret.nickname ret = True if WeixinService.is_bind(user=user) else False return JsonResponse( { 'status': 'ok', 'msg': '', 'is_bind': ret, 'nickname': nickname, } )
def update_weixin(): weixin_users = WeixinUser.objects.all() for weixin_user in weixin_users: openid = weixin_user.openid weixin_user_doc = WeixinService.get_user_info(openid=openid) weixin_user_doc.pop('openid') print weixin_user_doc WeixinUser.objects.filter(openid=openid).update(**weixin_user_doc) print 'weixin user info: %s update success' % (openid)
def post(self, request): if not self.validate(): return HttpResponseBadRequest('Verify Failed') response = WeixinService.process_request_msg( recv_body=request.body ) return HttpResponse(response, content_type="application/xml")
def send_tpl_msg(cls, openid, tpl_id, data, url, msg_type=1): ret = WeixinService.send_template_message(openid=openid, template_id=tpl_id, data=data, url=url) weixin_user = WeixinService.get_weixin_user(openid=openid) msg_log = MsgSendLog(weixin_user=weixin_user, msg_type=msg_type, title=data['keyword1']['value'], reco_num=data['keyword2']['value'], display_time=data['keyword3']['value'], url=url, errcode=ret.get('errcode'), errmsg=ret.get('errmsg')) msg_log.save() return ret
def send_feed_msg(): need_send_email = EmailFeedData.objects( is_send=False, ).distinct('email') weixin_users = WeixinUser.objects.filter( user__username__in=need_send_email ) for send_user in weixin_users: feed_data = get_feed_data(send_user) feed_id = feed_data.get('feed_id') title = feed_data['title'] reco_num = feed_data['reco_num'] display_time = feed_data['display_time'] send_data = WeixinService.get_feed_notify_msg_tpl() send_data['first']['value'] = "聘宝刚刚为您推荐了{0}封简历,优质候选人不能等,请尽快查阅简历".format(feed_data['reco_num']) send_data['keyword1']['value'] = title send_data['keyword2']['value'] = reco_num send_data['keyword3']['value'] = display_time send_data['remark']['value'] = "小宝提示:手机上每个职位定制只能浏览最多5封简历哦,请返回PC上查看全部的简历推荐." urls = WeixinService.get_recommand_url().split('?from=') url = '{0}{1}/?from={2}'.format(urls[0], feed_id, urls[1]) if reco_num == 0: send_data['first']['value'] = "小宝遗憾的通知您,以下职位暂时没有合适的人才匹配:", send_data['remark']['value'] = "不要气馁!小宝秘籍在此:你可以尝试修改定制内容,可能会有惊喜哦!" url = WeixinService.get_customize_url() ret = WxUtils.send_tpl_msg( openid=feed_data.get('openid'), tpl_id=WeixinService.get_template_msg_id(), data=send_data, url=url ) if ret.get('errcode') == 0: print '%s,(openid:%s) send weixin msg success' % (send_user.user.username, feed_data.get('openid')) else: print '%s,(openid:%s) send weixin msg error' % (send_user.user.username, feed_data.get('openid'))
def validate(self): signature = self.request.REQUEST.get('signature', '') timestamp = self.request.REQUEST.get('timestamp', '') nonce = self.request.REQUEST.get('nonce', '') return WeixinService.check_signature( signature=signature, timestamp=timestamp, nonce=nonce )
def get(self, request): # if not self.validate(): # return HttpResponseBadRequest('Verify Failed') self.request = request code = self.request.REQUEST.get('code') next_url = self.request.REQUEST.get('next_url') if not error_weixin_code(code): return HttpResponseBadRequest('Verify Failed') user_base = WeixinService.get_openid( code=code ) if not user_base: return HttpResponseBadRequest('Verify Failed') openid = user_base.get('openid') access_token = user_base.get('access_token') # save session self.save_token_to_session( openid=openid, access_token=access_token ) # get weixin user sns info readlly_weixin_user = WeixinService.get_weixin_user( openid=openid ) redirect_next_url = self.NEXT_URL_META.get(next_url, REDIRECT_LOGIN_URL) redirect_next_url = redirect_next_url[:redirect_next_url.find('?from=weixin')] if readlly_weixin_user: pinbot_user = readlly_weixin_user.user if pinbot_user.is_active: return redirect('{0}?is_bind=1&weixin_auth=1'.format(redirect_next_url)) return redirect(redirect_next_url)
def update_weixin(): weixin_users = WeixinUser.objects.all() for weixin_user in weixin_users: openid = weixin_user.openid weixin_user_doc = WeixinService.get_user_info(openid=openid) weixin_user_doc.pop('openid') print weixin_user_doc WeixinUser.objects.filter( openid=openid ).update( **weixin_user_doc ) print 'weixin user info: %s update success' % (openid)
def send_tpl_msg(cls, openid, tpl_id, data, url, msg_type=1): ret = WeixinService.send_template_message( openid=openid, template_id=tpl_id, data=data, url=url ) weixin_user = WeixinService.get_weixin_user(openid=openid) msg_log = MsgSendLog( weixin_user=weixin_user, msg_type=msg_type, title=data['keyword1']['value'], reco_num=data['keyword2']['value'], display_time=data['keyword3']['value'], url=url, errcode=ret.get('errcode'), errmsg=ret.get('errmsg') ) msg_log.save() return ret
def _get_promotion_link(self): promotion_token = self._get_promotion_token() login_url = self.request.build_absolute_uri( reverse('user-account-reg') ) promotion_link = '%s?promotion_token=%s' % ( login_url, promotion_token.token, ) short_link_ret = WeixinService.get_short_url(promotion_link) if short_link_ret.get('errcode') == 0: promotion_link = short_link_ret.get('short_url', promotion_link) return promotion_link, promotion_token.token
def send_redpack(self, gift): ret = { 'status': 'ok', 'msg': 'ok' } if not gift: ret['status'] = 'ok' ret['msg'] = '没有微信红包' logger.debug('no redpack') return ret if not gift.egg.code_name.startswith('hongbao_'): ret['status'] = 'ok' ret['msg'] = '没有微信红包' logger.debug('no redpack') return ret user = self.request.user if not WeixinService.is_bind(user=user): ret['status'] = 'unbind' ret['msg'] = '您还未绑定微信服务号' gift_amount = gift.egg.price send_ret = WeixinRedPackService.send_feed_redpack( user=user, act_name='彩蛋红包', total_amount=gift_amount ) if not send_ret: ret['status'] = 'redpack_send_fail' ret['msg'] = '红包发放失败!' ret['msg'] = '红包已经发送至聘宝招聘版服务号!' ret['status'] = 'redpack_send_success' gift.claim_status = 2 gift.claim_time = datetime.datetime.now() gift.save() logger.info( 'redpack for user: {username} send status: {ret}'.format( username=user.username, ret=ret ) ) return ret
def _get_qr_code_link(self, token): register_link = settings.MOBILE_REGISTER_LINK company_name = self.request.user.userprofile.company_name name = self.request.user.userprofile.name username = '******'.format(company_name, name) qr_code_link = '{0}?username={1}&promotion_token={2}'.format( register_link, username, token ) short_link_ret = WeixinService.get_short_url(qr_code_link) if short_link_ret.get('errcode') == 0: qr_code_link = short_link_ret.get('short_url', qr_code_link) return qr_code_link
def send_redpack(self, gift): ret = {'status': 'ok', 'msg': 'ok'} if not gift: ret['status'] = 'ok' ret['msg'] = '没有微信红包' logger.debug('no redpack') return ret if not gift.egg.code_name.startswith('hongbao_'): ret['status'] = 'ok' ret['msg'] = '没有微信红包' logger.debug('no redpack') return ret user = self.request.user if not WeixinService.is_bind(user=user): ret['status'] = 'unbind' ret['msg'] = '您还未绑定微信服务号' gift_amount = gift.egg.price send_ret = WeixinRedPackService.send_feed_redpack( user=user, act_name='彩蛋红包', total_amount=gift_amount) if not send_ret: ret['status'] = 'redpack_send_fail' ret['msg'] = '红包发放失败!' ret['msg'] = '红包已经发送至聘宝招聘版服务号!' ret['status'] = 'redpack_send_success' gift.claim_status = 2 gift.claim_time = datetime.datetime.now() gift.save() logger.info('redpack for user: {username} send status: {ret}'.format( username=user.username, ret=ret)) return ret
def create_menu(): return WeixinService.create_menu()
def get_access_token(): return WeixinService.get_base_access_token()
def test_get_template_msg_id(self): self.assertIsNotNone(WeixinService.get_template_msg_id())
def test_get_recommand_url(self): self.assertIsNotNone(WeixinService.get_recommand_url())
def test_get_feed_notify_msg_tpl(self): self.assertIsNotNone(WeixinService.get_feed_notify_msg_tpl())
def test_get_access_token(self): self.assertIsNotNone(WeixinService.get_base_access_token())
def test_create_menu(self): self.assertTrue(WeixinService.create_menu())