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)

基类:pyweixin.client.Client

微信支付

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 参数

  • 可以选择请求是否需要证书

  • 解析响应内容 xmldict

  • 判断响应是否出错,出错抛出后异常 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_idkey , 默认值为 app_id
download_bill(bill_date, bill_type=u'ALL', **kwargs)

下载账单

商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。

https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_6

注意:

  1. 微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致;
  2. 微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;
  3. 对账单中涉及金额的字段单位为“元”。
  4. 对账单接口只能下载三个月以内的账单。
参数:
  • 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

注意:

  1. 交易时间超过一年的订单无法提交退款
  2. 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
  3. 请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次, 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
  4. 每个支付订单的部分退款次数不能超过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 时候必传

pyweixin.utils module

class pyweixin.utils.dotdict

基类:dict

让字典可以通过dot(.)的形式访问

Module contents