Exemple #1
0
    def mark_tag(self, request, pk=None):
        result = {'result': 'FAIL', 'message': '', 'code': 20000}
        instance = self.get_object()

        try:
            myapp = CorpApp.objects.get(corp=instance.member.corp,
                                        agent_id=AGENT_ID)
        except CorpApp.DoesNotExist:
            result['message'] = '应用获取失败'
            return Response(result)

        tags = request.data.get('tags', [])
        isadd = request.data.get('isadd', '0')

        wechat = WorkWechat(myapp)
        if isadd == '0':
            status, res = wechat.mark_tag(instance.member.userid,
                                          instance.customer.external_userid,
                                          remove_tag=tags)
        else:
            status, res = wechat.mark_tag(instance.member.userid,
                                          instance.customer.external_userid,
                                          add_tag=tags)

        if not status:
            result['message'] = res.get('errmsg')
            return Response(result)

        status, res = wechat.get_customer_detail(
            instance.customer.external_userid)
        if not status:
            result['message'] = res.get('errmsg')
            return Response(result)

        follow_user_li = res.get('follow_user')
        for f in follow_user_li:
            if f.get('userid') == instance.member.userid:
                instance.tags = json.dumps(f.get('tags'))
                instance.save()
                result['result'] = 'OK'
                return Response(result)
Exemple #2
0
    def post(self, request):
        sToken = "mLOLPDZdSVqAMCxFEFu7DRBeU7HK"
        sEncodingAESKey = "GrVwDhSRfY4k2tjfVwcmjd3aqcAawbNsHqVYk3MQeNM"
        sCorpID = "wwcfaf880742304045"
        corp = 1

        wechat = None
        try:
            myapp = CorpApp.objects.get(corp=corp, agent_id='crm')
            wechat = WorkWechat(myapp)
        except CorpApp.DoesNotExist:
            myLogger.error(
                'Corp:[{0}], Agent:[crm] does NOT exist'.format(corp))
        wxcpt = WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID)

        params = request.GET
        sReqMsgSig = params.get('msg_signature')
        sReqTimeStamp = params.get('timestamp')
        sReqNonce = params.get('nonce')
        myLogger.debug('{0}, {1}, {2}'.format(sReqMsgSig, sReqTimeStamp,
                                              sReqNonce))
        myLogger.debug('body:{0}'.format(request.body))
        sReqData = request.body
        ret, sMsg = wxcpt.DecryptMsg(sReqData, sReqMsgSig, sReqTimeStamp,
                                     sReqNonce)
        if ret:
            myLogger.error("ERR: DecryptMsg ret: {0}".format(ret))
            return HttpResponse('ERR: VerifyURL ret: {0}'.format(ret))

        myLogger.debug(sMsg)
        # 解密成功,sMsg即为xml格式的明文
        # TODO: 对明文的处理
        # For example:
        xml_tree = ET.fromstring(sMsg)
        event = xml_tree.find('Event').text
        changeType = xml_tree.find('ChangeType').text
        myLogger.debug('Event: [{0}], type:[{1}]'.format(event, changeType))

        if event == 'change_external_contact':
            if xml_tree.find('ChangeType').text == 'add_external_contact':
                userid = xml_tree.find('UserID').text
                externaluserid = xml_tree.find('ExternalUserID').text

                state = xml_tree.find('State').text
                welcomecode = xml_tree.find('WelcomeCode').text
                myLogger.debug('{0}, {1}, {2}, {3}'.format(
                    userid, externaluserid, state, welcomecode))

                contactme = ContactMe.objects.filter(state=state)
                if contactme.count() == 0:
                    return HttpResponse('OK')

                # Set tags
                status, res = wechat.mark_tag(userid,
                                              externaluserid,
                                              add_tag=contactme[0].tags)
                if not status:
                    myLogger.error(res.get('errmsg'))

                # Send Welcome
                welcome_msg = contactme[0].welcome_code
                welcome_msg['welcome_code'] = welcomecode
                myLogger.debug(welcome_msg)
                status, res = wechat.send_welcome_msg(welcome_msg)
                if not status:
                    myLogger.error(res.get('errmsg'))

        return HttpResponse('OK')