Example #1
0
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())
Example #2
0
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())
Example #3
0
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())