返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python开发微信支付的注意事项
  • 130
分享到

利用Python开发微信支付的注意事项

注意事项Python 2022-06-04 18:06:52 130人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 微信支付是由微信及财付通联合推出的移动支付创新产品。如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及商家申请微信支付时,面临着诸多疑惑。 要想开发顺利进行,首先要对业务

前言

微信支付是由微信及财付通联合推出的移动支付创新产品。如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及商家申请微信支付时,面临着诸多疑惑。

要想开发顺利进行,首先要对业务流程有个清晰的认识。这里以微信公众号支付为例,因此也借用微信支付官方文档中的业务流程图:

查看图片

接下来来关注几个开发过程中的关键点,包括:

1、生成商户订单与调用统一下单 api

2、微信服务器交互的数据格式

3、公众号支付下网页内通过 js-API 调起支付

4、异步通知商户支付结果(回调)

一、生成商户订单与调用统一下单 API

这对应业务流程中的第 4 和 第 5 步,商户后台首先为用户生成订单,然后调用微信的【统一下单】接口向微信支付系统提交订单。这里有一个关键点就是签名的生成。

简单来讲分为以下几个步骤:

1、将所有有效参数以“k=v”的形式进行拼接,有效参数是指非空参数,也就是说如果参数为空,则不参与签名;

2、将所有的“k=v”对用“&”连接,得到“k1=v1&k2=v2&k3=v3”这样的字符串

3、将微信支付 API 密钥 拼接在最后,如“k1=v1&k2=v2&k3=v3&key=secret”;

4、对整体进行 MD5 运算,即得到签名。

这种签名方法有一个高大上的名字叫做 HMac(Hash-based Message Authentication Code,基于哈希的消息码)。基于此思路,可以实现如下签名方法:


def gen_sign(params, key):
  """
  签名生成函数
 
  :param params: 参数,dict 对象
  :param key: API 密钥
  :return: sign string
  """
 
  param_list = []
  for k in sorted(params.keys()):
    v = params.get(k)
    if not v:
      # 参数的值为空不参与签名
      continue
    param_list.append('{0}={1}'.fORMat(k, v))
  # 在最后拼接 key
  param_list.append('key={}'.format(key))
  # 用 & 连接各 k-v 对,然后对字符串进行 MD5 运算
  return md5('&'.join(param_list).encode('utf8')).hexdigest()

参与签名的参数中有一个随机字符串,在 python 中有很多方法,当然也可以利用 uuid 库来生成:


def gen_nonce_str():
  """
  生成随机字符串,有效字符a-zA-Z0-9
 
  :return: 随机字符串
  """
 
  return ''.join(str(uuid.uuid4()).split('-'))

二、微信服务器交互的数据格式

微信服务器与商户服务器之间采用 XML 格式进行交互,这就涉及到与语言原生数据类型进行转换以方便处理。交互的数据参数都是 key-value 的形式,因此在 Python 中使用字典会更加方便。而要解析 XML,也有一大把第三方库供使用,比如 BeautifulSoup。

以下是具体实现:


def trans_xml_to_dict(xml):
  """
  将微信支付交互返回的 XML 格式数据转化为 Python Dict 对象
 
  :param xml: 原始 XML 格式数据
  :return: dict 对象
  """
 
  soup = BeautifulSoup(xml, features='xml')
  xml = soup.find('xml')
  if not xml:
    return {}
 
  # 将 XML 数据转化为 Dict
  data = dict([(item.name, item.text) for item in xml.find_all()])
  return data
 
 
def trans_dict_to_xml(data):
  """
  将 dict 对象转换成微信支付交互所需的 XML 格式数据
 
  :param data: dict 对象
  :return: xml 格式数据
  """
 
  xml = []
  for k in sorted(data.keys()):
    v = data.get(k)
    if k == 'detail' and not v.startswith('<![CDATA['):
      v = '<![CDATA[{}]]>'.format(v)
    xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))
  return '<xml>{}</xml>'.format(''.join(xml))

注意 detail 参数,即商品详情,其值为 JSON 格式,在转换为 XML 数据时应前注意使用 CDATA 标签将其保护起来。

如:


<detail><![CDATA[{"Goods_detail": [{"wxpay_goods_id": "10010001", "price": 1, "goods_num": 1, "goods_name": "\u82f9\u679c", "goods_id": "10010001"}, {"wxpay_goods_id": "10010002", "price": 1, "goods_num": 1, "goods_name": "\u9999\u8549", "goods_id": "10010002"}]}]]></detail>

三、公众号支付下网页内通过 JS-API 调起支付

这一点对应业务流程中的第 7 步。之所以提及它是因为微信官方文档在此给开发者挖了一个坑(至少截至我在写这篇文章时是的),就是在“网页端调起支付API”中关于 JS 的示例代码是采用的 WeixinJSBridge,这在很早以前就是 Deprecated 的“玩意儿”,如今更是已经不可用了。正确的做法是使用 JS-SDK,可以参考微信公众号的 wiki。

使用 JS-SDK 前需要先调用 config,这里也包含一个签名,但注意这个签名与之前微信支付的签名并不相干。其首先需要用微信公众号的 APPID 和 APPKEY 来换取 access_token,然后用该 access_token 调用 JS-SDK 换取 ticket 的接口得到 ticket,最后再使用该 ticket 和用户当前页面的 URI 通过 sha1 运算生成签名。

在此之后,即可调用 wx.chooseWXPay 来调起支付,这里也有一个坑:timestamp。wx.chooseWXPay 中的参数要求 timestamp 是全小写。而微信支付中签名时要求 timestamp 中的“s”是大写。真的是要傻傻分不清了。

四、异步通知商户支付结果(回调)

最后是关于异步回调,对应业务流程中的第 10 步。在用户支付操作完成后,微信服务器会通过回调的形式告知商户服务器支付结果。回调的地址与【统一下单】中定义的 notify_url 一致。当接收到回调时,首先应验证签名的有效性以保证“来源可靠”,然后可以通过回调中所带的 openid、out_trade_no 等来定位唯一订单。

总结

微信支付还有很多种形式,在业务流程上也不尽相同。不过只要能玩转其中一种,其他的也基本来说能很快实现。另外,支付功能的实现涉及业务流程中的安全性,因此一定要注意理清业务流程,并卡好各个关键结点。以上就是本文的全部内容,希望对大家使用python开发微信支付能有所帮助。

--结束END--

本文标题: 利用Python开发微信支付的注意事项

本文链接: https://lsjlt.com/news/14355.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Python开发微信支付的注意事项
    前言 微信支付是由微信及财付通联合推出的移动支付创新产品。如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及商家申请微信支付时,面临着诸多疑惑。 要想开发顺利进行,首先要对业务...
    99+
    2022-06-04
    注意事项 Python
  • 微信小程序开发要注意哪些事项
    本篇内容介绍了“微信小程序开发要注意哪些事项”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!微信小程序开发之注册小程序在开发小程序之前,首先就...
    99+
    2023-06-27
  • 开发微信小程序要注意哪些事项
    这篇文章主要讲解了“开发微信小程序要注意哪些事项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“开发微信小程序要注意哪些事项”吧! 微信小程序官方给出的定义是: 微信小程序是一种不需要下载安装...
    99+
    2023-06-26
  • iOS开发微信支付的方法
    本文实例为大家分享了iOS开发微信支付的具体代码,供大家参考,具体内容如下 首先我们到微信开放平台,下载相应的SDK。微信的官方文档感觉说的很简单,没有支付宝那么详细,在这里说下集成...
    99+
    2024-04-02
  • 微信小程序开发要注意的事项有哪些
    这篇文章主要介绍了微信小程序开发要注意的事项有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发要注意的事项有哪些文章都会有所收获,下面我们一起来看看吧。1、微信小程序开发注意是否导航明确有非常完...
    99+
    2023-06-27
  • Vue3+h5项目用Android支付宝打开白屏,android微信+IOS微信、支付宝打开正常
    问题:使用vue3写的H5网页,用Android支付宝打开title能显示,内容全是白屏。 推测:浏览器内核问题; 微信使用腾讯x5内核,IOS使用系统浏览器内核;so,看看Android支付宝APP使用的内核是什么. 下拉看到支付宝使用的...
    99+
    2023-09-14
    javascript 前端
  • PHP中如何进行支付宝和微信支付的开发?
    PHP是一种流行的服务器端编程语言,它在互联网应用中得到了广泛的应用。在电商等交易场景中,支付宝和微信支付是目前最为流行的支付方式之一。本文将介绍如何使用PHP进行支付宝和微信支付的开发。一、支付宝支付的开发注册开发者账号在支付宝官网注册开...
    99+
    2023-05-14
    PHP 微信支付 支付宝支付
  • 微信小程序开发需要注意事项有哪些
    这篇“微信小程序开发需要注意事项有哪些”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“微信小程序开发需要注意事项有哪些”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下...
    99+
    2023-06-26
  • 微信小程序中页面开发注意事项有哪些
    这篇文章主要介绍微信小程序中页面开发注意事项有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!小程序的开发注意事项:1、js文件每个页面对应的js文件可以定义页面onReady,o...
    99+
    2024-04-02
  • Python开发注意事项:处理大数据和高并发时的注意事项
    随着互联网和移动互联网的快速发展,大数据和高并发成为了互联网行业中一项极为重要的技术挑战。Python 作为一种流行的编程语言,在处理大数据和高并发方面也变得越来越受欢迎。然而,与此同时,处理大数据和高并发时也存在着一些需要注意的技术细节和...
    99+
    2023-11-22
    大数据处理: Spark)并合理划分任务 减少内存占用。
  • Python开发注意事项:处理数据时的注意事项和技巧
    Python开发是一项广泛应用的编程任务,无论是数据分析、机器学习、Web开发还是其他领域,都可以借助Python来完成。在处理数据时,有一些注意事项和技巧,可以帮助开发者更高效地完成任务和避免潜在的问题。本文将介绍一些Python开发中处...
    99+
    2023-11-22
    数据处理技巧: 数据转换 数据处理技巧: 数据分析
  • 微信小程序发布要注意哪些事项
    审核要求:确保你的小程序符合微信官方的审核要求,不违反相关规定。如果出现违规情况,可能会导致小程序被封禁或下架。 版权保护:...
    99+
    2024-04-02
  • Python开发注意事项:处理并发和分布式系统时的注意事项
    Python开发注意事项:处理并发和分布式系统时的注意事项随着互联网的快速发展,越来越多的软件系统需要处理并发性和分布式计算。Python作为一种灵活且易于使用的编程语言,被广泛应用于这些领域。然而,处理并发和分布式系统时,Python开发...
    99+
    2023-11-23
    注意事项 Python并发编程 分布式Python
  • Python开发注意事项:处理文件和IO操作时的注意事项
    Python作为一种功能强大且易于学习的编程语言,在开发过程中经常涉及处理文件和IO操作。然而,在处理文件和IO操作时,开发者需要注意一些重要事项,以确保代码的稳定性和可靠性。本文将就Python开发中处理文件和IO操作时的注意事项进行探讨...
    99+
    2023-11-22
    文件处理:文件IO 异常处理:错误处理 性能优化:性能调优
  • 微信小程序微信支付接入开发的示例分析
    这篇文章将为大家详细讲解有关微信小程序微信支付接入开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。内容如下:一、后台接口封装;二、小程序端整合;三、总结一、后...
    99+
    2024-04-02
  • Python开发注意事项:处理多线程和多进程时的注意事项
    Python开发注意事项:处理多线程和多进程时的注意事项在Python开发过程中,使用多线程和多进程可以充分利用计算机的多核处理能力,提高程序的效率和性能。然而,使用多线程和多进程也会带来一些潜在的问题和挑战,开发者需要注意一些注意事项来确...
    99+
    2023-11-22
    gil Concurrency Locks
  • 微信支付用的数据库开源了
    腾讯TBase是一款腾讯自研高性能HTAP数据库,提供 高性能的OLTP和OLAP能力,同时保证 可扩展全局一致性分布式事务(ACID),为用户提供高一致性的分布式数据库服务和高性能的数据仓库服务。一方面解...
    99+
    2024-04-02
  • Python开发注意事项:避免常见的网络通信问题
    Python作为一种灵活且易于学习的编程语言,已经成为了许多开发人员的首选。在进行Python开发时,网络通信是一个非常重要的方面。本文将介绍一些常见的网络通信问题,并提供一些建议以帮助开发人员避免这些问题。首先,一个常见的问题是网络连接超...
    99+
    2023-11-22
    网络 Python 通信
  • 小程序怎么开发调用微信支付及微信回调地址
    本篇内容主要讲解“小程序怎么开发调用微信支付及微信回调地址”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“小程序怎么开发调用微信支付及微信回调地址”吧!首先观看微信提供的文档https://pay...
    99+
    2023-06-30
  • 微信JSAPI支付操作需要注意的细节有哪些
    这篇文章主要为大家展示了“微信JSAPI支付操作需要注意的细节有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信JSAPI支付操作需要注意的细节有哪些”这...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作