900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Django+阿里云服务器+微信开发公众号

Django+阿里云服务器+微信开发公众号

时间:2018-09-19 11:25:00

相关推荐

Django+阿里云服务器+微信开发公众号

Django端:

根目录下打开powershell新建项目:

django-admin startproject weixinproject

打开weixinproject文件夹下,powershell新建app:

python manage.py startapp weixin

用 tree /F命令看看文件结构:项目文件夹(weixinpro)和app文件夹(weixin)在同一目录下。

打开weixinproject文件夹,setting中installed_apps添加你刚才新建项目的名称。

并且注意把setting中的ALLOWED_HOSTS = []改成ALLOWED_HOSTS = ['*'],这样就允许外网加ip请求页面了。

好了,setting中先就这样。

先把Django跑起来吧

python manage.py runserver 0.0.0.0:80

接下来,我们先缓一缓,去看看微信连接第三方服务器是怎么说的。

WeChat端:

再申请完公众号后,打开微信公众平台https://mp./,下拉找到基本配置,看到服务器配置(未启用),点击修改配置。url填写http://服务器外网ip 即可,微信连接服务器只能用http80端口。

写自己的token,待会需要。随机生成一串EncodingAEKey,加密方式先选择明文吧。

现在写完个倘若点提交会弹出一个消息,token不匹配。

在这里讲一下原理,微信服务器用GET的方法请求你的服务器并发送一个timestamp,一个nonce,一个echostr,一个signature去你的服务器上,你需要在你的服务器后台代码中,加上你刚刚在微信中加的token,你的这串token将与timestamp和nonce进行排序,并连接成一个字符串。这串字符串的编码要转换成utf-8的格式后,进行hash的sha1加密,加密后返回的字符串要与发送到你的服务器上的signature对比,如果一模一样就返回echostr,那么配置就完成啦。接下来再去配置我们的Django。

Django端:

原理是什么样的呢,开启后台之后呢,项目内的urls.py要先发挥作用,添加路由,所以我们需要改一个urls.py,增加一个urls.py。

请把你的项目文件夹下(startproject命令后产生的文件夹)的urls.py改为

"""weixinpro URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:/en/2.0/topics/http/urls/Examples:Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home')Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import url, includeurlpatterns = [path('admin/', admin.site.urls),path(r'',include("weixin.urls")),]

我在原来的基础上增加了 from django.conf.urls import url,include

目的是用include函数。include等于是把weixin app文件夹内的urls.py所有的url打包进来。因为一个app内不止有一个页面,一个事件,这样做是防止app多了之后乱起来。虽然现在页面少,但这样做是个好习惯。对的,这个时候weixin文件夹还没有urls.py,我复制这个urls.py过去,放在weixin文件夹内。

因为与微信连接类似前后端分离,所以不需要建立templates文件夹放网页。我把与该urls.py在同一个文件夹下的views.py import进来,因为要用里面的函数。r''代表我能直接用 http://外网ip 访问到。必须from . import views意思就是引用该文件夹中的views,现在代码环境越来越严苛了,import views都是错的,因为它的名称与一个模块冲突。path中的第二个参数是访问http://外网ip 时默认执行的函数,即views里面的wx_main函数。

from django.contrib import adminfrom django.urls import pathfrom . import viewsurlpatterns = [path(r'',views.wx_main),]

下面展示我的views.py函数。

from django.shortcuts import renderfrom django.http import HttpResponseimport jsonimport hashlibdef wx_main(request):if request.method=="GET":#获取微信服务器上传来的几个参数signature=str(request.GET.get("signature",None))timestamp=str(request.GET.get("timestamp",None))nonce = str(request.GET.get('nonce', None))echostr = str(request.GET.get('echostr', None))token="wodetoken112233"#将要排序加密的参数放在一个数组中hashlist = [token, timestamp, nonce]hashlist.sort()hashstr=''#连接for i in hashlist:hashstr+=i#加密 sha1hashstr = hashlib.sha1(hashstr.encode(encoding="UTF-8")).hexdigest()#验证if hashstr==signature:return HttpResponse(echostr)else:return HttpResponse("error")

有的时候不报错却出错了可能是因为你的hashlib包没装。

这样就ok了,我一共改了一个setting.py,一个urls.py,增加了一个urls.py,改了一个views.py,现在访问 http://外网ip 应该得到的是一个error字符串。然后提交一下就会显示提交成功啦。再点击启用就一切ok了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。