»ùÓÚDjangoµÄ΢ÐŹ«Öںſª·¢Ö®ÊµÏÖÏûÏ¢µÄ½ÓÊÕÓë·¢ËÍ
ÔÚÕýʽ¿ªÊ¼Ö®Ç°,ÐèÒª×öһЩ׼±¸:
a: °²×°ºÃwechat_sdk;
b: ³É¹¦Í¨¹ýÁË΢ÐŹ«ÖںŵĿª·¢ÕßÈÏÖ¤;
c: н¨Ò»¸öÓ¦ÓÃ(²»ÊDZØÐëµÄ), ÎÒн¨ÁËÒ»¸ödictÓ¦ÓÃ.
ÔÚÕýʽ¶¯ÊÖ֮ǰ,Ê×ÏÈÎÒҪ˵һÏÂҪעÒâµÄÊÂ(ÎҲȹýµÄ¿Ó):
a: ΢ÐŹ«ÖںŷþÎñÆ÷ÔÚÊÕµ½Óû§ÔÚ¹«ÖÚºÅÊäÈëµÄÐÅÏ¢Ö®ºó, Ö»»áת·¢µ½Ò»¸öurlÉÏ(¾ÍÊÇÄ㿪·¢ÕßÈÏ֤ʱËùÌîµÄÄǸöurl,ËùÒÔÖ»ÄÜͨ¹ýÕâ¸öurlÀ´½ÓÊÕÐÅÏ¢)
b: ¹«ÖÚºÅÊÕµ½Óû§µÄÐÅÏ¢Ö®ºó, ½«»á°ÑËü´ò°ü³É¹æ¶¨µÄxmlµÄģʽͨ¹ýÄã×¢²áµÄurl·¢Ë͵½ÄãµÄ·þÎñÆ÷ÉÏ, Äã·¢Ë͸øÓû§µÄÏûϢͬÑùÒª°ü×°³ÉͬÑù¸ñʽµÄxml²ÅÄܳɹ¦, ·ñÔò¹«Öںŷþ ÎñÆ÷Ò»Âɾܾø²¢ÔÚÓû§¶Ë·µ»Ø"¸Ã¹«ÖÚºÅÌṩµÄ·þÎñ³öÏÖ¹ÊÕÏ, ÇëÉÔºóÔÙÊÔ"µÄÌáʾ(ÐÒÔ˵ÄÊÇÔÚwechat_sdkÒѾÓдò°üÕâÖÖxmlµÄ·½·¨ÁË, Èç¹ûÄãÏëÁ˽â, Äã¿ÉÒÔ¿´¿´¹«ÖںŵĿª·¢Îĵµ)
c: ·µ»Ø¸øÓû§µÄÎÄ×ÖÒ»¶¨ÒªÓÃutf-8¸ñʽ
d: ÿ´Î·¢Ë͵ÄÏûÏ¢³¤¶È³¤¶È²»Äܳ¬¹ý2048×Ö½Ú, ÓÉÓÚ²ÉÓÃutf-8±àÂë, ËùÒÔÇëÁôÒâÿ¸öºº×Ö¶¼Ëã×÷3¸ö×Ö½Ú, ³¬³¤¾ÍÒª¼ÇµÃ½Ø¶Ï·¢Á½´ÎÁË
ÎÞÂÛÄãµÄ·þÎñÆ÷ÔÚµ÷ÊÔ¹ý³ÌÖгöÁËʲô´í, ÔÚÓû§¶Ë¶¼ÊÇÌáʾ"¸Ã¹«ÖÚºÅÌṩµÄ·þÎñ³öÏÖ¹ÊÕÏ, ÇëÉÔºóÔÙÊÔ"µÄÌáʾ, ËùÒÔÏëÖ»¿¿Ò»¸ö²âÊÔÕ˺ÅÀ´µ÷ÊÔÃ÷ÏÔÊǺܲ»¿¿Æ×µÄ. ÔÚ¹«Ö򼁮½Ì¨ÉÏÓÐÒ»¸öµ÷ÊÔ ¹¤¾ß, µ«ÊÇËûÒ²Ö»»á·µ»Ø·ÃÎʵĴíÎó´úÂë(200/500Ö®ÀàµÄ), ²¢Ã»Óиø³öÌáʾ, ͬÑùÒ²ÊǺܲ»¿¿Æ×, ÄÇôÎÒÃǸÃÔõôÑùÖªµÀÎҵķþÎñÆ÷¸ú΢ÐÅ·¢ËÍÏûÏ¢Õⲿ·Ö³öÁËʲôÎÊÌâÄØ?
ÎÒÔÚ¿ª·¢¹ý³ÌÖз¢ÏÖÁËÒ»¸ö¼¼ÇÉ, ÎÒÃǵķþÎñÆ÷´Ó¹«ÖںŷþÎñÆ÷½ÓÊÕÁËÒ»¸ö°üº¬xml¸ñʽµÄ°ü, ²¢ÇÒ¿ªÊ¼¶ÁÈ¡´¦Àí, ×îºó°Ñ´¦Àí½á¹û(·µ»Ø¸øÓû§µÄÎÄ×Ö)´ò°ü³Éxml°ü·¢Ë͸ø¹«ÖںŷþÎñÆ÷. ÔÀíÊÇÕâÑù×Ó. ÄÇôÎÒÃÇֻҪαÔìÒ»¸öÓû§·¢ËÍÐÅÏ¢µÄxml¶Î, ±£´æÔÚÒ»¸öxmlÎļþÀïÃæ, ÐèÒªÓõÄʱºò¾Í¶ÁÈ¡Õâ¸öxmlÎļþ, ÔÚºǫ́¿ØÖÆÌ¨µ÷ÊÔÊä³ö°ü×°ºÃµÄxml¾ÍÐÐÁË (µ±È»ÄãµÃÏÈÅųýÍøÂçÁ¬½ÓµÄÎÊÌâ,ÒòÎªÍøÂçÁ¬½Óµ¼ÖÂÄãµÄ·þÎñÆ÷½ÓÊÕ²»ÁË,»òÕß·¢ËͲ»Á˶¼ÓпÉÄÜ·¢ÉúµÄ). ÐèÒª·¢ËͲ»Í¬µÄÐÅÏ¢µÄʱºò, д¸öº¯ÊýÐÞ¸ÄxmlÀïÃæµÄÏûÏ¢²¿·Ö¾Í¿ÉÒÔÁË.
Ê×ÏÈ, ÎÒÃÇÏÖÔÚ¿ÉÒÔ°ÑÓÃÓÚͨ¹ý΢ÐŹ«ÖÚºÅÑéÖ¤µÄ´úÂë¸ø×¢Ê͵ôÁË(×îºÃ²»ÒªÉ¾³ý), È»ºóÎÒÃÇн¨Ò»¸öÏàͬÃû×ֵĺ¯Êý
ÏÂÃæÊÇÎÒµÄһЩ´úÂë(ΪÁ˸üÁ˽âÕû¸ö»ù±¾µÄ½á¹¹, ´úÂëÓÐËùɾ¼õ, Ö÷ÒªÊÇ»ñÈ¡Êý¾Ý²¿·Ö¸ú¸ñʽ×é×°²¿·Ö)
# ÕâÊǶδúÂëÊÇÎÒdictÓ¦Óõķµ»ØÎ¢ÐÅÏûÏ¢ÏìÓ¦²¿·Ö, Ö÷Òª¹¦ÄÜÊÇ»ñÈ¡ÏûÏ¢->×ö³ö¶ÔÓ¦·´Ó¦->·µ»ØÏûÏ¢ # ΪÁË·½±ã´ó¼ÒÀí½â, ÓÐÒ»²¿·ÖÎÒ½«»áÓÃ"(--tips--)"µÄ¸ñʽ½øÐмò»¯, Ö»±£Áô±ØÒª²¿·Ö # ´úÂ뿪ʼ # -*- coding: utf-8 -*- # Õâ¶ÎÊÇÐèÒªÌí¼ÓµÄ,Ö÷ÒªÊÇΪÁËÌí¼Ópath,±£Ö¤djangoµÄÕý³£ÔËÐÐ # (ÒòΪÎÒµÄdjangoÓõÄÊÇ×Ô¼ºµÄ°üÂï) import os import sys root = os.path.dirname(__file__) sys.path.insert(0, os.path.join(root, '../site-packages/Django-1.9.7-py2.7.egg')) os.environ['DJANGO_SETTINGS_MODULE'] = 'yuuuuchang.settings' from django.shortcuts import render from django.http.response import HttpResponse, HttpResponseBadRequest from django.views.decorators.csrf import csrf_exempt from wechat_sdk import WechatBasic from wechat_sdk.exceptions import ParseError from wechat_sdk.messages import TextMessage, VoiceMessage, ImageMessage, VideoMessage, LinkMessage, LocationMessage, \ EventMessage # (-- ¸öÈËÊý¾ÝµÄµ÷ÓÃ, ×Ô¶¨Òå·µ»Ø¸ñʽµÄ×é×°, ¸úÊý¾Ý¿â²éѯµÄÈë¿Ú --) # wechat_sdkÐèÒª³õʼ»¯Ò»Ð©Êý¾Ý wechat = WechatBasic(token=WECHAT_TOKEN, appid=WEIXIN_APPID, appsecret=WEIXIN_APPSECRET) # def wechat_message(request): # """ ΢ÐÅÈÏÖ¤ """ # if request.method == 'GET': # signature = request.GET.get('signature') # timestamp = request.GET.get('timestamp') # nonce = request.GET.get('nonce') # # if not wechat.check_signature(signature=signature, timestamp=timestamp, nonce=nonce): # return HttpResponseBadRequest('Verify Failed') # else: # return HttpResponse(request.GET.get('echostr', ''), content_type='text/plain') def wechat_message(request): """ ÏûÏ¢Èë¿Ú,Óû§Í¨¹ýÊäÈë¿ò·¢Ë͵ÄÏûÏ¢¶¼·¢µ½ÕâÀï´¦Àí """ # ½âÎö±¾´ÎÇëÇóµÄ XML Êý¾Ý try: wechat.parse_data(data=request.body) except ParseError: return HttpResponseBadRequest('ÎÞЧµÄxmlÊý¾Ý') # »ñÈ¡½âÎöºÃµÄ΢ÐÅÇëÇóÐÅÏ¢ message = wechat.get_message() # ¼ÙÈçÐÅÏ¢ÊÇÎı¾¸ñʽ # (TextMessageÊÇwechat_sdk¶¨ÒåµÄÒ»¸öÎı¾ÏûÏ¢Àà,ÏÂÃæ»¹ÓÐÓïÒôÀàÖ®ÀàµÄ,¾¹ýÉÏÃæ½âÎöµÄÏûÏ¢¶¼»á¹éÊôµ½ÕâЩÀàÖÐ) if isinstance(message, TextMessage): context = message.content.strip() # ¼ÙÉèÓû§ÊäÈëµÄÊÇʲôÎÄ×Ö,È»ºó×ö³öÏàÓ¦·´Ó¦ if context == '±Ê¼Ç' or context == 'blog': tips = 'ÕâÀïÉèÖÃÄãÐèÒª·¢¸øÓû§µÄÎÄ×Ö' elif context == 'ѧϰ' or context == 'study': tips = 'ÕâÀïÉèÖÃÄãÐèÒª·¢¸øÓû§µÄÎÄ×Ö' elif context == 'help': tips = 'ÕâÀïÉèÖÃÄãÐèÒª·¢¸øÓû§µÄÎÄ×Ö' else: # (-- »ñÈ¡µ½context, ²¢ÇÒÓÃÕâ¸öcontext×÷Ϊ²éѯÌõ¼þÔÚÊý¾Ý¿âÖвéÕÒÏàÓ¦½á¹û --) # (-- Èç¹ûÄãÒ²ÓдÓÊý¾Ý¿â»ñÈ¡Êý¾ÝÈ»ºó·µ»ØµÄ²Ù×÷,¼ÇµÃ°Ñ½á¹ûתutf-8¸ñʽ --) # ûÓвéѯ½á¹û if len(foundword) == 0: tips = 'δ²éѯµ½½á¹û,»»¸ö´ÊÊÔÊÔ?' # ²éѯµ½Ò»¸ö elif len(foundword) == 1: # (-- ½«½á¹ûÓÃ×Ô¶¨ÒåµÄ¸ñʽ´ò°üºÃ(Ö÷ÒªÊÇ»»ÐиúËõ½ø),È»ºó·Åµ½tipsÀïÃæ --) # ²éѯµ½¶à¸ö½á¹û else: # (-- ½«½á¹ûÓÃ×Ô¶¨ÒåµÄ¸ñʽ´ò°üºÃ(Ö÷ÒªÊÇ»»ÐиúËõ½ø),È»ºó·Åµ½tipsÀïÃæ --) # Èç¹ûÊÕµ½ÓïÒôÐÅÏ¢ if isinstance(message, VoiceMessage): tips = '´ò×ÖÀ²,ÓïÒôÏûÏ¢ÎÒÌý²»¶®~' # Èç¹ûÊÕµ½Í¼Æ¬ÐÅÏ¢(ÏÂÃæ¿´Ìáʾ¾ÍÖªµÀÁË,²»¶à˵) if isinstance(message, ImageMessage): tips = 'ËäÈ»Óе㿴²»¶®~µ«ÊÇÎÒϲ»¶ÕâÕÅͼ!' if isinstance(message, VideoMessage): tips = 'Õâ¸öÊÇ..ÊÓÆµÏûÏ¢?Ôõô´ò¿ª½Ì½ÌÎÒÂï~' if isinstance(message, LinkMessage): tips = '²»Òª·¢Ææ¹ÖµÄµØÖ·¸øÎÒ,ÎÒÕæµÄ¿´²»¶®ßÖ' if isinstance(message, LocationMessage): tips = 'Õâ¸ö...ÄıßÊDZ±?(·³ÕרÓÃãÂX±íÇé)' # ÕâÀïÊǶ¨ÒåÓû§¶Ô¹«ÖÚºÅËù×öµÄÊÂ(ʼþ,±ÈÈç¹Ø×¢,È¡Ïû¹Ø×¢µÈ) if isinstance(message, EventMessage): # ¹«Öںű»¹Ø×¢µÄʱºò if message.type == 'subscribe': tips = '''¸ÐлÄã¹Ø×¢"Ó㳦±Ê¼Ç"! balabala...''' else: (-- Ê¡ÂÔ --) # ×îºó, ¾¹ýÇ°ÃæÖî¶à´¦Àí, ÎÒÃǵóöÁËÒ»¸ötipsµÄÎı¾ÐÅÏ¢, Õâ¾ÍÊÇÎÒÃÇÏë¶ÔÓû§ËµµÄ, ÎÒÃÇÐèÒª´ò°ü, È»ºóÒԹ涨¸ñʽ·µ»Ø # Ê×ÏÈÊÇ´ò°ü, wechat_sdkÒѾ×öÁËÒ»¸ö·½·¨ÁË result = wechat.response_text(content=tips) # È»ºóÊÇ·µ»Ø,¼ÇµÃ¹æ¶¨ÊÇxml¸ñʽ·µ»Ø return HttpResponse(result, content_type='application/xml')
»ù±¾ÉϵÄÒªµã¾ÍÊÇÕâÑùÁË, ̫ƫԶµÄÎÒÒѾÌÞ³ýµô
Äã¿ÉÒÔÏÂÊÖÍæÍæ, ×£ÄãÍæµÃÓä¿ì~
ÒÔÉÏ!