关于在微信支付接口和支付宝接口中使用到的辅助函数

刚才在shell中敲代码的时候,习惯性地用tab键去补全,然后就一直报错,所以以后记得不要在vim编写代码的时候去用tab补全。

然后现在是总结一下在生成两个接口数据时使用到的一些辅助函数,因为我自己是先开发微信支付接口使用的,所以先总结微信支付的函数,首先是生成随机字符串,我自己是先生成一个26个小写字母和0到9的数字的字符串,然后从中随机挑选32个字符加入一个list,然后用join联合函数直接组成随机字符串,代码如下:

    def nonce_str(self):
        # 生成随机字符
        chars = ‘abcdefghigklmnopqrstuvwxyz0123456789‘
        strs = []
        for x in range(32):
            strs.append(chars[random.randrange(0, len(chars))])
        return "".join(strs)

然后就是微信支付的计算签名,首先是将已有的键值对按照ascii排序,然后生成型如a=b&c=d的形式,接着将微信提供的商户的密钥也以这种键值对的形式加入到组合字符串当中,然后利用hashlib中的MD5摘要算法对字符串进行加密,然后将生成的签名大写,返回就可以了。

    def sign(self, params):
        # 计算签名
        params_str = "&".join("{0}={1}".format(k, params[k]) for k in sorted(params) if k != ‘sign‘ and params[k])
        params_str = ‘{0}&key={1}‘.format(params_str, self.key)
        params_str = hashlib.md5(params_str.encode(‘utf-8‘)).hexdigest()
        signvalue = params_str.upper()
        return signvalue

因为微信支付只接收xml字符串,所以还需要自己生成xml信息,我采用数组的方式将其对应值生成了数组中的一个元素,最终使用join函数将数组转换为字符串。

    def arrayToXml(self, arr):
        """array转xml,生成订单信息"""
        xml = ["<xml>"]
        for k, v in arr.items():
            xml.append("<{0}>{1}</{0}>".format(k, v))
        xml.append("</xml>")
        return "".join(xml)

相应的,微信返回的信息是xml格式的,所以为了查看返回信息,我是需要去转换格式的,然后我用的是python自带的xml.etree.ElementTree,调用函数的fromstring方法,对xml信息进行解析。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import xml.etree.ElementTree as ET

    def xmlToArray(self, xml):
        """将xml转为array"""
        array_data = {}
        root = ET.fromstring(xml)
        for child in root:
            value = child.text
            array_data[child.tag] = value
        return array_data

然后微信支付的退款接口是需要双向证书验证的,所以我使用了pycurl模块,在我的另一篇随笔中有专门的介绍,然后微信验证还有验证签名和处理回传信息乱码两个问题,验证签名的思路就是把回传的信息进行重新签名,然后拿出来与回传信息中的签名作对比,就可以决定时返回True还是False了。修复回传信息乱码我是直接将回传数据写成字节形式,然后再用utf-8解码。

支付宝接口相对来说就有点不一样了,不过大致思路还是一样的,也是按照相应的要求去生成订单信息。首先支付宝除了公共数据外每一个订单biz_content,所以就要先进行排序,对于参数中某些类型是字典的元素,要利用json的dumps方法将其转变为字符串,最终返回一个排序好了的list,其中每个元素为一个元组。

   def ordered_data(self, data):
        for k, v in data.items():
            if isinstance(v, dict):
                data[k] = json.dumps(v, separators=(‘,‘, ‘:‘))

        return sorted([(k, v) for k, v in data.items()])

然后生成订单信息就和微信支付差不多了,不过签名的方式是完全不一样的,生成签名的方法可以查看支付宝开放文档。

原文地址:https://www.cnblogs.com/zzy0306/p/8409997.html

时间: 2024-08-06 16:44:08

关于在微信支付接口和支付宝接口中使用到的辅助函数的相关文章

微信支付--维权接口开发!

原文链接:http://www.cnblogs.com/True_to_me/p/3663736.html 1.你需确定维权URL通知地址: 在"商户功能→商户信息→修改→维权通知URL"查看维权通知URL.(区分大小写) 2.添加用户维权入口 在服务号自定义菜单添加名称叫"维权"的菜单,该菜单不分层级,不分位置,微信自动跳转到维权页面.. 3.获取维权通知XML数据. 在ResponseHandler类(微信支付----没我想的那么难)添加获取XML参数的方法:

利用微信支付的订单查询接口可以在APP 中提高支付的可靠性

最近公司有一个应用,用户可以在微信公众号上面下单,也可以在APP 中下单. 当用户在公共号上面下单时,微信支付成功可以返回微信支付单号,但是在APP 中用户微信支付时,个别时候会出现用户没有付款成功,却在支付后的回调逻辑中执行了订单支付成功的逻辑. 显然在APP中微信支付的这种回调逻辑是不可靠的. (1)首先说明下为什么要拿到微信支付订单号 微信支付订单号是微信系统在支付成功后返回的订单号,比如这样的订单号:4007322001201705049543255213, 拿到这个订单号可以调用微信查

Android中微信支付的流程(从请求统一支付接口到真正调起微信支付)

在公司做一款电商类的软件,接入支付是必不可少的环节.继上一次集成支付宝以后,微信支付又开启了另一段痛苦的历程.由于以前没有做过微信支付,所以这次在做的过程中还是遇到很大的问题.而且,公司目前没有自己的后台,所有的接口都是外包来承接的,在遇到问题时,外包一般会说,这是封装好的,以前都没有问题.然后,你只能自己查找原因,废话不多说,简单记录一下集成微信的整个过程. 1.微信支付的签名问题(包括微信的分享) 虽然关于微信的签名是个老生常谈的问题了,但是在这里我还是想要简单的描述一下.首先,要得到一个签

php微信支付接口开发程序(一)

阅读对象 本文阅读对象:商户系统(在线购物平台.人工收银系统.自动化智能收银系统或其他)集成微信支付涉及的技术架构师,研发工程师,测试工程师,系统运维工程师. 支付模式 1. 刷卡支付 刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式.主要应用线下面对面收银的场景. 2. 扫码支付 扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式.该模式适用于PC网站支付.实体店单品或订单支付.媒体广告支付等场景. 3. 公众号支付 公众号

浅析微信支付:申请退款、退款回调接口、查询退款

本文是[浅析微信支付]系列文章的第八篇,主要讲解商户如何处理微信申请退款.退款回调.查询退款接口,其中有一些坑的地方,会着重强调. 浅析微信支付系列已经更新七篇了哟-,没有看过的朋友们可以看一下哦. 浅析微信支付:查询订单和关闭订单 浅析微信支付:支付结果通知 浅析微信支付:统一下单接口 在实际场景中,申请退款和退款回调接口是比较常用到的微信支付接口,这里我们会讲原路返回方式的退款,还有的是使用直接为用户付款到零钱.现金红包等方式来退款,此种情况主要会出现在客服退款时,不是全部退款的情况,也有的

微信支付与支付宝钱包的竞争分析

NO1: 十九世纪七十年代起,“物竞天择,适者生存,优胜劣汰”已逐渐成为现代生物学的口号.而今,不知不觉中,它似乎也成了当代社会学的口号.罗素说:“竞争一直是,甚至从人类起源起就是对大部分激烈活动的剌激物.”所谓“长江后浪推前浪”,在人类资讯的迅速积累之下,如果不能追上时代,自然就要被淘汰了.竞争,已经成了当代社会政治经济发展的重要基础与必然趋势. 从远古时期的以物换物,到后来货币的出现,直到宋朝时第一张纸币“交子”问世,随着经济的不断发展,货币的形式也在不断地变化着. 2003年10月18日,

微信支付,支付宝支付,银联支付——三大支付总结

转载:  https://juejin.im/post/596d97576fb9a06bb874a812 银联支付,支付宝支付,微信支付的三大总结,之前也有写过两篇. 微信支付,支付宝支付,银联支付--三大支付总结: http://blog.csdn.net/androidstarjack/article/details/72669394 支付宝植入总结: android 支付宝的植入 <曾经踩过的坑> 微信支付总结: Android 微信支付总结 备注:出于安全考虑,验签我们都是放到后台进行

IOS更换64位支付宝 微信支付 SDK

14年的时候苹果就下发通知:新的上线项目必须适配64-bit,更新的项目在2015年的六月一号以后也必须适配64-bit刚开始的时候没注意到这个问题,当打包完自己项目的时候,居然在适配64-bit的时候出现了一个警告, 看了一下,大概的意思也就是说,我的项目没有适配64-bit,我勒个去,上个版本还没有提示这个,这个版本居然冒出这个警告了.眼看着六月一号也即将到来,十天时间,以苹果的审核进度不一定过的了,万一中间再出个小插曲,估计上线得一个月了,加速审核苹果不一定买帐.迟早要做64bit的适配的

apicloud含有微信支付。支付宝支付和苹果内购的代码

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/> <meta name="