第一部分,弄清支付的实现原理

  1. 要想对支付进行全面深入的测试,弄清支付系统的实现原理是必不可少哒~在此我就不罗里吧嗦的了,给大家强行安利一个大神精华帖,传送门 ->关于支付、关于安全的一些总结 (GOOGLE, APPLE, PAYPAL) ,里面对支付和安全的一些内容都讲解得非常清楚

第二部分,阅读支付平台的开发文档

  • PayPal Payments API
  • 本项目支付调用的是PayPal的SDK,主要关注Create 和 Execute
    两个接口,使用SDK的好处是通信过程中只要按照格式要求去请求接口就OK了,不需要牵扯到加密等复杂部分。以下是项目主要请求的内容和格式,以及返回的内容和格式。(主要来自Payments API,为图方便而记录下来,有需要的可以去看文档哈~)
  • Create payment
    Create请求的格式和内容:
curl -v -X POST https://api.sandbox.paypal.com/v1/payments/payment   #请求地址
-H "Content-Type:application/json"        #请求头
-H "Authorization: Bearer <Access-Token>"     #请求头,带Access-Token
-d '       #请求数据内容
{"intent":"sale","payer":{"payment_method":"paypal"},"transactions":[{"amount":{"total":"30.11","currency":"USD"},"description":"The payment transaction description."}],"redirect_urls":{"return_url":"https://www.paypal.com/return",      #可以设置为任一可以访问的url"cancel_url":"https://www.paypal.com/cancel"      #可以设置为任一可以访问的url}
}'

Create返回的格式和内容:

{"id":"PAY-1B56960729604235TKQQIYVY",          #作为execute请求的参数"intent":"sale","state":"created","payer":{"payment_method":"paypal"},"transactions":[{"amount":{"total":"30.11","currency":"USD"},"description":"The payment transaction description.","related_resources":[]}],"create_time":"2017-09-07T08:51:59Z","links":[{"href":"https://api.sandbox.paypal.com/v1/payments/payment/PAY-1B56960729604235TKQQIYVY","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v1/payments//cgi-bin/webscr?cmd=_express-checkout&token=EC-60385559L1062554J",                        #请求payer_id的approval_url"rel":"approval_url","method":"REDIRECT"},{"href":"https://api.sandbox.paypal.com/v1/payments/payment/PAY-1B56960729604235TKQQIYVY/execute","rel":"execute","method":"POST"}]
}
  • Execute approved PayPal payment
    Execute请求的格式和内容:
curl -v -X POST https://api.sandbox.paypal.com/v1/payments/payment/PAY-9N9834337A9191208KOZOQWI/execute
-H "Content-Type:application/json"
-H "Authorization: Bearer <Access-Token>"        #请求头,带Access-Token
-d '{"payer_id": "CR87QHB7JTRSC"                   #确认支付的id标识
}'

Execute返回的格式和内容:

{"id": "PAY-9N9834337A9191208KOZOQWI","create_time": "2017-07-01T16:56:57Z","update_time": "2017-07-01T17:05:41Z","state": "approved",                          #支付后的状态"intent": "order","payer": {"payment_method": "paypal","payer_info": {"email": "qa152-biz@paypal.com","first_name": "Thomas","last_name": "Miller","payer_id": "PUP87RBJV8HPU",……}}},

获取到execute的返回值,主要关注state关键字。

返回的值有created,approved,failed,以此来判断支付的状态。到了这一步,支付的整个流程就全部走通啦!以上只展示了成功的流程,对于其他异常的流程,可以自己修改请求去获取,这里就不累赘介绍啦!

第三部分,有关参数和细节

1.关于Access-Token的获取

PayPal后台有两个关键参数 clientId 和 clientSecret,这些可以在 Paypal 后台配置,把这两个参数请求给PayPal,然后会返回一个 access token。(前提是你需要登录PayPal的后台哦~关于账号密码,可以找你们的开发哥哥拿,简单粗暴!)

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \   -H "Accept: application/json" \-H "Accept-Language: en_US" \-u "<client_id>:<secret>" \-d "grant_type=client_credentials"

PayPal后台关键参数入口在My Apps & Credentials -> REST Api apps -> 你的项目,点进去之后就可以看到了

2.关于payer_id的获取
payer_id的获取需要从Create请求的返回结果approval_url中请求得到,需要在PayPal确认支付后才会返回给页面,直接一点的方法是在浏览器中输入approval_url,使用抓包工具截取返回结果,从而获取到payer_id,如图所示:


3.关于curl命令的运行工具
墙裂推荐使用Babun,一个 Windows 上的开箱即用的壳程序,安装 Babun 十分简单,解压缩包之后,执行里面的 install.bat 批处理脚本,然后静静等待执行结束即可,过程有些长,但一定要等待执行结束哦,安装结束后 Babun 会自动运行,且在桌面上生成快捷方式,谁用谁知道哈~~? ? ?

4.使用python运行curl命令
是不是很头疼啊现在,不知道怎么转化,谷歌来谷歌去的,一会使用pycurl,一会想将curl命令转化为requests方式,就是找不到最佳的实现方式,就是找不到一种简单粗暴又无脑的方式去转化呢?!!!? ? ?

别着急,甩你一个拯救苍生的快捷路径 -> 转curl为python ,还不赶快谢主隆恩哈哈哈? ? ?

这样的话,我们就可以进一步把上面的步骤一一整合成python的方式去实现啦,不过在整合之前,最好还是一步步来,体会一下这个实现的过程,收获颇多哦~~

5.将curl命令转化为requests的样子

以下展示获取access_token的python文件,以作观赏!想要将整个流程合为一个py,这个任务就交给聪明的小伙伴们

import requestsdef get_accesstoken():clientId = 'clientIdxxx'clientSecret = 'clientSecretxxx'headers = {'Accept': 'application/json','Accept-Language': 'en_US',}data = [('grant_type', 'client_credentials')]res = requests.post('https://api.sandbox.paypal.com/v1/oauth2/token',headers=headers,data=data,auth=(clientId, clientSecret))result = res.json()print(result['access_token'])if __name__=="__main__":get_accesstoken()

通用技术 支付笔记之 PayPal 支付原理相关推荐

  1. ecshop paypal支付_ecshop商城paypal支付插件下载

    简介: ecshop paypal支付_ecshop商城paypal支付插件,ecshop paypal支付,ecshop海外境外收款paypal支付接口,ecshop paypal ecshop商城 ...

  2. paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)

    由于工作需要,需要对接国外的PayPal支付,前端框架用的又是UNIAPP,众所周知UNIAPP国内的生态环境还可以,但是到了国外嘛  嘿嘿  懂得都懂. uniapp app对接Paypal支付 作 ...

  3. 详细教程: android项目集成PayPal 支付

    2017年7月5日  更新了, 总体该说的都说了, 后面再看看还有啥细节补充吧. 项目是跨境电商,国外的支付需要集成paypal支付,在网上搜了好久,教程都是断断续续,对开发者来说不太友好! 好在现在 ...

  4. 【支付系统学习笔记】-二支付系统设计(支付网关设计)

    前言: 本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 一 概述 在支付系统中,支付网关和支付渠道的对接是最核心的功能.其中支付网关是对外提供服务的接 ...

  5. 【支付系统学习笔记】-二支付系统设计(支付产品设计)

    本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 支付产品模块是按照支付场景来为业务方提供支付服务.这个模块一般位于支付网关之后,支付渠道之前. 它根据 ...

  6. 软文:第三方支付技术的场景应用,支付技术延伸与国际化

    才开通cnblog博客,先不谈技术,来一篇软文,谈谈最近最popular的Fintech中的核心之一,支付,只是浅谈一下国内外日新月异的场景支付的现状与发展.先简介一下,博主,master毕业,在国外 ...

  7. google支付接入PHP语言,PHP语言开发Paypal支付demo的具体实现

    一.paypal支付接口准备工作 首先去申请一个paypal账号,https://www.paypal.com/. 申请完毕并登录,进入https://developer.paypal.com/dev ...

  8. Java集成PayPal支付

    Java集成PayPal支付 1.申请账号 浏览器中输入:https://www.paypal.com,点击 "注册" 选择 "企业账号" ,信息可以随意填写 ...

  9. 杉德支付php代码实现_[转]PHP语言开发Paypal支付demo的具体实现

    一.paypal支付接口准备工作 首先去申请一个paypal账号,https://www.paypal.com/. 申请完毕并登录,进入https://developer.paypal.com/dev ...

  10. 关于paypal支付集成

    作为移动支付在国外的佼佼者,paypal在国外相当于是国内的支付,所以它的通用性可想而知. 最近,由于工作需要,开始研究paypal移动支付,由于paypal并没有中文的开发文档供技术人员去参考,所以 ...

最新文章

  1. kind富文本编辑器_富文本编辑器原理探索
  2. Laravel-自定全局函数
  3. Linux系统是否能够联网
  4. spring各jar包作用(转载)
  5. Drools学习 入门实例
  6. 笔试算法复习——数组去重
  7. 自动化的OSGi测试运行器
  8. 云联惠认证时间_云联惠强制关闭真正原因是什么?
  9. 数学建模酶促反应matlab求解,数学建模——酶促反应.doc
  10. 动态规划 —— 线性 DP —— 最大和问题
  11. Python利用PyPDF2库获取PDF文件总页码
  12. python3.6中内置函数变化
  13. C++ 4 C++变量及作用域
  14. 【夏日护眼妙招】三种食物要多吃
  15. 利用高德地图获取地点经纬度,并提取两地驾车、步行、骑行的出行时间、出行距离、费用等参数
  16. 通用商城系统V5.0
  17. 用了半年的时间,把python学到了能出书的程度
  18. 哥伦比亚大学计算机科学硕士排名,哥伦比亚大学计算机科学硕士排名第16(2020年TFE Times排名)...
  19. android自定义素材拼图,美图秀秀Android新版 拼图排版秀北爱
  20. 生信漫谈如何绘制蛋白序列的二级结构可视化图

热门文章

  1. 都要2022年了,你还在纠结pytorch还是tensorflow?
  2. Linux系统安装(超级详细教程)
  3. 微信网页版扫码登录原理
  4. Linux系统下微信网页版无法登录问题(deepin-wine-for-ubuntu)
  5. Legend of Mir(传奇)官方源码学习2、运行试玩及GM命令
  6. 16种常用的数据分析方法-列联分析
  7. python字典中get()函数的用法总结
  8. pentaho mysql_pentaho5.0.1,mysql5 配置,安装
  9. QT中双击mdiArea区域打开文件(监听双击事件)
  10. ROC(AUC)的显著性检验