[TOC]
## 订阅号服务开发环境
### 开通订阅号
1. 首先,有兴趣的朋友可以先到`微信公众平台`[注册]([https://mp.weixin.qq.com/](https://mp.weixin.qq.com/))一个订阅号即可

本项目直接使用测试工作号进行开发,微信公众平台接口测试帐号申请地址如:
[https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login](https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login)

2. 微信扫一扫授权后,可打开测试号管理页面如下

>红色圈住的地方是重点,后面再介绍怎么用

到了这里,我们先了解下微信服务的数据流,这样我们就可以了解上图红圈中的URL代表的含义了,URL和Token先不用急着填,看到后面就明白了。
### 创建开发者服务
创建一个django项目,提供服务,假设你是有django基础
一、安装依赖包:`pip install wechatpy`
wechat-sdk文档见:https://wechatpy.readthedocs.io/zh_CN/master/index.html
二、django项目代码:
views.py:
```
from django.http import HttpResponse
from wechatpy.exceptions import InvalidSignatureException
from wechatpy.utils import check_signature
def wechat(request):
# GET 方式用于微信公众平台绑定验证
if request.method == 'GET':
signature = request.GET.get('signature', "")
timestamp = request.GET.get('timestamp', "")
nonce = request.GET.get('nonce', "")
echo_str = request.GET.get('echostr', "")
token = 'MiltonGuan'
try:
check_signature(token, signature, timestamp, nonce)
print("微信签名验证通过")
except InvalidSignatureException:
echo_str = '微信签名验证失败'
return HttpResponse(echo_str)
```
url.py:
```
from django.contrib import admin
from django.urls import path
from wxapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('wx/', views.wechat),
]
```
启动服务后,访问浏览器[http://127.0.0.1:8000/wx/](http://127.0.0.1:8000/wx/)

>[info] 到这里,我们已经创建好开发者服务,但是,微信服务是不能够推送消息到我们开发本地的,它只能推送到一个公网能访问的服务,因此,我们需要将我们的服务部署到公网上。
### 将本地服务映射到公网
显然,将本地服务部署到公网上,对很多朋友来说都不是很现实,就算能够部署,也不方便调试本地代码,这里介绍一个工具**ngrok**,可以满足我们通过公网访问本地服务。
1. 首先我们访问地址 https://dashboard.ngrok.com/get-started, 如下提示进行操作

操作成功后,我这边使用的是8000端口,而不是80端口。

到这里,我们上面创建的django服务,不仅仅只能通过本地localhost访问了,已经将我们的本地8000端口映射到了公网,如

已经表明映射成功,只是我们还需要在setting.py 的ALLOWED_HOSTS设置中,将域名添加即可。
setting.py `ALLOWED_HOSTS = ['df5a54a7.ngrok.io']`
### 配置微信URL与Token

配置后,提交,即可进行接入验证,注意,这里可能需要多提交几次。

提示“配置成功”即证明已经接入成功!同时观察到,本地控制台中会输出“微信签名验证通过!”

---
到这里,已经完成了开发者服务接入到微信公众号中了,下一步,就是开始开发我们的服务啦~~
<hr style="margin-top:100px">
:-: 
***微信扫一扫,关注“python测试开发圈”,获取更多测试开发分享!***