def wechat(request): r1 = redis_client() WECHAT_TOKEN = r1.get('WECHAT_ESPUSH_TOKEN') if not WECHAT_TOKEN: logger.error('未配置TOKEN,失败') return HttpResponseServerError("服务端错误,未配置") signature = request.GET.get('signature') timestamp = request.GET.get('timestamp') nonce = request.GET.get('nonce') echostr = request.GET.get('echostr') if (not nonce) or (not timestamp) or (not signature): return HttpResponseBadRequest('ERROR') sOut = hashlib.sha1(''.join(sorted([WECHAT_TOKEN, timestamp, nonce]))).hexdigest() logger.info('signature: [%s], [%s]', signature, sOut) if sOut != signature: logger.warn('签名不正确,忽略') return HttpResponseBadRequest("ERROR") if request.method == 'GET': return HttpResponse(echostr) if request.method == 'POST': msg = parse_user_msg(request.body) logger.info(u'消息: [%s]', msg.type) if msg.type == 'subscribe': return subscribe_msg(request, msg) elif msg.type == 'unsubscribe': return unsubscribe_msg(request, msg) elif msg.type == 'view': logger.info('页面跳转事件,忽略') return HttpResponse("") elif msg.type == 'text': logger.info('用户直接沟通反馈') weuser = wechat_get_user(msg.source) feedback_msg = WechatFeedback(content=msg.content, wechat_user=weuser) feedback_msg.save() rsp_content = '小E已经收到您的呼唤,我会尽快给您回复' rsp = TextReply(message=msg, content=rsp_content) return HttpResponse(rsp.render()) else: logger.warn('未知消息类型') content = '小E也不知道您在嘀咕个啥' rsp = TextReply(message=msg, content=content) return HttpResponse(rsp.render())
def unsubscribe_msg(request, msg): user_openid = msg.source wechat_users = WechatUser.objects.filter(openid=user_openid, stat='VALID') if not wechat_users: logger.warn('未保存的微信用户 [%s] 取消关注', user_openid) else: wechat_user = wechat_users[0] wechat_user.stat = 'UNFOLLOWED' wechat_user.save() retmsg = TextReply(message=msg, content='bye') return HttpResponse(retmsg.render())
def subscribe_msg(request, msg): user_openid = msg.source wechat_get_user(user_openid) welcome_url = 'https://espush.cn/weixin/wechat_webapp/' quoted_welcome_url = get_wechat_redirect_url(welcome_url) content = """欢迎关注ESPUSH ESPUSH 是专门为ESP8266 WIFI物联网而开发的云平台,针对云端远程控制、数据采集等应用场景做了深度优化。 <a href="%s">点这里手机控制您的WIFI</a> 有什么意见,您也可以直接微信与我沟通,收到您的反馈后我会尽快回复您。 """ % quoted_welcome_url retmsg = TextReply(message=msg, content=content) return HttpResponse(retmsg.render())