[python]Django集成Paypal支付小结

来源:互联网 发布:mac ps 字体 编辑:程序博客网 时间:2024/06/03 20:04

最近在海鲜厂打黑工,接到的第一个比较大的任务就是集成Paypal支付,目前仅支持支付宝以及Paypal留言人工充值。。。

Paypal对于开发人员还是相当友好的,因为API文档真的是太长太多了,https://developer.paypal.com/,这是Paypal的开发者文档,看了两天依然晕晕乎乎的,于是上周末特别忐忑,毕竟WEB类小厂都是线上服务,时间非常紧张。

然而发现了一个好东西,一帮人集成了一个pip包,安上就能使,酷不酷!http://django-paypal.readthedocs.io/en/stable/standard/index.html,这是他们写的官方文档,基本把Paypal提供的服务都实现了,不过实际写代码的时候最好还是把他们在github上的源码拉下来看一看,才知道要传哪些参数,毕竟文档还是比较简洁。

这次集成的支付功能大概是这样的,post一个price的参数之后可以定向到Paypal的支付页面,用户进行订单确认并提交支付,支付完成重新回转到海鲜厂的页面。大概的流程和在Ebay的支付过程差不多。其实Paypal也提供在自己的页面直接填写表单使用户填入自己的信用卡号进行付款,这样很快速也便捷,但是感觉是不是用户体验不太好?Ebay也没有采用这样的支付方式。

下面具体介绍一下使用Django-Paypal进行集成的过程。

1.首先你要获得Paypal的开发者credential,是需要注册Paypal并进入账户获取的,涉及账户于是这一步是老板干的= =,不过我想这应该不太复杂。

2.厂子的开发都是在Docker环境下进行的,生成镜像时需要把我们的Django-Paypal的包包括进去。

3.在我们需要开发的Project中,在settings中添加如下:

INSTALLED_APPS = [    # ..    'paypal.pro',]PAYPAL_TEST = TruePAYPAL_WPP_USER = "???"PAYPAL_WPP_PASSWORD = "???"PAYPAL_WPP_SIGNATURE = "???"

4.更新一下数据库(根据你的Django版本,使用syncdb或者migrate)

5.在Views.py中添加Paypal页面,对于这个页面,既可以采用post访问,也可以采用get访问,对于post方法(post价格,生成交易,转向支付):其中需要实例化一个PaypalWPP实例,用这个实例进行setExpressCheckout()操作,该操作支持初始化一个交易事务,返回一个PaypalNVP对象,这个对象的.token就是此次交易的唯一的交易号,每次都是独一无二的。通过express_endpoint_for_token函数和这个token可以生成指向Paypal交易页面的URL;对于get方法(拿到paypal提供的支付完成的用户的payerid并返回ack):同样需要实例化一个PaypalWPP实例,用这个实例进行setExpressCheckout()操作,该操作完成一个交易事务,返回一个PaypalNVP对象,这时PaypalNVP对象除了之前的token,现在也拿到了payerid和ack,我们可以判断这个ack是否等于success,是的话表明交易完成,用户账号扣了钱,我们也收到了钱。

6.在Views.py中添加PurchaseThanks页面,这里包括两个template,一个是用户支付完成,如果中间网络出了问题,再次转向paypal支付页面,此时paypal会提示该笔交易已经进行过并询问是否返回商家页面(也就是第五步中添加的returnURL),这时我们自己的页面就要判断了,如果是这样的情况就要给出purchase_success的html,另一种,在支付过程中用户反悔了,点击取消支付(也就是第五步中添加的cancelURL),那么paypal就会返回商家页面,我们就要给出purchase_cancel的页面。

其实完全按照paypal的开发者文档自己写的话还是有些吃力的,不过有了贡献者的力量就轻松多啦,向这些纯靠爱好并且热爱分享的开发者们致敬!

ps.涉及一些内部自己的数据库操作,这里就不给出全部代码了,步骤已经说的比较清楚啦~

0 0
原创粉丝点击