很长时间没有来这里了,主原因是,这大半年来,一直在忙于向资本家讨薪,无暇写这些。话说,IT界的,象我这样的自由职业者,实在不如民工,民工讨薪有党中央撑腰。在别人眼里,跟民工没有什么区别,而实际上呢,就是民工,却没有民工的待遇。苦啊,谁叫咱生为IT人呢。
闲话就不说了,回到正题上,支付宝即时到帐接口的python实现,网上早已经有人给出。Google了一圈,看了些牛人写的代码,说实话,都没入我的法眼。不是封装性不好,就是依赖某个框架或平台,不具有通用性。本想直接拿来用的,这样看来只好自己动手写了。
在支付宝官网上下载了相应的文档与示例代码。文档很长,很规范,通篇看下来不知所云,代码很乱,很臭,看得人头晕眼花,都没法看啊。即使这样,官方示例中没有python的例子。关于支付宝的文档及代码的质量问题网上有批的,最早看到这些时,还不以为然,人家是大公司,岂能做出让我辈随便议论的代码?
不过,话说回来了,看代码,比看那个文档要轻松点。被逼无奈,我只好挑Java/JSP的例子来看,主要是自认熟悉Java。我现在给出的这个python代码,事实上是原官方Java实现的重新调整、重新组织,再转成python语言实现。主要是考虑封装与通用,力求做到在重用时不需要改动其中任何代码,另外,做到与框架无关,封装成python模块,不依赖特定框架,使用时引入简单该模块即可。
简单说下,这个支付宝接口的原理:
1、在商家页面产生一个包含付款细节表单,该表单将提交到支付宝指定的URL(即表单的Action为支付宝指定的URL,可以是POST方法,也可以是GET方法)。
2、异步回调,用户在支付宝付款成功后,支付宝回调商家指定的URL,并回传支付相信的信息(使用POST方法)。
3、跳转回调,用户在支付宝付款成功后,支付宝页面会将用户带回到商家指定的URL,并回传支付成功的相关信息(使用GET方法)。
实际运行中,异步回调要早于跳转回调。
在这三步通信过程当中,都要对GET、POST数据进行MD5摘要,摘要时,必须包含支付宝为商家生成的key。在产生表单时,需要对数据和key一起进行MD5摘要,并将结果附加在提交的数据中。支付接口实现在收到数据时,即上面提到的第2点及第3点,同样要对数据进行MD5接要,以此来验证数据是否正确、是否来自支付宝。除了通过MD5加KEY来确保数据的真实有效,支付宝还提供有另外一个URL,允许商家网站在收到回调后,通过此URL验证收到的数据是否真实有效。
要想成功与支付宝集成,有两点至关重要:1、提供必要的数据项;2、做MD5摘要时,数据项必须排序(升序)后进行,支付宝在处理时也按照此顺序处理,这样才能获得同样的MD5摘要。
具体实现见附件。
以下代码由实际项目中剪出(使用webpy),用以说明该模块的使用方法。
1、在处理支付的模块中,引入alipay模块,并创建alipay类的实例:
import alipay
...
#替换其中相关内容即可。
alipayTool=alipay.alipay(
partner="支付宝身份ID",
key="支付宝生成的key",
sellermail="商家支付宝帐号(邮箱)",
notifyurl="异步回调的URL",
returnurl="跳转回的URL",
showurl="显示网站商品的URL"
)
2、在支付页面(即用户点击支付按钮即转到支付宝付款的页面),我们需要在这个页面产生一个隐藏的表单,用来提交订单信息:
#支付信息,订单号必须唯一。
#以下包含的内容替换为实际的内容。
params={
'out_trade_no':<订单号>,
'subject' :<订单subject>,
'body' :<订单说明>,
'total_fee' :<订单总额>
}
payhtml=alipayTool.createPayForm(params)
#将payhtml写到页面,这是个包含有提交按钮的表单
3、异步回调处理:
# f 为包含POST过来的数据python字典,即名-值对。
# verify 是否回调支付宝确认数据是否真实有效
# rlt为处理的结果,为success或fail
rlt=alipayTool.notifiyCall(f,verify=True)
#依据支付宝的要求,此URL返回的值为success或fail
#因此,当rlt为success时(即支付成功),做相应的处理
#然后,直接将rlt写到输出流。
if rlt=='success':
paySuccess(f['out_trade_no'])
return rlt
4、跳转回调处理:
#注意,与异步回处理相同,在跳转回调的处理上,仍是调用notifiyCall函数
#并且参数与返回完全一样。
rlt=alipayTool.notifiyCall(f,verify=True)
#只是验证后的处理不同,这里需要给用户显示一个页面。
if rlt=='success':
paySuccess(f['out_trade_no'])
#显示支付成功的页面
.....
else:
#显示未能成功支付的页面
.....
通过上面的4个步骤,我们就可以成功的与支付宝集成,并且实现了回调验证。
alipay模块依赖的两个外部模块为hashlib与urllib2,另外,使用的字符编码UTF-8。其他字符编码要做些改动,但我未做测试。
分享到:
相关推荐
总的来说,通过ASP开发的支付宝即时到帐接口为商家提供了高效的资金流转方案,但在实际应用中,开发者应充分理解接口的工作原理,确保其安全性和稳定性,以提供优质的用户体验。同时,随着技术的发展,现在更多商家...
支付宝即时到帐接口是支付宝提供的一种在线支付服务,允许商家快速、安全地处理用户的支付请求。这个接口使得商家能够在收到用户支付确认后立即处理订单,极大地提升了交易效率和用户体验。以下是对这个接口及其Demo...
支付宝即时到账接口,也称为Alipay Direct,是通过API调用来实现的。它主要分为两个部分:请求接口(Request)和通知接口(Notify)。请求接口用于用户支付时发起支付请求,而通知接口用于接收支付宝服务器对支付...
使用下载解压到python_alipay目录修改alipay/config.py配置文件,根据你的支付宝帐号进行相应的设置python manage.py syncdbpython manage.py runserver组成alipay/: 包含了支付宝的即时到帐,担保交易和确认发货的...
在这个名为"支付宝接口说明和样例程序"的压缩包中,我们主要关注的是两个接口:支付宝即时到帐接口和支付宝即时到帐批量退款接口。这两个接口对于电商、在线服务提供商等需要处理大量交易的企业来说至关重要。 首先...
1. **支付接口**:用于创建交易订单,支持即时到帐、担保交易等多种支付模式。 2. **查询接口**:查询订单状态,确认支付是否成功,获取交易详情。 3. **退款接口**:处理用户退款请求,同步更新订单状态。 4. **...
4. **支付宝接口代码**:在文档中,通常会包含示例代码,以帮助开发者快速理解和实现接口调用。这些代码可能涵盖多种编程语言,如Java、PHP、Python等,展示如何生成签名、请求参数设置、处理返回结果等关键步骤。 ...
这个仓库是支付宝接口的 Python 版本,提供了即时到帐和双功能(担保交易)2种功能。 此 Alipay 的 API 基于完整的 Django 框架,但是很容易移植到其他 Python 项目中,核心的 Class API 在 thirt_part/ 目录下面,...
支付宝接口源码是一系列用于与支付宝平台进行交互的编程代码,通常由开发者使用来集成到自己的网站或应用程序中,以实现各种支付、退款、查询等金融交易功能。这些源码通常基于不同的编程语言,例如PHP、Java、...
7. **支付宝即时到帐开发集成demo源码**:提供的源码示例可以帮助开发者更快地理解和实践支付接口的集成,包括请求签名、参数构造、回调处理等关键步骤。 总结来说,支付宝、微信等支付平台的手机网页和App支付均...
1. **即时到账无密退款文档**:这是一个详尽的说明文档,包含了无密退款服务的原理、使用条件、操作步骤、接口定义、参数说明、返回值解析等关键信息。文档通常会详细解释如何申请开通此服务,以及在开发过程中需要...
django-oscar-alipay 是django-oscar商城系统的支持多种支付方式的支付集成实现了alipay担保交易,即时到帐和自动发货等接口。详细实现了django-oscar的payment支付部分。安装使用下载解压到本地目录下修改settings ...
<br>十四、采用最为流行的支付宝接口 网软网上购物网站管理系统超漂亮正式版采用最新的支付宝接口,可以对支付宝的送货费用详细设计,同时新的支付宝功能支持付款到支付宝和采用即时到帐交易2种方式,非常...