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)
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')