提供微信登陆,公众号管理,微信支付,微信消息的全套功能
文档目录快速开始微信消息微信支付微信登陆微信公众平台欢迎提交Pullrequests
如果需要单独使用其中的某些模块,可以见文档目录的具体模块
如果需要组合在一起可以参考快速开始
目录安装功能异常用法参数初始化微信消息微信登陆微信支付微信公众号安装使用pip
sudopipinstallweixin-python
使用easy_install
sudoeasy_installweixin-python
安装最新版本pip3installgit+https://github.com/zwczou/weixin-python
当前版本v0.5.7
功能微信登陆微信支付微信公众号微信消息异常父异常类名为WeixinError子异常类名分别为WeixinLoginErrorWeixinPayErrorWeixinMPErrorWeixinMsgError
用法参数WEIXIN_TOKEN必填,微信主动推送消息的TOKENWEIXIN_SENDER选填,微信发送消息的发送者WEIXIN_EXPIRES_IN选填,微信推送消息的有效时间WEIXIN_MCH_ID必填,微信商户ID,纯数字WEIXIN_MCH_KEY必填,微信商户KEYWEIXIN_NOTIFY_URL必填,微信回调地址WEIXIN_MCH_KEY_FILE可选,如果需要用退款等需要证书的api,必选WEIXIN_MCH_CERT_FILE可选WEIXIN_APP_ID必填,微信公众号appidWEIXIN_APP_SECRET必填,微信公众号appkey上面参数的必填都是根据具体开启的功能有关,如果你只需要微信登陆,就只要选择WEIXIN_APP_IDWEIXIN_APP_SECRET
微信消息
WEIXIN_TOKENWEIXIN_SENDERWEIXIN_EXPIRES_IN微信登陆
WEIXIN_APP_IDWEIXIN_APP_SECRET微信公众平台
WEIXIN_APP_IDWEIXIN_APP_SECRET微信支付
WEIXIN_APP_IDWEIXIN_MCH_IDWEIXIN_MCH_KEYWEIXIN_NOTIFY_URLWEIXIN_MCH_KEY_FILEWEIXIN_MCH_CERT_FILE初始化如果使用flask
#-*-coding:utf-8-*-fromdatetimeimportdatetime,timedeltafromflaskimportFlask,jsonify,request,url_forfromweixinimportWeixin,WeixinErrorapp=Flask(__name__)app.debug=True#具体导入配#根据需求导入仅供参考app.config.from_object(dict(WEIXIN_APP_ID='',WEIXIN_APP_SECRET=''))#初始化微信weixin=Weixin()weixin.init_app(app)#或者#weixin=Weixin(app)如果不使用flask
#根据需求导入仅供参考config=dict(WEIXIN_APP_ID='',WEIXIN_APP_SECRET='')weixin=Weixin(config)微信消息如果使用django,添加视图函数为
url(r'^/$',weixin.django_view_func(),name='index'),如果为flask,添加视图函数为
app.add_url_rule("/",view_func=weixin.view_func)@weixin.alldefall(**kwargs):"""监听所有没有更特殊的事件"""returnweixin.reply(kwargs['sender'],sender=kwargs['receiver'],content='all')@weixin.text()defhello(**kwargs):"""监听所有文本消息"""return"hellotoo"@weixin.text("help")defworld(**kwargs):"""监听help消息"""returndict(content="helloworld!")@weixin.subscribedefsubscribe(**kwargs):"""监听订阅消息"""printkwargsreturn"欢迎订阅我们的公众号"微信登陆@app.route("/login")deflogin():"""登陆跳转地址"""openid=request.cookies.get("openid")next=request.args.get("next")orrequest.referreror"/",ifopenid:returnredirect(next)callback=url_for("authorized",next=next,_external=True)url=weixin.authorize(callback,"snsapi_base")returnredirect(url)@app.route("/authorized")defauthorized():"""登陆回调函数"""code=request.args.get("code")ifnotcode:return"ERR_INVALID_CODE",400next=request.args.get("next","/")data=weixin.access_token(code)openid=data.openidresp=redirect(next)expires=datetime.now()+timedelta(days=1)resp.set_cookie("openid",openid,expires=expires)returnresp微信支付注意:微信网页支付的timestamp参数必须为字符串
@app.route("/pay/jsapi")defpay_jsapi():"""微信网页支付请求发起"""try:out_trade_no=weixin.nonce_strraw=weixin.jsapi(openid="openid",body=u"测试",out_trade_no=out_trade_no,total_fee=1)returnjsonify(raw)exceptWeixinError,e:printe.messagereturne.message,400@app.route("/pay/notify,methods=['POST'])defpay_notify():"""微信异步通知"""data=weixin.to_dict(request.data)ifnotweixin.check(data):returnweixin.reply("签名验证失败",False)#处理业务逻辑returnweixin.reply("OK",True)if__name__=='__main__':app.run(host="0.0.0.0",port=9900)微信公众号注意:如果使用分布式,需要自己实现access_token跟jsapi_ticket函数
access_token默认保存在~/.access_tokenjsapi_ticket默认保存在~/.jsapi_ticket
默认在(HOME)目录下面,如果需要更改到指定的目录,可以导入库之后修改,如下
importweixinDEFAULT_DIR="/tmp"获取公众号唯一凭证
weixin.access_token获取ticket
weixin.jsapi_ticket创建临时qrcode
data=weixin.qrcode_create(123,30)printweixin.qrcode_show(data.ticket)创建永久性qrcode
#scene_id类型weixin.qrcode_create_limit(123)#scene_str类型weixin.qrcode_create_limit("456")长链接变短链接
weixin.shorturl("https://example.com/test")
评论