简介
提供微信登录,公众号管理,微信支付,微信消息的全套功能
安装
使用pip
sudo pip install weixin-python
使用easy_install
sudo easy_install weixin-python
用法
参数
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_ID
WEIXIN_APP_SECRET
-
微信消息
WEIXIN_TOKEN
WEIXIN_SENDER
WEIXIN_EXPIRES_IN
-
微信登录
WEIXIN_APP_ID
WEIXIN_APP_SECRET
-
微信公众平台
WEIXIN_APP_ID
WEIXIN_APP_SECRET
-
微信支付
WEIXIN_APP_ID
WEIXIN_MCH_ID
WEIXIN_MCH_KEY
WEIXIN_NOTIFY_URL
WEIXIN_MCH_KEY_FILE
WEIXIN_MCH_CERT_FILE
初始化
如果使用flask
# -*- coding: utf-8 -*-from datetime import datetime, timedelta
from flask import Flask, jsonify, request, url_for
from weixin import Weixin, 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.all
def all(**kwargs):"""监听所有没有更特殊的事件"""return weixin.reply(kwargs['sender'], sender=kwargs['receiver'], content='all')@weixin.text()
def hello(**kwargs):"""监听所有文本消息"""return "hello too"@weixin.text("help")
def world(**kwargs):"""监听help消息"""return dict(content="hello world!")@weixin.subscribe
def subscribe(**kwargs):"""监听订阅消息"""print kwargsreturn "欢迎订阅我们的公众号"
微信登录
@app.route("/login")
def login():"""登录跳转地址"""openid = request.cookies.get("openid")next = request.args.get("next") or request.referrer or "/",if openid:return redirect(next)callback = url_for("authorized", next=next, _external=True)url = weixin.authorize(callback, "snsapi_base")return redirect(url)@app.route("/authorized")
def authorized():"""登录回调函数"""code = request.args.get("code")if not code: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)return resp
微信支付
注意: 微信网页支付的timestamp参数必须为字符串
@app.route("/pay/jsapi")
def pay_jsapi():"""微信网页支付请求发起"""try:out_trade_no = weixin.nonce_strraw = weixin.jsapi(openid="openid", body=u"测试", out_trade_no=out_trade_no, total_fee=1)return jsonify(raw)except WeixinError, e:print e.messagereturn e.message, 400@app.route("/pay/notify, methods=['POST'])
def pay_notify():"""微信异步通知"""data = weixin.to_dict(request.data)if not weixin.check(data):return weixin.reply("签名验证失败", False)# 处理业务逻辑return weixin.reply("OK", True)if __name__ == '__main__':app.run(host="0.0.0.0", port=9900)
微信公众号
注意: 如果使用分布式,需要自己实现access_token
跟jsapi_ticket
函数
access_token
默认保存在~/.access_token
jsapi_ticket
默认保存在~/.jsapi_ticket
默认在(HOME)目录下面,如果需要更改到指定的目录,可以导入库之后修改,如下
import weixinDEFAULT_DIR = "/tmp"
获取公众号唯一凭证
weixin.access_token
获取ticket
weixin.jsapi_ticket
创建临时qrcode
data = weixin.qrcode_create(123, 30)
print weixin.qrcode_show(data.ticket)
创建永久性qrcode
# scene_id类型
weixin.qrcode_create_limit(123)
# scene_str类型
weixin.qrcode_create_limit("456")
长链接变短链接
weixin.shorturl("http://example.com/test")
Github地址
https://github.com/zwczou/weixin-python