目录
获取源码—GitHub仓库地址
https://github.com/QiuFengYanMeng/alipay-demo
闲言碎语
最近有朋友咨询第三方支付相关的开发,心血来潮想疾书一番。
正好支付宝有提供沙箱环境,我们个人开发者也可以进行开发、测试,不需要你有企业资质,降低了学习门槛。支付宝的Java SDK换成了较新的版本,我个人觉得新版本的SDK和旧版本相比很简洁,值得更换。
但是现在网上大量的教程,普遍都是老版本SDK,这是因为新版本才刚出来没多久。所以笔者也想趁这个时机,写下此文,希望后来者集成支付宝的时候能少走弯路。
一些重要的网址或文档
1、支付宝支付官网:支付宝 知托付!
2、支付宝开放平台-文档中心:创建应用 | 网页&移动应用
3、natapp内网穿透工具官网:NATAPP-内网穿透 基于ngrok的国内高速内网映射工具
发起支付的业务流程图
图片来自支付宝开放平台。
上面的流程图,已经大致描述了发起支付的过程,这里笔者用自己的语言,详细地转化一下:
- 下单。这里的下单,在项目中往往表现为用户确认了订单、然后选择支付方式、点击立即支付,即当用户点击“立即支付”时才产生的动作。 这一步要发送一个请求到我们的服务器,假如说系统中立即支付的API路径是/pay,参数一般就是订单包含的订单项,如商品id、购买数量、优惠券id等。
- 服务器端处理用户的下单请求。在这一步,是业务比较多的一步,也是关键步骤。我们根据客户端传来的商品id、数量、优惠券等参数,计算出每一个商品的单价、订单的总金额等(金额是不应该由客户端直接传的,应该由服务器端计算,更安全)。再生成一个订单号。然后调用一个接口,把这些参数(如商品名称、支付金额、订单号等)打包传给支付宝,也就是对应上图中的1.1。
- 依然是处理用户的下单请求,只是我嫌段落太长,换一段。在图中的1.1,我们调用了支付宝的接口。其实图中还少了一步1.2,那就是支付宝会返回一段html文档,就是大家经常看到的带二维码的PC端支付页面。请注意,到这一步,对客户端来说依然是在访问/pay接口,因为我们还没有对请求作出响应,只是一直在和支付宝交互罢了。所以,我们把支付宝返回的html文档作为响应信息,返回给客户端,客户端直接加载这一段html文档,用户就看到了一个支付页面。
- 到了这里,对应上图中的2、3、4、5步,和我们的服务器就没关系了,完全是用户在进行支付的过程。
- 到了第6步,用户支付完成,支付宝会跳转到一个我们指定的网页,这个网页一般是我们自定义的页面,比如在网页上显示“您已成功购买xxx商品,感谢您的支持”等。注意,此处的returnUrl只是跳转到我们自定义的友好页面,告诉用户支付成功了,只做展示用途,并非真正的支付回调。
- 到了第7步,支付宝会调用我们指定的回调API接口,将一些参数传给我们,如交易流水号、订单号,我们可以根据这些信息查询交易是否真的成功了(第8步),从而执行后续的业务,比如将订单状态变为已支付、给用户增加积分、扣减优惠券……等。
沙箱环境简介&基础开发配置
支付宝有一个供开发者测试使用的沙箱环境,会提供一个沙箱版的支付宝app、一个商家账户、一个买家账户。有了这个,可以让我们跳过商家入驻、企业资质审核等过程,开箱即用,降低了学习成本。
现在,让我们简单的配置沙箱环境。
1、进入到支付宝支付官网,点击“我是开发者”,在新的页面右上角,用你自己的支付宝扫码登录,再点击开发服务中的研发服务:
此时就到了沙箱应用的控制台,会为你分配一个APPID:
2、出于安全性的考虑,我们需要生成一份公钥和私钥,公钥提供给支付宝,支付宝对数据进行加密;私钥用于解析支付宝传来的加密数据,由我们自行保管。支付宝提供了公钥和私钥的生成工具,在文档中心点击“开发工具”:
然后在这个地方根据你的系统下载工具:
我们打开下载好的工具,在以下地方点击“生成密钥”:
把私钥和公钥保存好。
3、回到沙箱应用控制台,点击这个地方设置公钥(注意不是公钥证书哦,我们用的不是证书的方式):
在弹出的窗口,把刚才生成的公钥复制粘贴进去,点击确定:
其中支付宝公钥就是我们上传的公钥,应用公钥是支付宝为我们自动生成的。</