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

 更新时间:2017年08月11日 15:17:03   作者:geekzsp  
本篇文章主要介绍了Spring MVC 使用支付宝接口完成在线支付的示例代码,具有一定的参考价值,有兴趣的可以了解一下

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

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

第一步:完善沙箱信息

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

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

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

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

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

第三步 环境搭建

下载服务端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步 进行支付体验

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 据说这个是可以撸到2089年的idea2020.2(推荐)

    据说这个是可以撸到2089年的idea2020.2(推荐)

    这篇文章主要介绍了据说这个是可以撸到2089年的idea2020.2,本教程给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 关于Java中增强for循环使用的注意事项

    关于Java中增强for循环使用的注意事项

    for循环语句是java循环语句中最常用的循环语句,一般用在循环次数已知的情况下使用,这篇文章主要给大家介绍了关于Java中增强for循环使用的注意事项,需要的朋友可以参考下
    2021-06-06
  • 详解spring cloud如何使用spring-test进行单元测试

    详解spring cloud如何使用spring-test进行单元测试

    这篇文章主要介绍了spring cloud如何使用spring-test进行单元测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Spring Boot 2 整合 QuartJob 实现定时器实时管理功能

    Spring Boot 2 整合 QuartJob 实现定时器实时管理功能

    Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大。接下来通过本文给大家分享Spring Boot 2 整合 QuartJob 实现定时器实时管理功能,感兴趣的朋友一起看看吧
    2019-11-11
  • 使用SpringBoot发送邮箱验证码的简单实现

    使用SpringBoot发送邮箱验证码的简单实现

    这篇文章主要介绍了使用SpringBoot发送邮箱验证码的简单实现,咱们今天来讲使用QQ邮箱来发送和接收验证码,首先来介绍一下它在SpringBoot项目中的具体应用,需要的朋友可以参考下
    2023-04-04
  • Java三目运算符的实战案例

    Java三目运算符的实战案例

    三目运算符在java中运用可以说非常的广泛,下面这篇文章主要给大家介绍了关于Java三目运算符的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • SpringBoot集成redis实现分布式锁的示例代码

    SpringBoot集成redis实现分布式锁的示例代码

    这篇文章主要介绍了SpringBoot集成redis实现分布式锁的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • springboot整合JPA过程解析

    springboot整合JPA过程解析

    这篇文章主要介绍了springboot整合JPA过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Spring Data中domain模块的使用

    Spring Data中domain模块的使用

    Spring Data是一个流行的数据访问框架,本文主要介绍了Spring Data中domain模块的使用,并展示如何使用它来优化我们的数据访问层,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • java反射超详细讲解

    java反射超详细讲解

    本文非常详细的讲解了java反射具体的内容以及使用,java反射在现今的使用中很频繁,希望此文可以帮大家解答疑惑,可以帮助大家理解
    2021-08-08

最新评论