首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

开源我公司微信支付 python 版本的全部代码,包含生成微信订单,以及最新的微信平台向用户发红包,向用户付款等功能

  •  5
     
  •   Jolly23 · 2016-12-21 13:31:07 +08:00 · 15867 次点击
    这是一个创建于 1057 天前的主题,其中的信息可能已经有所发展或是发生改变。

    GitHub 代码地址 [https://github.com/Jolly23/wx_pay_python]

    作者个人网站 [https://jolly23.com]

    这套系统基本涵盖微信支付全部相关功能,以及自己总结的开发引导,如果可以请点 Star

    微信支付功能

    参考文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php

    使用

    首先引入包

    from wx_pay import WxPay, WxPayError
    

    构造微信支付类,传入配置文件

    wx_pay = WxPay(
        wx_app_id='WX_APP_ID', 
        wx_mch_id='WX_MCH_ID', 
        wx_mch_key='WX_MCH_KEY',
        wx_notify_url='http://www.example.com/pay/weixin/notify'
    )
    

    创建订单

    pay_data = wx_pay.js_api(
            openid=u'***user_openid***',  # 付款用户 openid
            body=u'***商品名称 /付款显示名称***',  # 例如:饭卡充值 100 元
            total_fee=100  # total_fee 单位是 分, 100 = 1 元
        )
    

    给用户发红包

    wx_pay.send_red_pack(
        api_client_cert_path='/home/xxx/SERVER/ext_file/wx_2_pay_cert.pem',
        api_client_key_path='/home/xxx/SERVER/ext_file/wx_2_pay_key.pem',
        send_name=u'微信支付测试',  # 红包名称
        re_openid=u'***to_user_openid***',  # 要接收红包的用户 openid
        total_amount=100,  # total_fee 单位是 分, 100 = 1 元, 最大 499 元
        wishing=u'感谢参与测试',  # 祝福语
        client_ip=u'222.222.222.222',  # 调用微信发红包接口服务器公网 IP 地址
        act_name=u'微信支付测试系统',  # 活动名称
        remark=u'感谢参与'  # 备注
    )
    

    查询订单

    raw = wx_pay.close_order(out_trade_no)
    

    关闭订单

    raw = wx_pay.order_query(out_trade_no=out_trade_no)
    

    工具函数

    签名

    wx_pay.sign(dict(openid="123"))
    

    32 位随机字符串

    wx_pay.nonce_str()
    

    验证签名

    wx_pay.check(dict(openid="123", sign="SIGN"))
    

    生成微信前端 JS 参数

    详见example.py的wx_js_config方法,用来生成前端使用微信js的必要参数

    第 1 条附言  ·  2016-12-21 20:12:52 +08:00
    前期开发参照 https://github.com/zakzou/flask-weixin-pay/blob/master/example.py ,后来在这个基础上改进了很多地方,包括不限制是 flask 框架,以及加入微信支付的新功能发送红包和企业付款。
    感谢前辈
    第 2 条附言  ·  2016-12-22 10:14:12 +08:00
    微信支付功能集,前期开发借鉴 https://github.com/zakzou/flask-weixin-pay ,抱歉不是在 fork 上改动是因为几个月前就开始带到项目中使用,改进包括让其脱离 flask 框架限制,并且加入微信支付最新的两个营销功能,然后从我的工程代码提出来这个底层类发布。向前辈致谢
    第 3 条附言  ·  2016-12-22 10:44:39 +08:00
    首先说一句抱歉
    1. 解释下为什么贴的是另一个项目地址,并不是像 @hhstore 说的企图蒙混过关,开始开发是在几个月前,当时是从知乎上跳到 zakzou 那个 flask 微信支付项目中,当时直至昨天都不知道 zwczou 的代码和 zakzou 的代码一样,刚开始写是参照 zakzou 的,并且也提过 contribute ,现在发现他的和 zwczou 的代码一样, https://github.com/zakzou/flask-weixin-pay
    2. 刚发布那个帖子也没想到会有这么多的关注,虽然在 zakzou 代码上有改进,把 zakzou 的工程脱离了 flask 框架限制并加了几个新的营销功能,但大部分还是大部分使用了原来开源的代码,现在发现可能他的代码也是从 zwczou 那 copy 的,所以我现在也是间接 copy 了 zwczou 的代码,真的抱歉。
    3. 公司是我在大学时期创建的,法人不是我,聘请一些在读研究生做员工。
    4. 对我个人行为感到遗憾和后悔,发布没有好好考虑到原代码提供者版权问题,对不起。希望大家能原谅,给我改过的机会。以后发布代码更加遵守版权问题。对不起。已在 github 补充了说明情况。
    5. 向前辈致敬,同时也对前辈说一声对不起,对大家说声对不起。今后增强自己对于版权保护的认识,更加充分尊重原作者,抱歉。
    93 回复  |  直到 2016-12-25 18:28:18 +08:00
        1
    soli   2016-12-21 13:51:50 +08:00
    先赞一下!
        2
    ty89   2016-12-21 14:02:31 +08:00
    滋瓷
    v2 应该多一些这种帖子,少一些撕逼的
        3
    lincolnhuang   2016-12-21 14:07:05 +08:00
    先赞后看!
        4
    shiny   2016-12-21 14:18:17 +08:00 via iPhone
    你们公司同意你开源?
        5
    wyntergreg   2016-12-21 14:18:55 +08:00
    手动点赞
        6
    Jolly23   2016-12-21 14:28:53 +08:00 via iPhone   ♥ 2
    @shiny CTO 说了算,也就是我说了算, that's enough
        7
    Jolly23   2016-12-21 14:32:23 +08:00 via iPhone
    放出来的代码足够大家开发用,一些涉密的小东西没开源,但不影响此框架使用。截至昨天,我公司用这套代码 3 个月已经在微信成功过账 109 万元且未产生任何问题。
        8
    cxl008   2016-12-21 14:38:11 +08:00
    赞一个
        9
    flamhaze5946   2016-12-21 14:40:21 +08:00
    @Jolly23 你这泄露了财务信息吧 - -b
        10
    wsy2220   2016-12-21 14:42:08 +08:00
    支持开源
        11
    dexterlei   2016-12-21 14:47:22 +08:00
    先赞后看
        12
    mortal   2016-12-21 14:53:33 +08:00
    你问我呲磁不呲磁,我当然是呲磁的!我们年轻人还是要 Star 学习一个。
        13
    Jolly23   2016-12-21 14:55:20 +08:00 via iPhone
    @mortal 我 20 周岁,也是年轻人 哈哈
        14
    vugusurk   2016-12-21 14:57:31 +08:00
    哇,才大三就 CTO 啦
        15
    mortal   2016-12-21 14:59:55 +08:00
    @Jolly23 我遭不住这种 20 多岁就当上 CTO 的了 反观自己还在打杂…
        16
    Jolly23   2016-12-21 15:02:10 +08:00 via iPhone
    @mortal 也许我这含金量不大呗 毕竟公司目前业务单一
        17
    xiuc001   2016-12-21 15:49:39 +08:00
    你们公司同意你开源?
        18
    derpc   2016-12-21 15:51:31 +08:00 via iPhone
    先赞后看,楼主加油
        19
    MrWhite   2016-12-21 15:53:40 +08:00
    不错的哦。 很详细~
        20
    zhushajun   2016-12-21 15:55:23 +08:00   ♥ 1
    学习了,感谢分享哈
        21
    v2dead   2016-12-21 16:13:42 +08:00
    赞一个,微信 API 之接的恶心好久,各种 XML ,稀奇古怪的接口请求,感觉糅合了十几号人的风格。
    虽然愿景很好,但这样的项目其实不太敢用的,因为即使用这个项目,还要全面的去看你的代码和微信接口,一但微信方面接口升级,不知道你那边什么时候升级,难道不支付了?
    有空去看你代码的,还不如自己封装一遍。。。
        22
    liqiazero   2016-12-21 16:16:12 +08:00
    该 star 的还是得 star 啊。
    这个东西都是 API 各种回调,核心自然在微信那边,核心支付的东西微信在出 API 的时候已经做了各种防范了。只要 API 用的好,基本上在支付上不会问题,就是回调错了,微信那边也会给你 pass 掉。基本上没有啥安全性问题,不过还是 star 啊!
        23
    tar   2016-12-21 16:19:21 +08:00
    "劳资叫你们维护系统,你们居然给开源了"
        24
    fy   2016-12-21 16:32:13 +08:00
    python2 ...
        25
    butterflydog   2016-12-21 17:21:03 +08:00
    点赞
        26
    pudgeee   2016-12-21 17:21:34 +08:00
    这个是要赞一个。
        27
    lonelinsky   2016-12-21 17:31:45 +08:00
    查询订单

    raw = wx_pay.close_order(out_trade_no)
    关闭订单

    raw = wx_pay.order_query(out_trade_no=out_trade_no)

    这边写反了哦…
        28
    deadofpeople   2016-12-21 18:11:09 +08:00
    666
        29
    Jolly23   2016-12-21 18:27:18 +08:00 via iPhone
    @lonelinsky 感谢指正,粗心了
        30
    irory   2016-12-21 18:40:57 +08:00
    我记得发红包每个用户至少 1 元吧 ... 这个没判断算不算 BUG ? O(∩_∩)O 哈哈~
        31
    njushannon   2016-12-21 19:02:27 +08:00
    2333333 ,可以用来轻度套现
        32
    wclebb   2016-12-21 19:07:04 +08:00
    哇塞,请问有现成的网站或微信号可以参考一下吗?
    虽然……用不到。
    但估计以后会有用,所以希望能提供一下简单的参考或微信号。
        33
    Jolly23   2016-12-21 19:22:32 +08:00 via iPhone
    @wclebb 民大小偲-个人中心-赞助(但是没绑定学号看不到赞助页面) 校园卡充值也看不到
        34
    em70   2016-12-21 19:23:33 +08:00
    你是个伟人
        35
    timlili   2016-12-21 19:36:59 +08:00   ♥ 5
        36
    luefei   2016-12-21 20:01:51 +08:00   ♥ 2
        37
    zeayes   2016-12-21 20:07:25 +08:00   ♥ 2
        38
    jessynt   2016-12-21 20:16:50 +08:00 via iPhone
    楼上这啥情况,要撕逼啊,瓜子小板凳已备好
        39
    wellsc   2016-12-21 20:18:12 +08:00
    谢谢
        40
    jessynt   2016-12-21 20:26:12 +08:00 via iPhone
        41
    HLT   2016-12-21 20:34:24 +08:00   ♥ 1
    这 TM 就很尴尬了
        42
    coolloves   2016-12-21 20:40:16 +08:00
    马克,感谢分享
        43
    GreatMartial   2016-12-21 20:47:55 +08:00 via Android
    字词,感谢分享
        44
    AyoCross   2016-12-21 20:48:04 +08:00   ♥ 1
    这。。。果然亮点都在评论
        45
    8bit   2016-12-21 20:52:45 +08:00
    分分钟扒掉底裤.....
        46
    1etterSong   2016-12-21 21:00:20 +08:00
    后排了
        47
    sivacohan   2016-12-21 21:06:11 +08:00 via Android
    你知道你为什么不能叫 wxpay 吗?
    因为 wxpay 被我占了。哈哈哈。
        48
    zhchbin   2016-12-21 21:09:55 +08:00
    还有,这个退款操作的 API 不可以的吧。。确定能正常?文档里写着要求要用证书的。。 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_4
        49
    zwczou   2016-12-21 21:12:56 +08:00   ♥ 3
    最开始 zakzou/flask-weixin-pay 有以下几个问题:
    1. 下载账单返回的不是 xml ,而是 csv 格式的,所以此接口不能使用( download_bill)
    2. 退款需要商户证书,目前还不支持,还在开发中(refund)

    在 weixin-python 里面已经修复问题 1 ,问题 2 也在支持的路上


    另外 zakzou/flask-weixin-pay 是支持非 flask 的框架的,你的这个版本反而仅仅支持 flask 框架了
        50
    renyijiu   2016-12-21 21:13:48 +08:00
    你的个人网站 502 了。。。。。
        51
    yura93   2016-12-21 21:17:05 +08:00
    我去,看到评论好方
        52
    fffflyfish   2016-12-21 21:28:07 +08:00
    好尴尬,这个 star 比 zwczou 的都多
        53
    dtfm   2016-12-21 21:45:04 +08:00
    昨天也看见了锤子开源的 onestep ,每次在 Github 上看见中文的文档和 readme ,都觉得好接地气,莫名的亲切。
        54
    gogobody   2016-12-21 21:46:33 +08:00 via Android
    看见标题就赞了
        55
    haozibi   2016-12-21 21:56:27 +08:00 via Android
    要回复先看看上面的评论吧
        56
    dazzle   2016-12-21 22:02:35 +08:00 via Android
    表示看见过 N 次,个人网站放上来,几小时后挂了
    (ಡωಡ)
        57
    leeyiw   2016-12-21 22:09:04 +08:00
    开源也要遵守基本法吼
        58
    xfan001   2016-12-21 22:26:13 +08:00
    搭车,自己写的微信公众号和微信支付 sdk , https://github.com/xfan001/weixin-sdk ,实际使用过,
    与框架无关,代码很简单,看看就懂了
        59
    shijingshijing   2016-12-21 22:28:53 +08:00
    这个要赞一下~ 呵呵。 Mark 一记
        60
    vugusurk   2016-12-21 22:38:59 +08:00 via iPhone
    呵呵,楼主能解释下 35-37 楼的质疑,和 40 楼的抄袭问题吗

    呵呵,楼主能解释下 35-37 楼的质疑,和 40 楼的抄袭问题吗

    呵呵,楼主能解释下 35-37 楼的质疑,和 40 楼的抄袭问题吗
        61
    wwlweihai   2016-12-21 22:42:31 +08:00
    关于支付,目前采用 ping++的方案是个不错的选择,而且有商业的团队来保障质量。这个项目开源,是个学习的好东西。
        62
    n37r06u3   2016-12-21 22:44:13 +08:00
    502 Bad Gateway

    nginx/1.10.0 (Ubuntu)
    分分钟。。。
        63
    mingyun   2016-12-21 22:45:57 +08:00
    star 了,另 https://jolly23.com/ 502 了
        64
    v4an   2016-12-21 23:47:51 +08:00
        65
    i147   2016-12-21 23:57:48 +08:00
    @wwlweihai 没错,我们也是这样。。。 pingxx 和 beecloud
        66
    onefouroo   2016-12-22 07:18:21 +08:00 via iPhone
    马克一下 可能以后用的着
        67
    phpdever   2016-12-22 08:22:56 +08:00
    楼主,我喜欢你
        68
    sambawy   2016-12-22 09:08:55 +08:00
    先赞一个再慢慢看
        69
    quericy   2016-12-22 09:13:33 +08:00
    这特么就很尴尬了
        70
    xylitolLin   2016-12-22 09:28:09 +08:00
    我只是来看戏的
        71
    ahonn   2016-12-22 09:38:03 +08:00
        72
    lincolnhuang   2016-12-22 09:39:54 +08:00
    比较了下代码, 20 岁 CTO ,抱歉的通知您,赞我要收回了。。
        73
    gimp   2016-12-22 09:55:04 +08:00
    这好尴尬...
        74
    hhstore   2016-12-22 10:04:41 +08:00   ♥ 3
    题主做人态度不端正啊. 我仔细对比了 2 个项目的代码, 合着你是原版照抄啊!?
    你倒是改个函数名, 意思一下啊!?

    ==============================

    1. 照着别人的项目, 完整照抄, 还出来骗赞, 这个动机就很可耻.
    2. v 友给出`被抄袭人`的项目, 打脸了, 扭扭捏捏, 贴了原作者另外一个项目, 企图蒙混过关. 你抄的哪个, 你觉得大家瞎吗?
    这个做法简直是不要脸了.
    3. 抄代码的时候, 你看懂别人的代码了吗? 原作者肯定是 Python 老司机, 代码追求 1 行流, 恐怕你看不懂, 不知道怎么改吧? 这就尴尬了.
    4. 你删了 原作者 部分代码, 你知道 `你删除那部分的代码` 用意是什么吗?
    5. 学习, 借鉴, 分享, 都不可耻. 前提是首先尊重他人成果. 借鉴他人的成果, 要注明.
    6. 点进你的个人简介, 看是 20 岁的学生, Python 代码 1 行流, 写的这么溜. 显然 Python 基础不错啊, 这是个好苗子, 可惜被打脸了哇. 你这种不端正的学习态度, 如果不纠正, 会误你一生的.
    7. 这位同学, 念你还没毕业, 好好反思一下吧. 以后进了社会, 没人给你犯错的机会. 你每一次试错, 都要付出巨大的代价.


    ==============================

    路过同学, 可以仔细对比一下 原作者的代码, 和 这位 抄袭者的. 高下立判.

    原作者:
    https://github.com/zwczou/weixin-python/blob/master/weixin/pay.py

    该抄袭同学:
    https://github.com/Jolly23/wx_pay_python/blob/master/wx_pay.py

    企图蒙混的示例:
    https://github.com/zakzou/flask-weixin-pay/blob/master/example.py
        75
    frozenshadow   2016-12-22 10:04:53 +08:00
    刚要赞,好尴尬。。
        76
    kghch   2016-12-22 10:12:48 +08:00
    注释都要照抄,这好尴尬,我赶紧 unstar 了...
        77
    Jolly23   2016-12-22 10:14:03 +08:00
    微信支付功能集,前期开发借鉴 https://github.com/zakzou/flask-weixin-pay ,抱歉不是在 fork 上改动是因为几个月前就开始带到项目中使用,改进包括让其脱离 flask 框架限制,并且加入微信支付最新的两个营销功能,然后从我的工程代码提出来这个底层类发布。向前辈致谢
        78
    sevncz   2016-12-22 10:15:41 +08:00
    收回我的 star
        79
    hhstore   2016-12-22 10:16:37 +08:00
    @zwczou 这个是原作者吗? 2333.

    小吐槽下:
    代码风格, 过于追求 Python 代码 1 行流, 不利于团队带新手.
    另外, 代码还是写的挺优雅.老司机开车, 稳!

    ========================

    围观群众应该去 star 原作者哇.
        80
    Jolly23   2016-12-22 10:17:28 +08:00
    @hhstore 感谢指正,但贴那个地址并不是企图蒙混过关,是真的开始就看的那个代码啊,上面有我的 contribure
        81
    Yc1992   2016-12-22 10:23:21 +08:00
    @Jolly23 别洗了,大大方方承认,把 repo 删了重新做人。
        82
    wpby   2016-12-22 10:23:26 +08:00
    这就很尴尬了 大兄弟
        83
    vugusurk   2016-12-22 10:24:30 +08:00
    开撕开撕
        84
    bonfy   2016-12-22 10:44:10 +08:00
    这里我也来列下人物清单

    主要当事人:

    - 楼主 [zwczou]( https://github.com/zwczou)
    - 20 岁 CTO [Jolly23]( https://github.com/jolly23)

    目前情况 20 岁 CTO Star > 楼主

    另外几个隐藏人物(有可能是楼主马甲,猜测,如果不是而且后续乱入的话故事会有新剧情。。。。)

    - 原始版 flask-weixin-pay [zakzou]( https://github.com/zakzou)
    - 原始版 flask-weixin-pay 主要代码贡献 [zaczwc]( https://github.com/zaczwc)

    我只想说如果这些都是楼主马甲,请老司机你以后上路别挂这么多马甲啊,我找得都累。。。
        85
    Jolly23   2016-12-22 10:45:15 +08:00
    首先说一句抱歉
    1. 解释下为什么贴的是另一个项目地址,并不是像 @hhstore 说的企图蒙混过关,开始开发是在几个月前,当时是从知乎上跳到 zakzou 那个 flask 微信支付项目中,当时直至昨天都不知道 zwczou 的代码和 zakzou 的代码一样,刚开始写是参照 zakzou 的,并且也提过 contribute ,现在发现他的和 zwczou 的代码一样, https://github.com/zakzou/flask-weixin-pay
    2. 刚发布那个帖子也没想到会有这么多的关注,虽然在 zakzou 代码上有改进,把 zakzou 的工程脱离了 flask 框架限制并加了几个新的营销功能,但大部分还是大部分使用了原来开源的代码,现在发现可能他的代码也是从 zwczou 那 copy 的,所以我现在也是间接 copy 了 zwczou 的代码,真的抱歉。
    3. 公司是我在大学时期创建的,法人不是我,聘请一些在读研究生做员工。
    4. 对我个人行为感到遗憾和后悔,发布没有好好考虑到原代码提供者版权问题,对不起。希望大家能原谅,给我改过的机会。以后发布代码更加遵守版权问题。对不起。已在 github 补充了说明情况。
    5. 向前辈致敬,同时也对前辈说一声对不起,对大家说声对不起。今后增强自己对于版权保护的认识,更加充分尊重原作者,抱歉。
        86
    bonfy   2016-12-22 10:46:16 +08:00
    @bonfy 从另外那里拷贝来的,此楼主 和 彼楼主 自行脑补,反了就反了吧
        87
    soli   2016-12-22 10:49:17 +08:00
    原作者 @zwczou 表现的很淡定哈。无论是回复还是另开一帖,都只是说代码问题,不对『抄袭』置评。
    可见心胸大度能容人。

    反观一些吃瓜群众,那么着急跳脚。。。
        88
    chuhemiao   2016-12-22 12:13:42 +08:00
    @ty89 说好的不撕, 2 楼情何以堪。。。
        89
    fxxkgw   2016-12-22 12:39:24 +08:00
    坦白说这代码写的真好 看着舒服 比我强多了 我仔细看了好几遍。。 心里暗暗佩服 LZ 。。。不过看了回帖就不知道怎么说了 总之感谢分享
        90
    ybh37   2016-12-22 13:18:53 +08:00
    V2 正能量啊
        91
    ahkxhyl   2016-12-22 19:32:51 +08:00
    python 功能这么强 刚刚入门 才看几天的手册 得坚持下去~ 感谢分享~~
        92
    billowqiu   2016-12-23 09:21:53 +08:00
    20 岁 CTO ,服啊
        93
    wudanyang   2016-12-25 18:28:18 +08:00
    @chuhemiao 看完二楼,满满的正能量,接着往下看,画风有点不太对啊
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2376 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 38ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    ♥ Do have faith in what you're doing.