当前位置:主页 > 接口开发 > 使用PYTHON 模拟微信服务端

使用PYTHON 模拟微信服务端

时间:2013-04-14 13:21来源:微信站 作者:网络 点击:
# -*- coding: utf-8 -*-#/usr/bin/env python__version__ = 0.1__author__ = http://weibo.com/wtmmac微信Server模拟import sys, urllib, httplib, time, hashlib, random# 配置interface_url = www.xxx.netinterface_path = /interface/weixin.phpToken =
# -*- coding: utf-8 -*-
#/usr/bin/env python

__version__ = '0.1'
__author__  = 'http://weibo.com/wtmmac'

'''
微信Server模拟
'''

import sys, urllib, httplib, time, hashlib, random

# 配置
interface_url = 'www.xxx.net'
interface_path = '/interface/weixin.php'
Token = 'weixin'

messages = {
    # 用户关注消息
    'subscribe' : '''<xml><ToUserName><![CDATA[测试服务帐号]]></ToUserName>
    <FromUserName><![CDATA[小黑]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[EVENTKEY]]></EventKey>
    </xml>''',

    # 用户发送文本信息
    'text': '''<xml>
    <ToUserName><![CDATA[测试服务帐号]]></ToUserName>
    <FromUserName><![CDATA[小黑]]></FromUserName> 
    <CreateTime>1348831860</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[周杰伦]]></Content>
    <MsgId>1234567890123456</MsgId>
    </xml>'''

}

def make_post(action):
    '''模拟用户行为产生的消息提交给接口程序'''

    conn = httplib.HTTPConnection(interface_url)

    headers = { "Content-type": "text/xml",
                "Content-Length": "%d" % len(messages[action])}

    # 生成签名相关变量
    timestamp = int(time.time())

    nonce = random.randint(1,100000)

    signature = makeSignature(Token, timestamp, nonce)

    params = urllib.urlencode({'signature': signature, 'timestamp': timestamp, 'nonce': nonce})

    conn.request("POST", interface_path + "?" +params, "", headers)

    conn.send(messages[action])

    response = conn.getresponse()

    print response.status, response.reason
     
    print response.read()

    conn.close()

    
    
def makeSignature(Token, timestamp, nonce):
    '''生成签名'''
    try:
        Token = int(Token)
    except Exception, e:
        pass

    sorted_arr = map(str, sorted([Token, timestamp, nonce]))

    sha1obj = hashlib.sha1()
    sha1obj.update(''.join(sorted_arr))
    hash = sha1obj.hexdigest()

    return hash

def listAction():
    print("======Supported actions:======")
    for i in messages.keys():
        print(i)
    print("==============================")

if __name__ == '__main__':
    if len(sys.argv) < 2:   
        print (u"Please input your action")
        listAction()
    else:
        if (messages.has_key(sys.argv[1])):
            make_post(sys.argv[1])
        else:
            print("No this action")
            listAction()
(责任编辑:admin)
Tags:微信公众平台接口 Python
------分隔线----------------------------

相关文章

文章评论

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)