Spring MVC 使用支付宝接口完成在线支付的示例代码

作者:geekzsp 时间:2023-11-29 04:07:55 

项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信。

这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付。

第一步:完善沙箱信息

进入支付宝的开发者中心 就可以看到有个沙箱环境

使用支付宝提供的秘钥生成工具 生成对应的秘钥 一定要保存好。支付宝推荐使用RSA2(SHA256)秘钥

把自己的公钥填上去就可以了。

Spring MVC 使用支付宝接口完成在线支付的示例代码

第二步 阅读在线支付开发文档

里面需要的配置信息 对应的使用沙箱环境的信息

第三步 环境搭建

下载服务端SDK 并添加到项目中

这里我使用的maven项目 导入本地jar包采用了下列方式


<dependency>
     <groupId>com.alipay</groupId>
     <artifactId>alipay</artifactId>
     <version>1.1.1</version>
     <scope>system</scope>
     <!--本地jar的路径,相对或者绝对都可以-->
     <systemPath>${project.basedir}/lib/alipay-sdk-java20170307171631.jar</systemPath>
   </dependency>
   <dependency>
     <groupId>com.alipay1</groupId>
     <artifactId>commons</artifactId>
     <version>1.1.1</version>
     <scope>system</scope>
     <!--本地jar的路径,相对或者绝对都可以-->
     <systemPath>${project.basedir}/lib/commons-logging-1.1.1.jar</systemPath>
   </dependency>

1、调用接口 启动支付页面 具体参数说明 请查看文档


//转到支付页面
   //初始化客户端 只需要实例化一次(线程安全)
   AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do"
       , "2016080300153333", GlobalConstant.APP_PRIVATE_KEY, "json", "UTF-8", GlobalConstant.ALIPAY_PUBLIC_KEY, "RSA2");
   AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
   //在公共参数中设置回跳和通知地址
   alipayRequest.setReturnUrl("回跳地址");
   //异步回调一定是要在外网 不然支付宝服务器无法访问
   alipayRequest.setNotifyUrl("异步回调地址");
   alipayRequest.setBizContent("{" +
       "  \"out_trade_no\":\"" + orderId + "\"," +
       "  \"total_amount\":\"" + fetchParcel.getMoney() + "\"," +
       "  \"subject\":\"代领快递\"," +
       "  \"seller_id\":\"2088102169684935\"," +
       "  \"product_code\":\"QUICK_WAP_PAY\"" +
       " }");//填充业务参数
   String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
   httpResponse.setContentType("text/html;charset=utf-8");
   httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
   httpResponse.getWriter().flush();

1、接收同步回调展示 结果 此结果只是展示,具体状态必须依赖支付宝的异步通知

2、接收异步回调更改订单状态 支付宝的异步回调 是服务器之间的通讯并不会产生页面 并且 设置的回调地址

一定是要在外网上的 不然支付宝的服务器是无法访问该地址的

对回调得到的信息要使用支付宝的api进行校验


 //将异步通知中收到的所有参数都存放到map中
   Map<String, String> paramsMap =new HashMap<>();
   paramsMap.put("tarde_no",trade_no);
   paramsMap.put("trade_status",trade_status);
   paramsMap.put("total_amount",total_amount);
   paramsMap.put("out_trade_no",out_trade_no);
   boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, GlobalConstant.ALIPAY_PUBLIC_KEY, "UTF-8", "RSA2");     //调用SDK验证签名
   if (signVerified) {
     //验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
     String out_trade_no1 = paramsMap.get("out_trade_no");
     String trade_status1 = paramsMap.get("trade_status");
     logger.info(out_trade_no1+":"+trade_status1);
     return "success";
   } else {
     //验签失败则记录异常日志,并在response中返回failure.
     return "failure";
   }

第4步 进行支付体验

Spring MVC 使用支付宝接口完成在线支付的示例代码

这里选择支付宝账号登录 账号 密码 在沙箱环境中可以找到 (买家账号)建议下载支付宝沙箱钱包 可以模拟在线支付调用钱包客户端的效果

来源:http://blog.csdn.net/mixi9760/article/details/66473368

标签:Spring,MVC,支付宝
0
投稿

猜你喜欢

  • 一个进程间通讯同步的C#框架引荐

    2023-01-18 17:55:03
  • 一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程

    2022-01-31 10:28:23
  • C#实现装饰器模式

    2023-06-18 04:48:16
  • python只需30行代码就能记录键盘的一举一动

    2023-06-27 18:22:12
  • Android使用线程获取网络图片的方法

    2023-05-28 22:29:28
  • Java中抓取 Thread Dumps 的方式汇总

    2021-08-09 23:20:26
  • C#如何消除验证码图片的锯齿效果

    2023-11-05 04:49:14
  • flyway实现java 自动升级SQL脚本的问题及解决方法

    2021-10-14 00:23:19
  • 学习Java的Date、Calendar日期操作

    2023-09-04 22:26:38
  • Java求1+2!+3!+...+20!的和的代码

    2021-12-16 10:55:23
  • Mybatis-plus多租户项目实战进阶指南

    2023-10-10 18:14:43
  • java中不定长参数的实例用法

    2021-06-17 02:49:35
  • Java+Swing实现五子棋游戏的示例代码

    2022-06-27 11:56:22
  • 客户端Socket与服务端ServerSocket串联实现网络通信

    2023-08-11 00:01:17
  • 微信小程序 springboot后台如何获取用户的openid

    2023-01-13 17:07:42
  • Android上传文件到服务器的方法

    2021-10-05 21:21:57
  • C# 设置防火墙的创建规则

    2023-03-21 09:13:42
  • Unity实现简易日志输出功能

    2023-07-25 22:59:44
  • Flutter开发之Widget自定义总结

    2021-11-07 12:41:03
  • C#事件用法实例浅析

    2023-02-24 19:22:16
  • asp之家 软件编程 m.aspxhome.com