论如何使用Python进行微信公众号的开发

说到微信公众号的开发,不外乎两种,一种是使用官方提供的接口开发,一种就是通过模拟登录来实现接口(这种方式有被封的风险,这里不论述)

Python发展至今,已经有多种完善的服务器框架可以使用,Django,Tornado,Flask等,可以使用这些框架打造一个服务器,在其之上实现微信公众号的功能就好。

至于怎么申请微信公众号、设置开发模式和指定开发token的url这类问题,这里也不一一论述,毕竟这在网上一搜就能找到了。

在我看来,微信公众号的开发在接口上说来也只有两种,一种就是验证,另一种就是回应,可以根据请求方法来区分
@csrf_exempt
def handleWechatRequest(request):
	if request.method == "GET":
		# createMenu()
		response = HttpResponse(checkSignature(request),content_type="text/plain")
		return response
	elif request.method == "POST":
		response = HttpResponse(responseMsg(request),content_type="application/xml")
		return response
	else:
		response = None
		return response
第一种,验证:简单点说来,就是验证请求的内容是否正确,这一点是个大前提,也就是说这一点决定了在公众号上设置URL和token时是否能通过。关于这一点,就是关于微信公众好的验证算法了,简单点说来就是,根据设定的token值、请求的timestamp值、请求的nonce值进行排序后组成字符串,再经过哈希的sha1加密后和请求的signature相比较。如下实例:
def checkSignature(request):
	signature = request.GET.get("signature", None)
	timestamp = request.GET.get("timestamp", None)
	nonce = request.GET.get("nonce", None)
	echostr = request.GET.get("echostr", None)
	token = Wechat_Token
	tmpList = [token, timestamp, nonce]
	tmpList.sort()
	tmpstr = "%s%s%s" % tuple(tmpList)
	tmpstr = hashlib.sha1(tmpstr).hexdigest()
	if tmpstr == signature:
		return echostr
	else:
		return None

第二种,回应:这里的功能就需要根据自己需求了,你可以实现一些自动回复的功能或是一些有趣的功能,这里无非就是对基础接口的运用,根据指定的格式来回应,来来去去也就是文本、图像、声音、事件等等单一或集合的形式,这里的接口众多(官方都有详细的介绍,什么类型的请求有什么样的字段信息,回应什么类型的信息使用什么格式等都有很详细的介绍),就不一一列举,只举个实例来形容一下(如下实例是发送位置返回经纬度和位置信息):

def responseMsg(request):
	rawData = smart_str(request.body)
	xml = ET.fromstring(rawData)
	msg = paraseMsgXml(xml)
	MsgType = msg.get("MsgType")
	if MsgType == "text":
		return textMsg(msg)
	elif MsgType == "location":
		return locationMsg(msg)
def paraseMsgXml(rootElem):
    msg = {}
    if rootElem.tag == "xml":
        for child in rootElem:
            msg[child.tag] = smart_str(child.text)
    return msg
def locationMsg(msg):
	ToUserName = msg.get("ToUserName")
	FromUserName = msg.get("FromUserName")
	j = msg.get("Location_X")
	w = msg.get("Location_Y")
	Label = msg.get("Label")

	replyContent = "纬度:"+j+"\n经度:"+w+"\n位置信息:"+Label
        locationXML = """
			
			
			%s
			
			
			""" %(FromUserName,ToUserName,str(int(time.time())),replyContent)
        return locationXML

微信公众号开发不难,按照官方的接口来开发,更是不是什么技术点,看起来就像是格式的组装以及HTTP请求而已,真正难的是你的创意,实现什么功能,在你没什么好创意时,而又想尝试一下微信公众号的开发,我建议先使用官方的接口来尝试一下,之后可以使用一些现成的接口(例如google提供的API,百度提供的API等等)来为公众号添加一些功能,例如百度的导航,这些都是可以实现的,只要会使用这类API就可以,使用接口不难,难的都让实现接口的人做好了。
另外,例如使用Django开发出来服务器运行在本机上是无法使用的,因为默认是无法出外网的,需要一些手段才可以,这里不作介绍。推荐使用SAE、BAE这类,可以把代码放在上面运行得到一个链接,关键有免费的额度,至于怎么使用,可以找搜一下,这不是什么秘密。

你可能感兴趣的:(Wechat,Python,Django)