1.1. pyweixin package¶
Submodules¶
pyweixin.client module¶
-
pyweixin.client.
debug_request
(name, resp, start)¶ 打印请求调试信息 并且生成curl格式方便测试
参数: - name -- 导入包名
- resp --
Response
对象 - start -- 请求开始时间,方便统计请求耗时
-
class
pyweixin.client.
Client
(path='')¶ 基类:
pyweixin.client._Client
HTTP请求客户端 可以通过连缀形式生成http请求地址,并且请求
基本的使用形式
client = Client("http://example.com") resp = client.v1.users.get(params={"user_id": 1}) print(resp.status_code) print(resp.content)
连缀的时候如果有特殊符号,可以使用括号代替.
resp = client.v1("to path").delete()
参数: path -- 默认传入host -
delete
(*args, **kwargs)¶ DELETE请求
-
get
(*args, **kwargs)¶ GET请求
-
post
(*args, **kwargs)¶ POST请求
-
put
(*args, **kwargs)¶ PUT请求
-
pyweixin.exceptions module¶
-
exception
pyweixin.exceptions.
WeixinError
(code, msg)¶ 基类:
exceptions.Exception
微信错误类
raise WeixinError("fail", "invalid args")
pyweixin.pay module¶
-
class
pyweixin.pay.
WeixinPay
(app_id, mch_id, mch_key, notify_url, refund_notify_url=None, key=None, cert=None)¶ -
微信支付
from pyweixin.pay import WeixinPay wp = WeixinPay('app id', 'mch id', 'mch key', 'notify url') # 生成公众号支付需要的信息 # https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 wp.jsapi("out_no", 1, "支付信息", "127.0.0.1", "wx.openid", attach="附加支付信息") # 查询订单 wp.order_query("out_no") # 如果基础类不成在对应方法,可以自己扩展,比如下载资金账单,对应url ``/pay/downloadfundflow``, 方法如下 wp.pay.downloadfundflow.do(dict(bill_date="2018-04-10", account_type="Basic"))
参数: - app_id -- 应用id
- mch_id -- 商户id
- mch_key -- 商户key, 自己设置的32位随机字符串
- notify_url -- 回调地址, POST请求
- refund_notify_url -- 退款回调地址,默认可以不填
- key -- 证书key, 可选
- cert -- 证书cert, 可选
-
FAIL
= u'FAIL'¶
-
PAY_HOST
= u'https://api.mch.weixin.qq.com'¶
-
SUCCESS
= u'SUCCESS'¶
-
check
(data)¶ 校验数据的签名是否正确
参数: data -- 签名好的数据
-
close_order
(out_trade_no, **kwargs)¶ 关闭订单
参数: out_trade_no -- 商户订单号
-
do
(data, use_cert=False, app_id_Key=u'appid')¶ 请求构建方法
填充默认参数 appid, mch_id, nonce_str
自动签名, 并且填充 sign 参数
可以选择请求是否需要证书
解析响应内容 xml 为 dict
判断响应是否出错,出错抛出后异常
pyweixin.exceptions.WeixinError
# 查询订单信息 try: data = wp.pay.orderquery.do(dict(out_trade_no="trade_no")) print(data) except pyweixin.exception.WeixinError: import traceback traceback.print_exc()
参数: - data -- 字典数据
- use_cert -- 是否需要使用证书,需要使用证书,请在初始化类的时候传入证书参数
- app_id_key --
app_id
的 key , 默认值为 app_id
-
download_bill
(bill_date, bill_type=u'ALL', **kwargs)¶ 下载账单
商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。
https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_6
注意:
- 微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致;
- 微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;
- 对账单中涉及金额的字段单位为“元”。
- 对账单接口只能下载三个月以内的账单。
参数: - bill_data -- 账单日期
- bill_type -- 账单类型
https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_6
-
get_read_pack_info
(mch_billno, bill_type=u'MCHT', **kwargs)¶ 查询红包记录
用于商户对已发放的红包进行查询红包的具体信息,可支持普通红包和裂变包
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_6&index=5
参数: - bill_type -- MCHT:通过商户订单号获取红包信息
- mch_billno -- 商户发放红包的商户订单号
-
jsapi
(out_trade_no, total_fee, body, spbill_create_ip, openid, **kwargs)¶ 微信公众号等统一下单
jsapi()
是对方法unified_order()
的包装https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
参数: - out_trade_no -- 订单号
- trade_type -- 订单类型
- total_fee -- 订单费用,分
- body -- 订单内容
- spbill_create_ip -- 创建订单的ip
- openid -- 用户唯一id
-
classmethod
nonce_str
()¶ 生成32位随机数
-
order_query
(out_trade_no=None, transaction_id=None, **kwargs)¶ 查询订单
该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
需要调用查询接口的情况:
- 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
- 调用支付接口后,返回系统错误或未知交易状态情况;
- 调用刷卡支付API,返回USERPAYING的状态;
- 调用关单或撤销接口API之前,需确认支付状态;
参数: - out_trade_no -- 商户订单号
- transaction_id -- 微信订单号,参数需要二选一
-
refund
(out_refund_no, total_fee, refund_fee, out_trade_no=None, transaction_id=None, **kwargs)¶ 申请退款
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家, 微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_4
注意:
- 交易时间超过一年的订单无法提交退款
- 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。
一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
- 请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次, 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
- 每个支付订单的部分退款次数不能超过50次
参数: - out_trade_no -- 商户订单号
- transaction_id -- 微信订单号,参数需要二选一
- out_refund_no -- 商户系统内部的退款单号
- total_fee -- 订单金额
- refund_fee -- 退款金额
- notify_url -- 退款成功回调地址, 可选, 如果
refund_notify_url
存在,则为默认值
-
refund_query
(refund_id=None, out_refund_no=None, out_trade_no=None, transaction_id=None, **kwargs)¶ 退款查询
提交退款申请后,通过调用该接口查询退款状态。退款有一定延时, 用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。
https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_5
参数: - refund_id -- 退款id
- out_refund_no -- 商户退款号
- out_trade_no -- 商户订单号
- transaction_id -- 微信订单号,参数需要四选一
-
classmethod
reply
(msg, ok=True)¶ 回调函数回复微信支付的内容
参数: - msg -- 回复消息
- ok -- 成功或者失败
-
send_group_red_pack
(send_name, re_openid, total_amount, total_num, wishing, act_name, remark, amt_type=u'ALL_RAND', **kwargs)¶ 发放裂变红包
裂变红包:一次可以发放一组红包。首先领取的用户为种子用户,种子用户领取一组红包当中的一个,并可以通过社交分享将剩下的红包给其他用户。裂变红包充分利用了人际传播的优势。
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4
参数: - send_name -- 红包发送者名称
- re_openid -- 接受红包的用户
- total_amount -- 付款金额,单位分
- wishing -- 红包祝福语
- amt_type -- 红包金额设置方式, 目前只有 ALL_RAND 随机
- act_name -- 活动名称
- remark -- 备注信息
- total_num -- 红包发放总人数, 默认为1,可选
- mch_billno -- 商户订单号,默认随机生成,可选
- scene_id -- 使用场景,可选
-
send_red_pack
(send_name, re_openid, total_amount, wishing, client_ip, act_name, remark, **kwargs)¶ 发送普通红包
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
参数: - send_name -- 红包发送者名称
- re_openid -- 接受红包的用户
- total_amount -- 付款金额,单位分
- wishing -- 红包祝福语
- client_ip -- 调用接口的机器Ip地址
- act_name -- 活动名称
- remark -- 备注信息
- total_num -- 红包发放总人数, 默认为1,可选
- mch_billno -- 商户订单号,默认随机生成,可选
- scene_id -- 使用场景,可选
-
sign
(data)¶ 签名
参数: data -- 需要签名的数据
-
classmethod
to_dict
(content)¶ 转换XML为dict, 并且去掉根节点
WeixinPay.to_dict('<xml><a>123</a><b>345</b></xml>') # {"a": "123, "b": "345"}
参数: content -- XML
-
classmethod
to_xml
(data)¶ 转换字典为XML
WeixinPay.to_xml(dict(a=123,b=234)) # <?xml version="1.0" encoding="utf-8"?><xml><a>123</a><b>234</b></xml>
参数: data -- 被转换的内容
-
unified_order
(out_trade_no, trade_type, total_fee, body, spbill_create_ip, **kwargs)¶ 统一下单
除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单, 返回正确的预支付交易会话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
参数: - out_trade_no -- 订单号
- trade_type -- 订单类型
- total_fee -- 订单费用,分
- body -- 订单内容
- spbill_create_ip -- 创建订单的ip
- openid -- 用户唯一id,当 trade_type == JSAPI 时候必传
- product_id -- 此参数为二维码中包含的商品ID,当 trade_type == NATIVE 时候必传