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步 进行支付体验

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

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

(0)

相关推荐

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

    项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信. 这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付. 第一步:完善沙箱信息 进入支付宝的开发者中心 就可以看到有个沙箱环境 使用支付宝提供的秘钥生成工具 生成对应的秘钥 一定要保存好.支付宝推荐使用RSA2(SHA256)秘钥 把自己的公钥填上去就可以了. 第二步 阅读在线支付开发文档 里面需要的配置信息 对应的使用沙箱环境的信息 第三步 环境搭建 下载服务端SDK

  • Django实现支付宝付款和微信支付的示例代码

    支付宝支付和微信支付是当今互联网产品常用的功能,我使用Django Rest Framework实现了网页上支付宝支付和微信支付的一个通用服务,提供rpc接口给其他服务,包括获取支付宝支付页面url的rpc接口.支付宝支付成功异步回调http接口.获取微信支付二维码rpc接口.主动查询微信订单是否支付的rpc接口等. 支付宝网站支付需要蚂蚁金服开放平台账号,创建应用.配置秘钥等步骤请参考:蚂蚁金服支付宝电脑网站支付快速接入 微信网站支付需要到微信支付官网注册服务商账号, 目录结构如下: 1.mo

  • springboot 集成支付宝支付的示例代码

    最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具.然后解压按照里面的readme生成公私密钥, 选择沙箱应用 上传公钥即可..沙箱到这里就基本完成了,里面还有沙箱版本的的android app可以下载下来. java 程序 1 新建一个springboot项目 因为我们创建的是一个web工程,所以,仅仅演示支付宝的demo,只需

  • php实现微信和支付宝支付的示例代码

    php实现微信支付 微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html 在php下实现微信支付,这里我使用了EasyWeChat 这里我是在Yii框架实现的,安装EasyWeChat插件 composer require jianyan74/yii2-easy-wechat 一:配置EasyWeChat 1:在config/main.php 的 component中添加EasyWeChat的SDK 'components' =>

  • Laravel使用支付宝进行支付的示例代码

    本文介绍了Laravel使用支付宝进行支付的示例代码,分享给大家,也给自己留个笔记 /* 支付 */ public function pay() { header("content-type:text/html;charset=utf8"); //echo 1;die; // ******************************************************配置 start********************************************

  • Vue+SpringBoot实现支付宝沙箱支付的示例代码

    首先去下载支付宝沙箱的一系列东西,具体的配置什么的我就不说了,有很多博客都讲了,还有蚂蚁金服官方也说的很详细,我就直接说怎么样把后端的支付页面显示到Vue前端来: 在你配置好AlipayConfig这个文件后,就可以写前端的逻辑了,前端是采用支付宝的页面如下: 下面展示一些 内联代码片. /* 以下是支付确认html */ <div style="text=#000000 bgColor=#ffffff leftMargin=0 topMargin=4"> <head

  • SpringBoot实现API接口多版本支持的示例代码

    一.简介 产品迭代过程中,同一个接口可能同时存在多个版本,不同版本的接口URL.参数相同,可能就是内部逻辑不同.尤其是在同一接口需要同时支持旧版本和新版本的情况下,比如APP发布新版本了,有的用户可能不选择升级,这是后接口的版本管理就十分必要了,根据APP的版本就可以提供不同版本的接口. 二.代码实现 本文的代码实现基于SpringBoot 2.3.4-release 1.定义注解 ApiVersion @Target({ElementType.TYPE, ElementType.METHOD}

  • Spring Cloud Feign实现文件上传下载的示例代码

    目录 独立使用Feign 上传文件 下载文件 使用Spring Cloud Feign 上传文件 下载文件 总结 Feign框架对于文件上传消息体格式并没有做原生支持,需要集成模块feign-form来实现. 独立使用Feign 添加模块依赖: <!-- Feign框架核心 --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</arti

  • Spring Security实现统一登录与权限控制的示例代码

    目录 项目介绍 统一认证中心 配置授权服务器 配置WebSecurity 登录 菜单 鉴权 资源访问的一些配置 有用的文档 项目介绍 最开始是一个单体应用,所有功能模块都写在一个项目里,后来觉得项目越来越大,于是决定把一些功能拆分出去,形成一个一个独立的微服务,于是就有个问题了,登录.退出.权限控制这些东西怎么办呢?总不能每个服务都复制一套吧,最好的方式是将认证与鉴权也单独抽离出来作为公共的服务,业务系统只专心做业务接口开发即可,完全不用理会权限这些与之不相关的东西了.于是,便有了下面的架构图:

  • Springboot使用redis实现接口Api限流的示例代码

    前言 该篇介绍的内容如题,就是利用redis实现接口的限流(  某时间范围内 最大的访问次数 ) . 正文 惯例,先看下我们的实战目录结构: 首先是pom.xml 核心依赖: <!--用于redis数据库连接--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>

随机推荐