ITPub博客

首页 > 应用开发 > IT综合 > PHP、Java 还是 Python?谁是微信公众号开发的首选语言

PHP、Java 还是 Python?谁是微信公众号开发的首选语言

IT综合 作者:misuland 时间:2018-11-22 13:31:07 0 删除 编辑

 米鼠资讯:现在很多人都在做微信公众号开发,但大多数人都是按照腾讯公司给出的文档在用 PHP 或者 Java 做开发,那么用 Python 如何做?

   1.png

  ▌微信公众号的准备

  

  1. 注册

  

  访问地址:https://mp.weixin.qq.com/,按照提示注册即可。 

  

  注意:本文样例使用个人公众号,由于个人公众号没有接口权限,自定义菜单无法进行开发,同学们不要注册错! 

   2.png

  2. 配置

  

  需要准备好自己的服务器地址,可以使用腾讯云阿里云京东云等等皆可,没有域名用 IP 也可以。 

  

  在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token 和 EncodingAESKey,其中 URL 是开发者用来接收微信消息和事件的接口 URL。Token 可由开发者可以任意填写,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。EncodingAESKey 由开发者手动填写或随机生成,将用作消息体加解密密钥。 

  

  按照要求对开发基本信息配置,如下:

   3.png

  3. 连接

  

  服务器配置提交后,微信服务器发送 GET 请求到填写的服务器地址 URL 上,GET 请求携带参数包括 signature、timestamp、nonce、echostr,服务端程序通过检验 signature 对请求进行校验(下面有校验方式)。

  

  若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容给微信服务器确认后接入生效。加密/校验流程如下,下文中有代码具体实现: 

  


  

  将 token、timestamp、nonce 三个参数进行字典序排序;

  

 

  

  将三个参数字符串拼接成一个字符串进行 sha1 加密

  

  开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信。

  


  

  ▌基于 Django 开发微信公众号后台

  

  1.准备工作

   新建 django project,项目名称为 weixin:

  

        django-admin.py startproject weixin


  新建 app,进入项目目录下,cd weixin 然后执行下面的命令:

  

        python manage.py startapp weixin


  或者如下命令:

  

        django-admin.py startapp weixin


  修改 settings.py 加入刚才创建的 weixin 应用:

  

INSTALLED_APPS = (

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'weixin',

)


  修改项目同名 app 内的 urls.py,添加新的 weixin 的路由解析跳转:

  

urlpatterns = [

    url(r'^admin/', include(admin.site.urls)),

    url(r'^weixin/', include('weixin.urls',namespace="weixin")),

   ]


  2.编写 weixin 应用的 urls.py

  

app_name = 'weixin'

urlpatterns = [

    url(r'^admin/', include(admin.site.urls)),

    url(r'^$', views.index, name='weixin_index'),

    ]


  修改 app weixin 内的 urls.py,添加针对视图函数的解析,默认访问指向视图函数的 weixin_index 方法。

  

  3.编写 weinxin 应用的 views.py

  

  GET 方法做校验,POST 方法传 xml 数据,解析和拼凑 xml 数据实现自动回复功能:

  

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

# Create your views here.

wechat_instance = WechatBasic(

    token='您设置的token',

    appid='您的公众号id',

    appsecret='您的公众号的秘钥'

)

@csrf_exempt

def index(request):

    if request.method == 'GET':

        # 检验合法性

        # 从 request 中提取基本信息 (signature, timestamp, nonce, xml)

        signature = request.GET.get('signature')

        timestamp = request.GET.get('timestamp')

        nonce = request.GET.get('nonce')

        if not wechat_instance.check_signature(

                signature=signature, timestamp=timestamp, nonce=nonce):

            return HttpResponseBadRequest('Verify Failed')

        return HttpResponse(

            request.GET.get('echostr', ''), content_type="text/plain")

    # 解析本次请求的 XML 数据

    else:

        try:

            print(request.body)

            wechat_instance.parse_data(data=request.body)

        except ParseError:

            return HttpResponseBadRequest('Invalid XML Data')

        # 获取解析好的微信请求信息

        message = wechat_instance.get_message()

        # 关注事件以及不匹配时的默认回复

        response = wechat_instance.response_text(

            content=(

                '感谢您的关注!\n回复【功能】两个字查看支持的功能,还可以回复任意内容开始聊天'

            ))

        if isinstance(message, TextMessage):

            # 当前会话内容

            content = message.content.strip()

            if content == '功能':

                reply_text = (

                    '目前支持的功能:\n1. 关键词后面加上【教程】两个字可以搜索教程,'

                    '比如回复 "Django 后台教程"\n'

                    '2.回复任意词语,查天气,陪聊天,讲故事,无所不能!\n'

                    '还有更多功能正在开发中哦 ^_^\n'

                )

            response = wechat_instance.response_text(content=reply_text)

        print(response)

        return HttpResponse(response, content_type="application/xml")


  ▌配置公网域名映射后,运行程序进行效果展示

   7.png

  发现不能正常使用,提示“该公众号提供的服务出现故障,请稍后再试”。

  

  于是百度里各种找资料,又是查看微信公众号开发文档,各种百度和 Google,都没有解决。微信公众平台关闭启用,重置密钥。仔细核对填写,都没有问题。没有填写错误。

  

  我开启了开发-运维中心-接口报警-告警规则全部调到“1次/5分钟”,偶尔会收到这样的报错:302 网页重定向出错。

   8.png

  最后,我就查到微信公众平台-开发-基本配置-服务器配置-服务器地址(url),这里的 http:// 头改成 https://。

  

9.png


  再试自动回复真的可以了。

   10.png

  这里小编给大家推荐一个开发在线交易平台——米鼠网,米鼠网是一个创新的复杂性项目在线交易平台,其服务的种类包括了政府采购、软件开发,定制开发、人才外包、等。项目进度可远程监控进度确保项目质量米鼠网对于买家而言,提供了强大的供应商资源,并大幅降低了成本;对乙方而言,则提供了无限的商业机会,双方互惠互利,并有保证金制度约束双方交易流程

文章固定图片1.jpg

文章固定图片2.jpg


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31555134/viewspace-2221132/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 多线程之join方法
请登录后发表评论 登录
全部评论
米鼠网是一个创新的软件开发在线交易平台。它能帮助软件买家更好的节省采购成本,监控项目进度确保项目质量;同时它还能帮助软件卖家节省运营成本,解决项目来源等问题。

注册时间:2018-09-17

  • 博文量
    42
  • 访问量
    27453