Python实现微信支付集成
作者:书友59082326 | 来源:互联网 | 2024-12-20 17:39
本文详细介绍如何使用Python集成微信支付的三种主要方式:Native支付、APP支付和JSAPI支付。每种方式适用于不同的应用场景,如PC网站、移动端应用和公众号内支付等。
微信支付提供了多种支付方式以适应不同场景的需求。以下是三种常用的支付方式及其适用场景。 ### 1. Native 支付 Native 支付是通过商户系统按照微信支付协议生成支付二维码,用户使用微信“扫一扫”功能完成支付的过程。这种支付方式广泛应用于PC网站、实体店单品或订单支付、媒体广告支付等场景。 ### 2. APP 支付 APP 支付是指在移动端应用程序中集成微信支付SDK,调用微信支付模块完成支付操作。这种方式适用于需要在移动端应用中集成微信支付功能的应用程序。 ### 3. JSAPI 支付 JSAPI 支付是通过调用微信提供的JSAPI接口,在网页或公众号内调起微信支付模块完成支付。这种方式适用于在网页或微信公众账号内进行支付的场景。 #### 应用场景 - **线下场所**:生成二维码供用户扫描后在微信浏览器中打开页面完成支付。 - **公众号场景**:用户在微信公众账号内进入商家页面,通过调用接口完成支付。 - **PC 网站场景**:在网站上展示二维码,用户扫描后在微信浏览器中打开页面完成支付。 #### 创建预支付订单 (Native & APP) 创建预支付订单涉及以下几个步骤: ```python @classmethod def dict_to_xml(cls, data, is_cdata=False): xml = [] for k, v in data.items(): if not is_cdata: xml.append(f'<{k}>{v}{k}>') else: xml.append(f'<{k}>{k}>') return ''.join(xml) def sign(self, data): slist = self._ordered_data(data) slist.append(f'key={self.key}') string = '&'.join(slist) string = hashlib.md5(string.encode('utf-8')).hexdigest().upper() return string def build_body(self, data): data['appid'] = self.appid # 应用ID data['mch_id'] = self.mch_id # 商户号 data['nonce_str'] = self._get_nonce_str() # 随机字符串 data['notify_url'] = self.notify_url # 回调地址 data['sign'] = self.sign(data) return self.dict_to_xml(data) def request(self, url, content, headers=None): if headers is None: headers = {'Content-Type': 'text/xml'} cOntent= self.build_body(content) req = urllib.request.Request(url, data=bytes(content, 'utf-8'), headers=headers) result = urllib.request.urlopen(req, timeout=30).read().decode('utf-8') return result def api_wxpay_unifiedorder(self, body, out_trade_no, spbill_create_ip, total_fee, trade_type, product_id, **kwargs): cOntent= { 'body': body, # 支付订单描述 'out_trade_no': out_trade_no, # 订单编号 'spbill_create_ip': spbill_create_ip, # 终端IP 'total_fee': total_fee, # 商品价格 'trade_type': trade_type, # 交易类型: APP or JSAPI or NATIVE 'product_id': product_id # 商品ID } content.update(kwargs) result = self.request(UNIFIEDORDER_URL, content) return result # 示例调用 wxpay.api_wxpay_unifiedorder( 'wechat_pay_test', out_trade_no, spbill_create_ip, total_fee, 'NATIVE', product_id ) wxpay.api_wxpay_unifiedorder( 'wechat_pay_test', out_trade_no, spbill_create_ip, total_fee, 'APP', appid=APPID ) ``` #### 创建预支付订单 (JSAPI) 对于 JSAPI 支付,创建预支付订单的步骤与上述类似,但需要额外提供用户的 `openid` 和 `appid` 参数。 ```python def api_wxpay_unifiedorder(self, body, out_trade_no, spbill_create_ip, total_fee, trade_type, product_id, open_id, appid, **kwargs): cOntent= { 'body': body, 'out_trade_no': out_trade_no, 'spbill_create_ip': spbill_create_ip, 'total_fee': total_fee, 'trade_type': trade_type, 'product_id': product_id, 'openid': open_id, 'appid': appid } content.update(kwargs) result = self.request(self.config.UNIFIEDORDER_URL, content) return result # 示例调用 applepay.api_wxpay_unifiedorder( 'wechat_pay_test', out_trade_no, spbill_create_ip, total_fee, 'JSAPI', product_id, open_id, appid ) ``` 以上代码展示了如何使用 Python 调用微信支付接口,实现 Native、APP 和 JSAPI 三种支付方式的预支付订单创建。
推荐阅读
本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ...
[详细]
蜡笔小新 2024-12-20 18:36:06
本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ...
[详细]
蜡笔小新 2024-12-20 08:38:38
java文本编辑器,java文本编辑器设计思路 ...
[详细]
蜡笔小新 2024-12-19 21:02:48
Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ...
[详细]
蜡笔小新 2024-12-18 19:30:51
本文介绍了WGS84坐标系统及其精度改进历程,探讨了火星坐标系统的安全性和应用背景,并详细解析了火星坐标与百度坐标之间的转换算法,提供了C#语言的实现代码。 ...
[详细]
蜡笔小新 2024-12-15 20:11:43
本文详细解析了 offset、client 和 page 坐标系统的不同之处。offset 是相对于当前元素的边界框的距离,与滚动条无关;client 是相对于可视区域(viewport)的距离,也与滚动条无关;page 则是相对于整个文档的距离,受滚动条位置影响。 ...
[详细]
蜡笔小新 2024-12-20 17:31:36
本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ...
[详细]
蜡笔小新 2024-12-20 17:24:41
本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ...
[详细]
蜡笔小新 2024-12-20 14:38:17
本文深入探讨了 Exchange Server 2010 中客户端访问的代理和重定向机制,特别是在跨站点环境中如何配置这些功能以确保用户能够顺利访问邮箱服务。通过详细解析不同场景下的应用,帮助管理员更好地理解和实施相关设置。 ...
[详细]
蜡笔小新 2024-12-20 14:18:06
10月标志着BreederDAO踏入Web3.0领域的起点,开启了元宇宙工厂的建设。自成立以来,BreederDAO始终致力于构建多样化的数字资产工厂。 ...
[详细]
蜡笔小新 2024-12-19 19:38:20
本文介绍了如何在Django项目中使用django-crontab库来设置和管理定时任务,包括安装、配置、编写定时任务以及常见问题的解决方案。通过具体实例,帮助开发者快速掌握在Django中实现自动化任务的方法。 ...
[详细]
蜡笔小新 2024-12-19 14:51:39
本文介绍了使用 JavaScript 的 insertAdjacentHTML 和 insertAdjacentText 方法动态向 HTML 页面中添加内容或文本的技术。这些方法允许开发者根据指定的位置精确地插入新的 HTML 或纯文本。 ...
[详细]
蜡笔小新 2024-12-19 13:18:23
探讨如何利用Electron框架,通过拖动HTML元素(如音乐列表项)到桌面来实现本地文件的复制。 ...
[详细]
蜡笔小新 2024-12-19 09:14:47
本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ...
[详细]
蜡笔小新 2024-12-16 09:14:15
本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ...
[详细]
蜡笔小新 2024-12-15 17:19:11
书友59082326
这个家伙很懒,什么也没留下!