图像

微信公众号第三方平台开发python教程 Part 9

github地址:cppfun@wechat-open-third-party-dev
这节之前你需要阅读之前的八节内容:
微信公众号第三方平台开发python教程 Part 1
微信公众号第三方平台开发python教程 Part 2
微信公众号第三方平台开发python教程 Part 3
微信公众号第三方平台开发python教程 Part 4
微信公众号第三方平台开发python教程 Part 5
微信公众号第三方平台开发python教程 Part 6
微信公众号第三方平台开发python教程 Part 7
微信公众号第三方平台开发python教程 Part 8
本节我们首先实现异步回应,用什么?当然是线程。

我们来看实现:

class WxThread (threading.Thread):
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name

    def run(self):
        logger.info(get_time()+'WxThread HttpResponse("")')
        return HttpResponse('')

这个代码很简单,我就不解释了。
我们看看如何调用:

        elif Content.startswith('QUERY_AUTH_CODE'):
            # send_bank_response()
            bank_resp = WxThread(1, "WxThread")
            bank_resp.start()
            query_auth_code = Content.split(':')[1]
            json_file = open('com_ticket.json')
            data = json.load(json_file)
            json_file.close()
            if data['ComponentVerifyTicket'] == '':
                return HttpResponse('no ComponentVerifyTicket')
            ComponentVerifyTicket = data['ComponentVerifyTicket']
            wxOpenSDK = WxOpenSDK(ticket=ComponentVerifyTicket)
            info = wxOpenSDK.get_authorization_info(authorization_code=query_auth_code)
            authorizer_access_token = info['authorizer_access_token']
            post_cont = query_auth_code + '_from_api'
            post_custom_text_msg(touser=FromUserName,
                                 content=post_cont,
                                 stoken=authorizer_access_token)

这样就可以解决异步回复问题。
下面是全网检测的整个代码:

def weixin_check(decrypt_xml, nonce):
    xml = etree.fromstring(decrypt_xml)
    ToUserName = xml.find('ToUserName').text
    FromUserName = xml.find('FromUserName').text
    MsgType = xml.find('MsgType').text
    if MsgType == 'event':
        event = xml.find("Event").text
        eval_cont = event+'from_callback'
        return send_text_cont(fromu=FromUserName, tou=ToUserName, cont=eval_cont, nonce=nonce)
    elif MsgType == 'text':
        Content = xml.find('Content').text
        logger.info('got the content %s' % Content)
        if Content == 'TESTCOMPONENT_MSG_TYPE_TEXT':
            reply_cont = Content+'_callback'
            return send_text_cont(FromUserName, tou=ToUserName, cont=reply_cont, nonce=nonce)
        elif Content.startswith('QUERY_AUTH_CODE'):
            # send_bank_response()
            bank_resp = WxThread(1, "WxThread")
            bank_resp.start()
            query_auth_code = Content.split(':')[1]
            json_file = open('com_ticket.json')
            data = json.load(json_file)
            json_file.close()
            if data['ComponentVerifyTicket'] == '':
                return HttpResponse('no ComponentVerifyTicket')
            ComponentVerifyTicket = data['ComponentVerifyTicket']
            wxOpenSDK = WxOpenSDK(ticket=ComponentVerifyTicket)
            info = wxOpenSDK.get_authorization_info(authorization_code=query_auth_code)
            authorizer_access_token = info['authorizer_access_token']
            post_cont = query_auth_code + '_from_api'
            post_custom_text_msg(touser=FromUserName,
                                 content=post_cont,
                                 stoken=authorizer_access_token)

好了,教程到这里就算结束了,我这几天会把整个代码非商业部分放到github上,方便大家浏览,互相学习。

发表评论