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

2 importrequests3 importhashlib4 importxmltodict5 importtime6 importrandom7 importstring8 importurllib29 importsys10

11

12 classWX_PayToolUtil():13 """微信支付工具"""

14

15 def __init__(self, APP_ID, MCH_ID, API_KEY, NOTIFY_URL):16 self._APP_ID = APP_ID #小程序ID

17 self._MCH_ID = MCH_ID ## 商户号

18 self._API_KEY =API_KEY19 self._UFDODER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder" #接口链接

20 self._NOTIFY_URL = NOTIFY_URL #异步通知

21

22 defgenerate_sign(self, param):23 '''生成签名'''

24 stringA = ''

25 ks =sorted(param.keys())26 #参数排序

27 for k inks:28 stringA += (k + '=' + param[k] + '&')29 #拼接商户KEY

30 stringSignTemp = stringA + "key=" +self._API_KEY31 #md5加密,也可以用其他方式

32 hash_md5 = hashlib.md5(stringSignTemp.encode('utf8'))33 sign =hash_md5.hexdigest().upper()34 returnsign35

36 '''

37 # python2另外一种实现方法38 def generate_sign(self, params):39 ret = []40 for k in sorted(params.keys()):41 if (k != 'sign') and (k != '') and (params[k] is not None):42 ret.append('%s=%s' % (k, params[k]))43 params_str = '&'.join(ret)44 params_str = '%(params_str)s&key=%(partner_key)s' % {'params_str': params_str, 'partner_key': key}45

46 reload(sys)47 sys.setdefaultencoding('utf8')48

49 params_str = hashlib.md5(params_str.encode('utf-8')).hexdigest()50 sign = params_str.upper()51 return sign52 '''

53

54 def getPayUrl(self, orderid, openid, goodsPrice, **kwargs):55 """向微信支付端发出请求,获取url"""

56 key =self._API_KEY57 nonce_str = ''.join(random.sample(string.letters + string.digits, 30)) #生成随机字符串,小于32位

58 params ={59 'appid': self._APP_ID, #小程序ID

60 'mch_id': self._MCH_ID, #商户号

61 'nonce_str': nonce_str, #随机字符串

62 "body": '测试订单', #支付说明

63 'out_trade_no': orderid, #生成的订单号

64 'total_fee': str(goodsPrice), #标价金额

65 'spbill_create_ip': "127.0.0.1", #小程序不能获取客户ip,web用socekt实现

66 'notify_url': self._NOTIFY_URL,67 'trade_type': "JSAPI", #支付类型

68 "openid": openid, #用户id

69 }70 #生成签名

71 params['sign'] =self.generate_sign(params)72

73 #python3一种写法

74 param = {'root': params}75 xml =xmltodict.unparse(param)76 response = requests.post(self._UFDODER_URL, data=xml.encode('utf-8'), headers={'Content-Type': 'text/xml'})77 #xml 2 dict

78 msg =response.text79 xmlmsg =xmltodict.parse(msg)80 #4. 获取prepay_id

81 if xmlmsg['xml']['return_code'] == 'SUCCESS':82 if xmlmsg['xml']['result_code'] == 'SUCCESS':83 prepay_id = xmlmsg['xml']['prepay_id']84 #时间戳

85 timeStamp =str(int(time.time()))86 #5. 五个参数

87 data ={88 "appId": self._APP_ID,89 "nonceStr": nonce_str,90 "package": "prepay_id=" +prepay_id,91 "signType": 'MD5',92 "timeStamp": timeStamp,93 }94 #6. paySign签名

95 paySign =self.generate_sign(data)96 data["paySign"] = paySign #加入签名

97 #7. 传给前端的签名后的参数

98 returndata99

100 #python2一种写法

101 '''

102 request_xml_str = ''103 for key, value in params.items():104 if isinstance(value, str):105 request_xml_str = '%s<%s>%s%s>' % (request_xml_str, key, value, key,)106 else:107 request_xml_str = '%s<%s>%s%s>' % (request_xml_str, key, value, key,)108 request_xml_str = '%s' % request_xml_str109

110 # 向微信支付发出请求,并提取回传数据111 res = urllib2.Request(self._UFDODER_URL, data=request_xml_str.encode("utf-8"))112 res_data = urllib2.urlopen(res)113 res_read = res_data.read()114 doc = xmltodict.parse(res_read)115 return_code = doc['xml']['return_code']116 if return_code == "SUCCESS":117 result_code = doc['xml']['result_code']118 if result_code == "SUCCESS":119 doc = doc['xml']120 data = {121 "appId": self._APP_ID,122 "nonceStr": nonce_str,123 "package": "prepay_id=" + doc["prepay_id"],124 "signType": 'MD5',125 "timeStamp": str(int(time.time())),126 }127 # paySign签名128 paySign = self.generate_sign(data)129 data["paySign"] = paySign # 加入签名130 return data131 else:132 err_des = doc['xml']['err_code_des']133 return err_des134 else:135 fail_des = doc['xml']['return_msg']136 return fail_des137 '''

python开发微信小程序-Python实现微信小程序支付功能相关推荐

  1. pythonarcgis插件_【直播】基于Python开发ArcGIS插件:Python Add-in丨城市数据派

    原标题:[直播]基于Python开发ArcGIS插件:Python Add-in丨城市数据派 Add-in是什么? Add-in(加载项)是一种自定义项(例如工具栏上的工具集合),Add-in可以插入 ...

  2. python开发能做什么-python能做什么?是什么?

    python能做什么?是什么? Python是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年.可以视之为一种改良的LISP.Python的设计哲学强调代码 ...

  3. 魔兽世界也是Python开发的?盘点Python开发的知名网站和游戏!

    我们都知道,Python不仅在数据分析.人工智能方面有着广泛的应用,在网站开发.游戏开发方面更是一枝独秀. 今天小编就带大家盘点一下,哪些知名的大型公司和网站在用Python开发,以及用Python开 ...

  4. 在Eclipse中搭建Python开发环境之三新建python 提示django not found

    python 不是内部或外部命令 现在我假设你的python安装在C:\Python26目录下,设置环境变量方法如下: 方法一.我的电脑->属性->高级->环境变量->系统变量 ...

  5. 纯 python 开发批量读取照片 Exif 信息的小程序

    自己动手写一些小程序解决工作中的问题,是学习 python 的高效途径.这中间会遇到一些不动手想不到的问题,一个一个地解决它们,你 python 开发水平就会突飞猛进! 本文总结一下实战 python ...

  6. python开发的gui界面,python写gui应用程序

    python 编写gui界面有哪些 安装wxPython下面是wxPython特别基础的使用方法,将以一个小程序为例来说明,它的功能是在一个文本框中输入文件名,点击open按钮,会在另一个文本框中显示 ...

  7. 安卓手机python开发环境_使用Python开发Android应用程序:第一节 在手机上配置Python运行环境...

    本节目录: 1.下载和安装 Scripting Layer for Android (SL4A) 2.下载和安装 Python for android 3.第一个HelloWorld程序 1.下载和安 ...

  8. python开发软件行么-python适合开发桌面软件吗?

    其实Python/Java/PHP都不适合用来做桌面开发,Java还是有几个比较成熟的产品的,比如大名鼎鼎的Java集成开发环境IntelliJ IDEA.Eclipse就是用Java开发的,不过PH ...

  9. python开发职位_【python开发岗位职责|python开发是做什么的】-看准网

    发展历程 自从2世纪9年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程. Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Gu ...

  10. python anaconda下载包_【Python开发】anaconda3 安装python包

    环境说明电脑配置:win7 64位安装版本:anaconda3 Python 3.6参考链接http://python.jobbole.com/86236/(链接中有一个小点介绍了如何加速包的下载)h ...

最新文章

  1. 云计算将成为媒体融合发展与数字化变革的加速剂
  2. 如何在Eclipse中添加新建包,java文件,工程工具栏按钮
  3. ipython jupyter区别_ipython jupyter notebook中显示图像和数学公式实例
  4. 领航物联网智能操作系统,指令集完成过亿元 A 轮融资
  5. 《上海悠悠接口自动化平台》-4.注册用例集实战演示
  6. 生成项目有roslyn_Roslyn的代码生成:UML的骨架类
  7. 如何提取网易公开课的音频
  8. 南通全国计算机等级考试,南通大学2017年3月全国计算机等级考试报名通知
  9. 2022年N1叉车司机考试题目及答案
  10. 数据挖掘十大算法(九):朴素贝叶斯原理、实例与Python实现
  11. python根据关键字爬取微博_Python 超简单爬取微博热搜榜数据
  12. 解决Ubuntu 20.04挂载NTFS分区不能写入(只读权限)的问题
  13. html中div排版布局
  14. wi ndows怎么自动编页,15个小技巧,让我的Windows电脑更好用了!
  15. Linux下C/C++实现(网络流量分析-NTA)
  16. gitlab 更新文件_烂泥:gitlab版本升级
  17. 分数指数幂计算机,分数指数幂的教案
  18. 女软件工程师的征友PPT
  19. FICO配置详解之四:成本中心会计
  20. php gmail smtp,使用PHP通过Gmail SMTP发送电子邮件

热门文章

  1. 面试简单整理之spring、spring mvc
  2. coursera—吴恩达Machine Learning笔记(1-3周)
  3. Java8 forEach
  4. js 数组,字符串,JSON,bind, Name
  5. 计算机数字信号原理,计算机网络通信原理数字信号的基带传输.ppt
  6. python手机版做小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏...
  7. 有没有python与机械结合的工作-用 Python 自动化办公,我与大神之间的差距一下就...
  8. python3.6.5安装-linux安装python3.6.5
  9. python爬虫实战-python爬虫实战一:分析豆瓣中最新电影的影评
  10. python爬虫入门代码-Python爬虫入门