Example #1
0
 def _response2xml(self, response, msg):
     """
     将response解析成需要的xml
     :param response:
     :return:
     """
     # 图片型
     if response.startswith("#Image"):
         path = response.replace("#Image:", "")
         medie_id = self._weixin_util.upload(path)
         replay = ImageReply(media_id=medie_id, message=msg)
         xml = replay.render()
         return xml
     else:
         # 文本型的xml
         if response.startswith("#json:"):
             response = response.replace("#json:", "")
             response_json = json.loads(response)
             # print(response_json)
             # 处理url类的
             for key in response_json:
                 if "url" in key:
                     response = "你自己看吧。\n{}".format(response_json[key])
                     break
         reply = TextReply(content=response, message=msg)
         xml = reply.render()
         return xml
Example #2
0
def remove_img_bg(msg, accessToken=None):
    resp_xml = None

    try:
        if msg.type == 'text':
            no_bg_img_path = wechat.rmBg.get_result_bytaskid(msg.content)
            if no_bg_img_path == 'error':
                return get_rmbg_error_reply(msg)
            elif no_bg_img_path:
                media_id = upload('image', no_bg_img_path, accessToken)
                from wechatpy.messages import ImageMessage
                newMsg = ImageMessage(msg._data)
                reply = ImageReply(media_id=media_id, message=newMsg)
                return reply.render()
            else:
                return get_imgerr_reply(msg)

        # 通过公众号接收到的图片信息下载图片到本地
        path = download(msg.image, msg.source)
        # 调用ai去除背景接口,保存结果图片后,返回对应路径
        taskid = wechat.rmBg.do_remove(path)

        import threading
        print(threading.current_thread().name, taskid)

        text = '下载注意事项:请用[5a4490.../red]的格式发送消息,用于下载处理后图像文件。\n颜色默认为白色(white),同时支持红色(red),蓝色(blue)。\n验证码:%s' % taskid
        resp_xml = create_reply(text, message=msg, render=True)

    except Exception as e:
        resp_xml = get_error_reply(msg)

    return resp_xml
Example #3
0
def wechat(request):
    if request.method == 'GET':
        signature = request.GET.get('signature', None)
        timestamp = request.GET.get('timestamp', None)
        nonce = request.GET.get('nonce', None)
        echostr = request.GET.get('echostr', None)


        try:
            check_signature(WECHAT_TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            echostr = 'error'

        return HttpResponse(echostr)

    elif request.method == 'POST':
        msg = parse_message(request.body)
        print(msg)
        # if msg.type == 'text':
        #     if msg.content == '民事案件':
        #         reply = getDogLossList(request, msg)
        #     elif msg.content == '刑事案件':
        #         reply = getDogOwnerList(request, msg)
        #     else:
        #         reply = TransferCustomerServiceReply(message=msg)
        # code = request.POST.get('code',None)
        # print(code,1111111111)
        if msg.type == 'image':
            reply = ImageReply(message=msg)
            reply.media_id = msg.media_id
        elif msg.type == 'voice':
            reply = VoiceReply(message=msg)
            reply.media_id = msg.media_id
            reply.content = '语音信息'
        elif msg.type == 'event':
            print('eventkey=', msg.event)
            if msg.event == 'subscribe':
                print(333333333333)
                saveWxLaw(msg.source)
                reply = create_reply('感谢您关注【辽宁大潮律师事务所】', msg)
            elif msg.event == 'unsubscribe':
                reply = create_reply('取消关注公众号', msg)
                unSubUserinfo(msg.source)
            elif msg.event == 'subscribe_scan':
                reply = create_reply('感谢您关注【辽宁大潮律师事务所】', msg)
                saveWxLaw(msg.source, msg.scene_id)
                print('scene_id=', msg.scene_id)
            elif msg.event == 'scan':
                print('scan====', msg.scene_id)
                # setUserToMember(msg.source, msg.scene_id)
                reply = create_reply('', msg)
            else:
                reply = create_reply('view', msg)

        response = HttpResponse(reply.render(), content_type="application/xml")
        return response
Example #4
0
def handle_wx(request):
    global IMG_MEDIA_ID
    # GET 方式用于微信的公共平台绑定验证
    if request.method == "GET":
        signature = request.GET.get("signature", "")
        timestamp = request.GET.get("timestamp", "")
        nonce = request.GET.get("nonce", "")
        echo_str = request.GET.get("echostr", "")
        try:
            check_signature(TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            echo_str = "error"
        response = HttpResponse(echo_str)
        return response
    if request.method == "POST":

        msg = parse_message(request.body)
        if msg.type == "text":
            reply = do_text_reply(msg)
        elif msg.type == 'image':
            IMG_MEDIA_ID = msg.media_id
            reply = create_reply("图片已收到" + msg.media_id, msg)
        elif msg.type == 'event':
            if msg.key == "func_detail":
                content = "------功能详情------\n回复关键字即可 如:\n" \
                          "[天气:郑州]\n[翻译:你好]\n[猜谜语]\n[音乐:天空之城]\n说句语音试一试O(∩_∩)O~~"
                reply = create_reply(content, message=msg)
            elif msg.key == "daily_image":
                reply = ImageReply(message=msg)
                reply.media_id = IMG_MEDIA_ID
            elif msg.key == "daily_music":
                reply = MusicReply(message=msg)
                reply.title = "偏偏喜欢你"
                reply.description = "陈百强"
                reply.thumb_media_id = IMG_MEDIA_ID
                reply.music_url = "http://bd.kuwo.cn/yinyue/28409674"
                reply.hq_music_url = "http://bd.kuwo.cn/yinyue/28409674"
            elif msg.key == "daily_push":
                reply = ArticlesReply(message=msg)
                for data in get_news():
                    reply.add_article({
                        'title': data["title"],
                        'description': data["source"],
                        'image': data["imgsrc"],
                        'url': data["url"]
                    })
            else:
                reply = do_event_reply(msg)
        elif msg.type == 'voice':
            result = speech_tran(msg)
            reply = create_reply(result, msg)
        else:
            reply = create_reply('你发送的消息已经收到', msg)
        response = HttpResponse(reply.render(),
                                content_type="application/html")
        return response
Example #5
0
def weixinInterface():
    if check_signature:
        data = request.data
        msg = parse_message(data)
        path = get_qcode(request.args['openid'])
        md_id = get_media_id(CLIENT, path)
        reply = ImageReply(media_id=md_id, message=msg)
        xml = reply.render()
        return xml
    else:
        return 'signature error'
Example #6
0
 def subscribeReply(self, msg, content=None, media_id=None):
     if content == None and media_id == None:
         raise Exception("no info be send!")
     elif content != None and media_id != None:
         raise Exception("content and media_id args only one != None")
     elif content != None:
         reply = create_reply(content, message=msg)
         xml = reply.render()
         return xml
     else:
         reply = ImageReply(message=msg)
         reply.media_id = media_id
         xml = reply.render()
         return xml
Example #7
0
def photo_score(msg, accessToken=None):
    resp_xml = chk_msg_types(msg, ['image'], '该功能只能处理图像数据。')
    if resp_xml:
        return resp_xml

    try:
        # 通过公众号接收到的图片信息下载图片到本地
        path = download(msg.image, msg.source)
        # 调用腾讯ai人脸识别接口接口
        r = wechat.face.access_api(path)
        if r == 'success':
            # 上传图片,得到 media_id
            media_id = upload('image', path, accessToken)
            reply = ImageReply(media_id=media_id, message=msg)
        else:
            reply = TextReply(content='人脸检测失败,请上传1M以下人脸清晰的照片', message=msg)
        resp_xml = reply.render()
    except Exception as e:
        resp_xml = get_error_reply(msg)

    return resp_xml
def image_reply(msg):
    reply = ImageReply(message=msg)
    id = random.randint(0, 7)

    if id == 0:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpiIxl77Ii501riZPHS7NdOY"
    elif id == 1:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpm4_XftO2zaJxsCO9KHOpZE"
    elif id == 2:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVphls0UeRqcAHael9a_KTrM4"
    elif id == 3:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpteYUBCK3Evkc3YYnQcDf3E"
    elif id == 4:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVppGMwQTVoaNRb5nQMIPYMmE"
    elif id == 5:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpp21QXwC-r14DremI0PdZjQ"
    elif id == 6:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpgWdPB8IBUo57Avk3Med_4k"
    else:
        k = msg.media_id
        reply.media_id = "%s" % k

    return reply.render()
Example #9
0
 def post(self, request):
     msg = parse_message(request.body)
     print(msg)
     if msg.type == 'text':
         reply = create_reply('这是条文字消息', message=msg)
     elif msg.type == 'image':
         reply = create_reply('这是条图片消息', message=msg)
     elif msg.type == 'voice':
         reply = create_reply('这是条语音消息', message=msg)
     elif msg.type == 'event':
         openid = request.GET.get('openid', None)
         print(openid)
         if msg.event == 'subscribe':
             reply = create_reply('感谢你的关注', message=msg)
             inf = client.user.get('o-Njg0grnFp0LNHidvhKNek6_H88')
             # print(user["nickname"])
             Users.objects.create(nickname=inf["nickname"],
                                  headimgurl=inf["headimgurl"],
                                  sex=inf["sex"],
                                  country=inf["country"],
                                  province=inf["province"],
                                  city=inf["city"],
                                  subscribe_time=inf["subscribe_time"],
                                  openid=inf["openid"])
         elif msg.event == 'unsubscribe':
             Users.objects.get(openid=openid).delete()
         elif msg.event == 'click':
             reply = ImageReply(message=msg)
             media_id = '9kT9-alo_ph3g2I45zACW5X59Dqxbf45k-0Z89XXOSta_H_gqfnAhJvG557pqOEM'
             reply.media_id = media_id
             Menu_click_count.picture_click_count += 1
         elif msg.event == 'view':
             Menu_click_count.url_click_count += 1
     else:
         reply = create_reply('这是条其他类型消息', message=msg)
     return HttpResponse(reply.render(), content_type=" ")
Example #10
0
def wechat_check(request):
    if request.method == 'GET':
        # 校验
        signature = request.GET.get('signature', '')
        timestamp = request.GET.get('timestamp', '')
        nonce = request.GET.get('nonce', '')
        echo_str = request.GET.get('echostr', '')
        try:
            check_signature(TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            return HttpResponse(status=403)
        return HttpResponse(echo_str)
    else:
        # 自动回复文本
        try:
            msg = parse_message(request.body)
            if isinstance(msg, BaseEvent):
                if msg.event == 'subscribe':
                    reply = create_reply(article_leizhu, message=msg)
                elif msg.event == 'click':
                    if msg.key == 'inform_articles':
                        reply = create_reply(inform_articles, msg)
                    elif msg.key == "service":
                        reply = ImageReply(message=msg, media_id='nvnR6egwWE1WzzIcMXo403dxqfcx5fV_GRhQnRH8Wsw')
                # 添加扫描二维码关注事件
                elif msg.event == "scan":
                    reply = create_reply(article_leizhu, message=msg)
                    try:
                        xml_data = str(request.body.decode())
                        dict = xmltodict.parse(xml_data)
                        user = dict["xml"]["FromUserName"]
                        print("扫码用户的openid:{}".format(user))
                        # user_li = re.findall(r"qrscene_(\d+)", user)
                        # user_id = int("".join(user_li)) + 100000
                        # openid = dict["xml"]["FromUserName"]
                    except Exception as e:
                        print(e)
                elif msg.event == "subscribe_scan":
                    reply = create_reply(article_leizhu, message=msg)
                    xml_data = str(request.body.decode())
                    print(xml_data, "454545454")
                    dict = xmltodict.parse(xml_data)
                    user = dict["xml"]["EventKey"]
                    user_li = re.findall(r"qrscene_(\d+)", user)
                    user_id = int("".join(user_li)) + 100000
                    openid = dict["xml"]["FromUserName"]
                    print("扫码用户的openid:{},id:{}".format(openid, user_id))
                    userinfo = UserInfo.objects.check_user(openid)
                    create_time = timezone.now()
                    # if create_time.strftime("%Y-%m-%d") == "2018-04-1":
                    #     fools_day = 1
                    # else:
                    #     fools_day = 0
                    # 如果该用户关系已经存在,那么就不创建该用户关系表
                    if len(UserInvite.objects.filter(invite=openid)) > 0:
                        print("用户关系已经存在,则什么也不做")
                        pass
                    else:
                        print("用户关系不存在,则创建用户关系表")
                        # 创建用户关系
                        UserInvite.objects.create(user_id=user_id, invite=openid, create_time=create_time,
                                                  fools_day=0)
                        # 创建用户邀请数量表
                        Invitenum.objects.undate_num(user_id=user_id)
                        # 增加用户赚取收益比例
                        Invitenum.objects.earning(user_id=user_id)
                else:
                    reply = create_reply('请重试', msg)
            elif isinstance(msg, BaseMessage):
                if msg.type == 'text':
                    content = msg.content
                    if "说明" in content:
                        reply = create_reply(inform_articles, message=msg)
                    elif "客服" in content:
                        reply = ImageReply(message=msg, media_id='nvnR6egwWE1WzzIcMXo403dxqfcx5fV_GRhQnRH8Wsw')
                    elif "2018" in content:
                        reply = create_reply(article_2018, message=msg)
                    elif "提现" in content:
                        reply = create_reply(withdraw, message=msg)
                    elif "测试" in content:
                        reply = create_reply(menu, message=msg)
                    elif "999" in content:
                        reply = ImageReply(message=msg, media_id='nvnR6egwWE1WzzIcMXo403dxqfcx5fV_GRhQnRH8Wsw')
                    else:
                        reply = create_reply(menu, message=msg)
                else:
                    reply = create_reply('', message=msg)
            else:
                reply = create_reply('Sorry, can not handle this for now', msg)
            return HttpResponse(reply.render(), content_type="application/xml")
        except (InvalidSignatureException, InvalidAppIdException):
            return HttpResponse(status=403)
Example #11
0
 def POST(self):
     try:
         xml = web.data()
         msg = parse_message(xml)
         if msg.type == 'text':
             content = msg.content
             if content.startswith(('表情包:', '表情包:')):
                 words = ''.join(content.replace(':', ':').split(':')[1:])
                 wechat_client = WeChatClient(
                     appid='wx19a2591b2a719add',
                     secret='c46fa65dbc2803b90431fbf9c803cbd4',
                 )
                 access_token = wechat_client.access_token
                 json_data = pics.upload_pic(pics.get_random_pic(words), access_token)
                 # print(json_data)
                 if 'errcode' not in json_data:
                     media_id = json_data['media_id']
                     reply = ImageReply(message=msg)
                     reply.media_id = media_id
                     # print(web.url() + ' get_pic. words: ' + words + ' return: ' + str(json_data))
                     logger.info(web.url() + ' get_pic. words: ' + words + ' return: ' + str(json_data))
                 else:
                     reply = TextReply(message=msg)
                     reply.content = json_data['link']
                     logger.warning(web.url() + ' get_pic faild,return link.  words:' + words + ' return: ' + json_data['link'])
             elif content.startswith(('影视:', '影视:')):
                 words = ''.join(content.replace(':', ':').split(':')[1:])
                 if words == '':
                     string = '没有输入要搜索的名字!'
                     logger.info(web.url() + ' get_movie without words')
                 else:
                     data = search(words)
                     data1 = data[0]
                     data2 = data[1]
                     if len(data1) != 0:
                         string = ''
                         if len(data1) <= 12:
                             for each in data1:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                         else:
                             for each in data1[:12]:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                     elif len(data2) != 0:
                         string = ''
                         if len(data2) <= 12:
                             for each in data2:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                         else:
                             for each in data2[:12]:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                     else:
                         string = '竟然没有搜索到!!!\n请检查名称输入的是否正确,请尽量使用中文哦'
                     # print(web.url() + ' get_pic. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                     logger.info(web.url() + ' get_movie. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                 reply = TextReply(message=msg)
                 reply.content = string
             elif content.startswith(('在线:', '在线:')):
                 words = ''.join(content.replace(':', ':').split(':')[1:])
                 if words == '':
                     string = '没有输入要搜索的名字!'
                     logger.info(web.url() + ' see_movie without words')
                 else:
                     data = get_link(words)
                     if data:
                         string = data
                     else:
                         string = '竟然没有搜索到!!!\n请检查名称输入的是否正确,请试试英文名哦'
                     # print(web.url() + ' see_pic. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                     logger.info(web.url() + ' see_movie. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                 reply = TextReply(message=msg)
                 reply.content = string
             else:
                 reply = TextReply(message=msg)
                 response = get_response(content)
                 logger.info(web.url() + ' turing. words: ' + content + ' response: ' + response)
                 reply.content = response
         elif msg.type == 'event' and msg.event:
             mscontent = msg.event
             if mscontent == "subscribe":
                 string = '终于等到你!欢迎关注Snoopy同学~\n' \
                          '输入"表情包:xxx"获取自定义文字的表情\n' \
                          '输入"影视:xxx"获取电影的网盘链接\n' \
                          '输入"在线:xxx"获取在线观看视频的链接,需要复制到浏览器使用哦~'
                 reply = TextReply(message=msg)
                 reply.content = string
             elif mscontent == "unsubscribe":
                 string = '有什么不足之处还请谅解,我会慢慢改进,欢迎您以后再来'
                 reply = TextReply(message=msg)
                 reply.content = string
         # 转换成 XML
         reply_xml = reply.render()
         return reply_xml
     except Exception as e:
         logger.error(e)
         # print(e)
         return "success"
Example #12
0
def wechat_back(event):
    event = re.sub(r'\<xml\>', '<xml>\n', event)
    xml = event
    msg = parse_message(xml)
    if msg.type == 'text':
        question = turning(msg.content)
        s = {}
        ss = {}
        lib = {}
        lib_qt = {}
        lib_qm = {}
        s_max = ''
        for i in range(0, len(ques)):
            lib_qt[ques[i]] = int(token[i])
        for i in range(0, len(ques)):
            lib_qm[ques[i]] = media_id[i]
        for i in range(0, len(ques)):
            lib[ques[i]] = answ[i]
        text = [x.strip() for x in ques if len(x) > 2]
        if question in lib:
            s_max = question
            answer = lib[question]
        else:
            for i in text:
                similarity = sentence_similarity(i, question, tfidf_dict)
                s[i] = similarity
            s_max = max(s, key=s.get)
        #print(s_max)
        for i in range(0, 10):
            if jaccard(s_max, question) < 0.20:
                del s[s_max]
                s_max = max(s, key=s.get)
            else:
                try:
                    ss[s_max] = s[s_max] + jaccard(s_max, question)
                except:
                    ss[s_max] = 1.5
        #print(ss)
        try:
            s_max = max(ss, key=ss.get)
        except:
            s_max = '   '
        #print(s_max)
        '''try:
            print(lib_qt[s_max])
        except:
            lib_qt[s_max] = 9
            print(ss)'''

        if lib_qt[s_max] == 1:
            answer = lib_qm[s_max]
            reply = ImageReply(content='AAAAAAAAA',
                               media_id=answer,
                               message=msg)
            xml = reply.render()

        elif lib_qt[s_max] == 2:
            answer = lib[s_max]
            img = lib_qm[s_max].split(' ')[0]
            url = lib_qm[s_max].split(' ')[1]
            reply = ArticlesReply(message=msg)
            reply.add_article({
                'title': question,
                'description': answer,
                'image': img,
                'url': url
            })
            xml = reply.render()

        else:
            try:
                answer = lib[s_max]
            except:
                answer = '暂无此问题'
                answer = answer.encode('utf-8')
                #print(answer)
            reply = TextReply(content=answer, message=msg)
            xml = reply.render()
        print('问题:' + question)
        print('匹配结果:' + s_max)
        print('答案:', answer)
        resp = apiReply(reply, txt=True, content_type="application/xml")
        #resp = json.dumps(reply,encoding = 'utf-8')
        return resp
Example #13
0
def wechat():
    signature = request.args.get("signature", "")
    timestamp = request.args.get("timestamp", "")
    nonce = request.args.get("nonce", "")
    encrypt_type = request.args.get("encrypt_type", "raw")
    msg_signature = request.args.get("msg_signature", "")
    try:
        check_signature(TOKEN, signature, timestamp, nonce)
    except InvalidSignatureException:
        abort(403)
    if request.method == "GET":
        echo_str = request.args.get("echostr", "")
        return echo_str
    # POST request
    if encrypt_type == "raw":
        # plaintext mode
        date = (datetime.datetime.now() +
                datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
        msg = parse_message(request.data)
        # if msg.type == "text":
        # reply = create_reply(msg.content, msg)
        code = msg.content
        if code[0] == '6':
            code += ".XSHG"
            strPePercent = JqDataSDKOperate.get_stock_pe_and_pb(
                code, date, 2500)
            strReply = code + "; " + strPePercent
            reply = create_reply(strReply, msg)
            return reply.render()
        elif code[0] == '0' or code[0] == '3':
            code += ".XSHE"
            strPePercent = JqDataSDKOperate.get_stock_pe_and_pb(
                code, date, 2500)
            strReply = code + "; " + strPePercent
            reply = create_reply(strReply, msg)
            return reply.render()
        # elif code == '行业':
        elif code == '行业':
            reply = ImageReply(message=msg)
            reply.media_id = get_media_id(client, msg)
            return reply.render()
        # else:
        #     reply = create_reply("Sorry, can not handle this for now", msg)
        #     return reply.render()
    else:
        # encryption mode
        from wechatpy.crypto import WeChatCrypto

        crypto = WeChatCrypto(TOKEN, AES_KEY, APPID)
        try:
            msg = crypto.decrypt_message(request.data, msg_signature,
                                         timestamp, nonce)
        except (InvalidSignatureException, InvalidAppIdException):
            abort(403)
        else:
            msg = parse_message(msg)
            if msg.type == "text":
                reply = create_reply(msg.content, msg)
            else:
                reply = create_reply("Sorry, can not handle this for now", msg)
            return crypto.encrypt_message(reply.render(), nonce, timestamp)
Example #14
0
def imgreply(msg,id):
    reply = ImageReply(message=msg)
    reply.media_id = id
    xml = reply.render()
    return xml
Example #15
0
def wechat():
    """验证服务器地址的有效性"""
    # 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
    # signature:微信加密, signature结合了开发者填写的token参数和请求中的timestamp参数 nonce参数
    # timestamp:时间戳(chuo这是拼音)
    # nonce: 随机数
    # echostr: 随机字符串
    # 接收微信服务器发送参数
    signature = request.args.get("signature")
    timestamp = request.args.get("timestamp")
    nonce = request.args.get("nonce")

    # 校验参数
    # 校验流程:
    # 将token、timestamp、nonce三个参数进行字典序排序
    # 将三个参数字符串拼接成一个字符串进行sha1加密
    # 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    if not all([signature, timestamp, nonce]):
        # 抛出400错误
        abort(400)

    # 按照微信的流程计算签名
    li = [WECHAT_TOKEN, timestamp, nonce]
    # 排序
    li.sort()
    # 拼接字符串
    tmp_str = "".join(li)
    tmp_str = tmp_str.encode('utf-8')

    # 进行sha1加密, 得到正确的签名值
    sign = hashlib.sha1(tmp_str).hexdigest()

    # 将自己计算的签名值, 与请求的签名参数进行对比, 如果相同, 则证明请求来自微信
    if signature != sign:
        # 代表请求不是来自微信
        # 弹出报错信息, 身份有问题
        abort(403)
    else:
        # 表示是微信发送的请求
        if request.method == "GET":
            # 表示第一次接入微信服务器的验证
            echostr = request.args.get("echostr")
            # 校验echostr
            if not echostr:
                abort(400)
            return echostr

        elif request.method == "POST":
            # 表示微信服务器转发消息过来
            # 拿去xml的请求数据
            xml_str = request.data

            # 当xml_str为空时
            if not xml_str:
                abort(400)

            # 对xml字符串进行解析成字典
            xml_dict = xmltodict.parse(xml_str)

            xml_dict = xml_dict.get("xml")
            # print(xml_dict)
            # MsgType是消息类型 这里是提取消息类型
            msg_type = xml_dict.get("MsgType")

            if msg_type == "text":
                # 表示发送文本消息
                # 够造返回值, 经由微信服务器回复给用户的消息内容
                # 回复消息
                # ToUsername: (必须传) 接收方账号(收到的OpenID)
                # FromUserName: (必须传) 开发者微信号
                # CreateTime: (必须传) 消息创建时间(整形)
                # MsgType: (必须传) 消息类型
                # Content: (必须传) 回复消息的内容(换行:在Content中能够换行, 微信客户端就支持换行显示)

                # 我们自己的消息处理逻辑
                user_name = xml_dict.get("FromUserName")
                text = xml_dict.get("Content")
                print("text:", text)

                reply = response(user_name, text)

                resp_dict = {
                    "xml": {
                        "ToUserName": xml_dict.get("FromUserName"),
                        "FromUserName": xml_dict.get("ToUserName"),
                        "CreateTime": int(time.time()),
                        "MsgType": "text",
                        "Content": reply
                    }
                }
            else:
                if msg_type == 'image':
                    msg = parse_message(xml_str)
                    media_id = '6QMxv1WgvAmt_9YJMA9zgmG2QUnr-8M2xPErDHCllWrbvmM_YASURaPS0rTDewta'
                    reply = ImageReply(media_id=media_id, message=msg)
                    xml = reply.render()
                    return xml

                resp_dict = {
                    "xml": {
                        "ToUserName": xml_dict.get("FromUserName"),
                        "FromUserName": xml_dict.get("ToUserName"),
                        "CreateTime": int(time.time()),
                        "MsgType": "text",
                        "Content": "对不起,不能识别您发的内容!"
                    }
                }
            # 将字典转换为xml字符串
            resp_xml_str = xmltodict.unparse(resp_dict)
            # 返回消息数据给微信服务器
            return resp_xml_str