做了京东,支付宝和微信的python版本支付,发现只有微信支付开发文档是最用心去做的,讲解的非常仔细,还有大量的伪代码,说实话,实现起来真是没有难度,只是前期准备的东西有很多,比如要申请各种认证,至少到目前为止,我没有发现诸如京东支付或者支付宝支付那样的测试环境供普通开发者去调试

技术描点

微信支付方式非常多,详见:https://pay.weixin.qq.com/wiki/doc/api/index.html。

我在这里是用的扫码支付,用于pc网站。首先要准备的是两个重要的帐号:公众帐号ID和商户号。所以要先去以公司的名义申请商户资质

各种申请好了之后,找到【公众帐号ID】和【商户号】就可行,【公众帐号ID】藏的比较隐秘,不太好找,要用心找。

扫描支付有两种模式:模式一和模式二:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5

我推荐使用模式二,应该说也是官方推荐的,因为它简化了很多步骤,让流程更容易让开发者理解

业务流程说明:

(1)商户后台系统根据用户选购的商品生成订单。
(2)用户确认支付后调用微信支付【统一下单API】生成预支付交易;
(3)微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url。
(4)商户后台系统根据返回的code_url生成二维码。
(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
(6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。
(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。
(8)微信支付系统根据用户授权完成支付交易。
(9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。
(10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。
(11)未收到支付通知的情况,商户后台系统调用【查询订单API】。
(12)商户确认订单已支付后给用户发货。

看了上面的流程简介,是不是感觉非常简单

一. 统一下单API

接口:https://api.mch.weixin.qq.com/pay/unifiedorder

接口参数说明:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

二. 签名

微信的签名是三种支付方式中最简单的,没有使用公私钥的非对称加解密验签,而是用的MD5(注意在商户平台里设置MD5)。

详情请见:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3

看看人家的签名步骤,就差在你背后教你手写代码了。还是公司大啊

签名完的xml格式:

<xml><appid>wx2421b1c4370ec43b</appid><attach>支付测试</attach><body>JSAPI支付测试</body><mch_id>10000100</mch_id><detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail><nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str><notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url><openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid><out_trade_no>1415659990</out_trade_no><spbill_create_ip>14.23.150.211</spbill_create_ip><total_fee>1</total_fee><trade_type>JSAPI</trade_type><sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>

然后用requests库发送一个post请求就ok了

三. 生成二维码

在下单成功之后,会返回二维码的内容,拿到这个之后,自己在后台生成一个二维码图片给用户就可以了,是不是非常简单。

四. 异步回调

在用户扫码并支付成功之后,老规矩会触发一个异步通知,这个通知会通知支付的状态,一定要以这个通知为标准。处理完逻辑之后,一定要记得返回一个确认信息给微信

# 在处理好之后,一定要返回给微信
xml_str = MxPay.get_xml({"return_code": "SUCCESS"})
return HttpResponse(xml_str)

而且一定要记住,当用户支付成功之后,会不停的往你设定的这个异步回调地址发post请求,直到你回复了,才停止发送。所以在处理的时候,一定要判断是否处理过了

五. 申请退款

涉及到退款,那可马虎不得,微信也说了,下单随便下,退款那得慢慢来。所以在这里退款的操作,要特别注意的是需要带证书(微信支付签发的)

requests.post(url, data=json.dumps(xml_str, ensure_ascii=False),cert=(self.API_CLIENT_CERT_PATH, self.API_CLIENT_KEY_PATH))

整体来说,微信支付很简单,看看文档肯定是没有问题的。

setting文件的一些配置

# 微信分配的公众账号ID
APP_ID = "wx6534240dfae560"
# 微信支付分配的商户号
MCH_ID = "13459829292"
# 私钥(在商户后台设置的就是这个值,注意修改任何一段需要同步修改)
WX_MCH_KEY = "D3EG723wIxgv2jnEgkr38yNJ8cP05D6aoT"# 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
ASYN_NOTIFY_URL = "http://xxxxxx.com:8888/test/weixin/"# 统一下单地址
ORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder"# 查询订单url
SEARCH_URL = "https://api.mch.weixin.qq.com/pay/orderquery"
# 关闭订单url
CLOSE_URL = "https://api.mch.weixin.qq.com/pay/closeorder"# 申请退款url
REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund"# 查询申请退款
SEARCH_REFUND_URL = "https://api.mch.weixin.qq.com/pay/refundquery"# 服务器存放证书路径(微信支付签发的)
API_CLIENT_CERT_PATH = "/path/your/cert/apiclient_cert.pem"
API_CLIENT_KEY_PATH = "/path/your/cert/apiclient_key.pem"

BT搜索    BT蚂蚁

python开发微信扫码支付相关推荐

  1. Vue前端开发——微信扫码支付

    1.安装 qrcodejs2 (注意:安装的是qrcodejs2,不要安装qrcode ---> 会报错) npm install qrcodejs2 --save 2.Course.vue中页 ...

  2. 微信公众平台开发[5] —— 微信扫码支付介绍

    背景:因为微信占据众多的用户群,作为程序开发,自然而然也成了研究的重点.毕竟个人能力有限,很难想象设计的复杂性,多数时间接触起来,各种蒙圈,在此笔记自己的操作流程,仅做参考,欢迎指正. 一.微信扫码支 ...

  3. 网站微信扫码支付java开发

    网站微信扫码支付java开发 一.网站微信扫码支付开发并没有现成的java示例,总结一下自己微信扫码支付心得 二.首先去微信公众平台申请账户 https://mp.weixin.qq.com ** 三 ...

  4. JAVA微信扫码支付及微信App支付开发(模式二)完整功能实现

    一,准备工作 事前申请一个商家版的微信公众号(目前微信支付只有商家版公众号可开通),然后开通微信支付功能,并做相应的配置. 申请开通微信公众号和开通微信支付需要等待审核,一般都5个工作日左右.开通成功 ...

  5. 微信公众号开发之扫码支付

    此项目已开源欢迎Start.PR.发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen20 ...

  6. 微信 扫码支付模式二 开发

    概要 主要记录自己的开发流程,使用的springMVC 支付流程 引入相关依赖 <!-- 微信支付 --> <dependency><groupId>com.git ...

  7. 2021年django微信扫码支付流程--全攻略(阻止回调请看下一章)

    PC端,微信扫码支付, 我们产生支付二维码后,等用户支付, 用户扫码支付成功后,我们接收腾迅的回调数据 但是我们如果不阻止回调,则我们的服务器会被腾迅请求很多次在几个小时之内, 所以我们一定要阻止回调 ...

  8. 微信扫码支付官方配置(一)

    微信扫码支付官方API: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 .net C# SDK: https://pay. ...

  9. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment(https://github.com/Essensoft/Pa ...

  10. 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

最新文章

  1. php日期时间戳相互转换,PHP时间戳和日期相互转换
  2. pytorch 区间loss 损失函数
  3. oracle 数据库备份恢复
  4. Dijkstra的理解和实现
  5. 登录页面html5 css3 js代码,H5+css3+js搭建带验证码的登录页面
  6. 蓝桥杯 ALGO-62 算法训练 平方计算
  7. 《转载》python爬虫实践之模拟登录
  8. 半小时实现Java手撸网络爬虫框架!!(附完整源码,建议收藏)
  9. IDEA设置护眼浅绿色背景
  10. 每天一个RL基础理论(7)——总结篇
  11. JAVA编程学习记录(内部类)
  12. Excel函数之~计算日期、天数、星期
  13. 检查内存泄露的利器--VLD使用指南
  14. 2020南京大学软件学院夏令营模拟机试题集
  15. 什么是百度信息流广告?
  16. Keil uVision5 界面模糊(优化)变清晰
  17. 7.最大最小距离算法与最大最小距离
  18. 《勋伯格和声学》读书笔记(十三):在调性的边缘(对减七和弦和增七和弦及其转位和弦的进一步观察)
  19. python实现水仙花数判断
  20. 银河麒麟(linux arm64)安装新版谷歌浏览器

热门文章

  1. 手把手从零开始学习树莓派教程
  2. VS2012安装部署教程
  3. Windows PE的DIY你都会:那你的电脑知识已经超越了90%的人
  4. table导出excel php_php导出excel表格的方法分享(代码)
  5. 互联网晚报 | 7月27日 星期三 | 微信安装包11年膨胀575倍;阿里申请香港纽约双重主要上市;苹果应用商店被曝大量色情应用...
  6. 捻花成佛:成为股市高手需要读多少书
  7. 关于java就业的简历模板,工作一年java简历模板
  8. 经纬度转换,度转度分秒,度分秒转为度,前端js
  9. Xcode9 调整模拟器大小
  10. 蓝宝石rx470d原版bios_小白福利教程:关于显卡BIOS的一些信息的讲解