Skip to content

微信支付

zwc edited this page Sep 24, 2016 · 10 revisions

微信支付

目录

功能

  • 统一下单
  • 查询订单
  • 关闭订单
  • 申请退款
  • 查询退款
  • 下载对账单

文档

微信详细文档请点击

统一下单

注意: 默认spbill_create_ip的值为request.remote_addr,如果没有安装flask,请在参数后面带上spbill_create_ip

必填参数

  • out_trade_no 商户订单号
  • body 商品描述
  • total_fee 商品描述
  • trade_type 交易类型

条件参数

  • openid 如果trade_typeJSAPI时必须
  • product_id 如果type_typeNATIVE时必须

举例

try:
    out_trade_no = wx_pay.nonce_str
    raw = weixin.pay.unified_order(trade_type="JSAPI", openid="openid", body=u"测试", out_trade_no=out_trade_no, total_fee=1, attach="other info")
    print raw
except WeixinError, e:
    print e.message

网页端调起支付API

必填参数

  • out_trade_no 商户订单号
  • body 商品描述
  • total_fee 商品描述
  • openid 用户标识

返回参数

  • package 订单详情扩展字符串
  • timeStamp 时间戳
  • appId 公众号id
  • nonceStr 随机字符串
  • signType 清明方式
  • sign 签名
try:
    out_trade_no = wx_pay.nonce_str
    raw = weixin.pay.jsapi(openid="openid", body=u"测试", out_trade_no=out_trade_no, total_fee=1, attach="other info")
    print raw
except WeixinError, e:
    print e

查询订单

参数,二选其一

  • out_trade_no 商户订单号
  • transaction_id 微信订单号

使用 out_trade_no 查询订单

print weixin.pay.order_query(out_trade_no=out_trade_no)

或者使用 transaction_id 查询

print weixin.pay.order_query(transaction_id='transaction_id')

关闭订单

必填参数

  • out_trade_no 商户订单号

举例

print weixin.pay.order_close(out_trade_no=out_trade_no)

申请退款

参数,二选其一

  • out_trade_no 商户订单号
  • transaction_id 微信订单号

使用 out_trade_out 退款

print weixin.pay.refund(out_trade_no=out_trade_no)

或者使用 transaction_id 退款

print weixin.pay.refund(transaction_id='transaction_id')

退款查询

参数,4选一

  • out_trade_no 商户订单号
  • transaction_id 微信订单号
  • out_refund_no 商户退款单号
  • refund_id 微信退款单号

使用 out_trade_no 退款

print weixin.pay.refund_query(out_trade_no=out_trade_no)

工具函数

签名

sign = weixin.pay.sign(dict(a='b', b=2, c=3))

验证签名

weixin.pay.check(data(a='b', b=2, c=3, sign=sign))

回复消息

weixin.pay.reply("OK", True)

weixin.pay.reply("签名验证失败", False)

下载账单

必填参数

  • bill_date 账单日期

举例

print weixin.pay.download_bill('20140603')

用法

# -*- coding: utf-8 -*-

from flask import Flask, request, jsonify

from flask.ext.weixin_pay import WeixinPay, WeixinPayError


app = Flask(__name__)


config = {
    "WEIXIN_APP_ID": "wxapp_id",
    "WEIXIN_MCH_ID": "100000010",
    "WEIXIN_MCH_KEY": "138bad2e99a79312e25b2c162c9bab34",
    "WEIXIN_NOTIFY_URL": "http://www.example.com/pay/weixin/notify",
}
app.config.update(config)


wx_pay = WeixinPay()
wx_pay.init_app(app)


@app.route("/pay/create")
def pay_create():
    """
    微信JSAPI创建统一订单,并且生成参数给JS调用
    """
    try:
        out_trade_no = wx_pay.nonce_str
        raw = wx_pay.jsapi(openid="openid", body=u"测试", out_trade_no=out_trade_no, total_fee=1)
        return jsonify(raw)
    except WeixinPayError, e:
        print e.message
        return e.message, 400


@app.route("/pay/notify")
def pay_notify():
    """
    微信异步通知
    """
    data = wx_pay.to_dict(request.data)
    if not wx_pay.check(data):
        return wx_pay.reply("签名验证失败", False)
    # 处理业务逻辑
    return wx_pay.reply("OK", True)


if __name__ == '__main__':
    app.run()
Clone this wiki locally