目前,市面上比较流行的支付方式有支付宝支付,微信支付,银联支付,其他聚合支付等,支付市场发展到目前,算是比较稳定和成熟了,有了这么多支付方式,不论是web端还是移动端,需要支付的场景很多,今天来简单模拟一下使用较多的支付宝支付。
由于条件限制,个人无法提供工商营业执照,因此无法在支付宝官方平台注册企业开发用户,好在支付宝开发者平台提供了沙箱环境,可为个人开发者提供一套和真实环境差不多的沙箱模式,开发者可以基于沙箱模式进行注册,并做简单的配置即可模拟调用支付宝相关的接口,比如像下单等。
使用个人的支付宝账户登录阿里开放平台,进入开发者中心,点击研发服务,进入沙箱环境,
在沙箱这个页面上,可以看到系统为你默认分配的APPID,这个是你在程序中配置支付参数时需要填写的,
接着配置应用公钥,这个是你在调用支付宝接口的时候,支付宝那边认证的很重要的凭证,如何获取这个公钥呢,在签名专区那一栏里面有具体的使用流程,下载zip工具包到本地后,双击.bat那个文件,将生成的公钥和私钥保存一份到本地,然后复制公钥粘贴到应用公钥那一处保存即可,
上述配置完毕后,如果条件允许最好下载一下下面这个沙箱环境的支付宝APP,方便后面测试使用,当然不配置也是可以的,
如果不配置的话,支付的时候直接使用平台分配的测试用户名和密码也是可以的,
配置部分到这里基本结束,真实环境下要麻烦点,需要上传工商营业执照,填写手机号、身份证之类的信息,这里就不细说了,
下面,我们直接将官方的demo下载到本地,通过运行这个demo工程来模拟一下支付的流程,在下面的位置下载java版的demo,
放到本地的工程,如图所示,官方的demo还是一个比较传统的web项目,需要tomcat启动,
通过查看代码知道,demo中的和支付相关的代码都是放在jsp中进行处理的,各个jsp的作用基本上建见名知意,实际项目中我们一般不会这么做,我们首先修改一下AlipayConfig这个类,这个类里面的部分参数就是我们在沙箱配置中的那些参数,主要的几个参数如下,
这里面有两个参数需要重点说一下就是return_url和notify_url,就是订单支付完毕之后,支付宝跳转到商家页面的回调地址,真实项目中需要填写你的公司域名,这样支付宝才能找到,但我并没有备案过的域名怎么办?
这里推荐两个小工具,可以进行内网穿透,natapp 或者ngrock,这也是平时做微信开发或者支付宝开发模拟调试的时候使用的两个小工具,我这里使用的是natapp ,关于natapp 的用法我简单书哟一下,方便大家使用,进入natapp 官网,下载natapp 压缩包,解压到本地,
注册一个账户后,点击购买隧道,填写相关的信息即可,由于是测试使用免费的即可,
隧道应用信息填写完毕后,会随机为你分配一个authtoken和一个域名,这个域名待会儿你在执行本地的那个.exe文件时可以看到,
最重要的就是下面的这个地方,即通过配置的域名要映射到你本地的那个IP和端口下,
然后我们双击natapp.exe,看到如下信息说明映射成功了,
然后我们将这个地址填写到配置类中的return_url和notify_url中即可,
public static String notify_url = “http://5c7dxs.natappfree.cc/notify_url”;
public static String return_url = “http://5c7dxs.natappfree.cc/return_url”;
启动支付demo应用,
访问:http://localhost:8080/demo_pay/
在我们进行支付订单模拟之前,为了验证整个流程,还准备了另一个工程,用于支付成功之后的回调,非常简单,里面只有两个接口,模拟回调使用的,
贴上orderController代码,
@Controller
public class OrderController {
@RequestMapping("/notify_url")
public void getNotifyInfo() {
System.out.println("notify_url 回调成功1 .......");
}
@RequestMapping("/return_url")
public void getReturnInfo(HttpServletRequest request,HttpServletResponse response) throws Exception{
System.out.println("----------------------------notify_url------------------------");
// 商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金额,必填
String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
System.out.println("商户订单号:" + out_trade_no);
System.out.println("付款金额:" + total_amount);
System.out.println("支付宝交易号:" + trade_no);
System.out.println("交易状态:" + trade_status);
if(trade_status.equals("TRADE_SUCCESS")){
System.out.println("交易成功,进行其他业务逻辑处理........");
}
}
}
将这个应用也启动一下,紧接着上面的流程,我们测试进行一笔订单支付,点击付款,
跳转到支付页面,使用自己下载的沙箱支付宝APP扫码确认一下,或者使用登录用户密码也可,
如果是APP确认的就直接进入后面的回调流程了,我这里输入用户名和密码,如下图,点击下一步,
等待支付成功后,稍等一会儿,跳转到我们的回调地址上了,可以看到,控制台上成功获取到了刚刚支付订单的相关信息,当然,接下去还可以做其他的业务逻辑处理,例如订单入库,积分添加,优惠券业务操作等
基本上到这里就模拟了沙箱环境下使用支付宝接口进行下单的整个完整流程,当然其他的像查询订单接口,退款,对账接口等,都可以在获取了订单号之后继续进行操作和模拟,这里限于篇幅就不再继续模拟了,有兴趣的伙伴可以深入研究下。
需要源码的伙伴可自行下载,附上下载地址:
https://download.csdn.net/download/zhangcongyi420/11255082
本篇到此结束,最后感谢观看!