SpringBoot整合支付宝APP支付

前言

现在是移动端产品疯狂的年代,随之,移动端支付也是热门小技能,最近本公司在做一个移动端,要接入微信支付和支付宝支付,老习惯,功能做完之后做个复盘记录,这边主要讲解支付宝APP支付

所需条件

1、创建蚂蚁金服开放平台公司账号

2、选择开发中心---->移动应用

3、选择支付接入

4、创建应用

5、查看应用appId

6、添加功能

两个功能:支付宝授权功能和APP支付功能

7、功能签约

开发流程

引入支付宝支付SDK

<!-- 支付宝支付 SDK -->
<dependency>
 <groupId>com.alipay.sdk</groupId>
 <artifactId>alipay-sdk-java</artifactId>
 <version>3.7.4.ALL</version>
</dependency> 

1、支付宝参数配置类

/**
 * AlipayConfig.java
 * com.prereadweb.order.config
 * Copyright (c) 2019, 北京聚智未来科技有限公司版权所有.
 */
package com.prereadweb.order.config;

/**
 * @Description: 支付宝支付配置文件
 * @author: Administrator
 * @date: 2019/6/11 17:01
 */
public class AlipayConfig {

 // APPID
 public static String app_id = "你应用的APPID";

 // 生成公钥时对应的私钥(填自己的)
 public static String private_key = "你的秘钥";

 //异步回调接口:得放到服务器上,且使用域名解析 IP
 public static String notify_url = "回调函数接口";

 //支付宝网关(注意沙箱alipaydev,正式则为 alipay)不需要修改
 public static String url = "https://openapi.alipay.com/gateway.do";

 //编码类型
 public static String charset = "UTF-8";

 //数据类型
 public static String format = "json";

 // 公钥
 public static String public_key = "你的公钥";

 //签名类型
 public static String signtype = "RSA2";

}

2、下单接口

controller层

 /**
 * @Function: 去支付
 * @author: YangXueFeng
 * @Date: 2019/6/11 16:10
 */
 @RequestMapping("/gotopay")
 public Object goToPay(@Param("orderId") Long orderId){
 return alipayViewService.setGotoPayInfos(orderId);
 }

service层

/**
 * @Function: 去支付
 * @author: YangXueFeng
 * @Date: 2019/6/11 16:11
 */
 @Override
 public Map<String, Object> setGotoPayInfos(Long orderId) {
 Map<String, Object> map = new HashMap<>();
 if(Util.isEmpty(orderId)){
 map.put("code", UserStatusEnum.EMPTY.intKey());
 map.put("msg", UserStatusEnum.EMPTY.value());
 return map;
 }
 /* 查询订单信息 */
 PayParameterForm payParameter = orderMapper.getPayParameter(orderId);
 AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.url, AlipayConfig.app_id, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.public_key, AlipayConfig.signtype);//支付宝需要的参数serverUrl、appId、private_key、format、charset、public_key、signType
 AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
 model.setBody(payParameter.getTitle());//商品信息
 model.setSubject(payParameter.getTitle());//商品名称
 model.setOutTradeNo(String.valueOf(payParameter.getOrderId()));//订单号
 model.setTimeoutExpress("30m");//支付超时时间
/*
 model.setTotalAmount(String.valueOf(payParameter.getActualPrice()));// 支付金额
*/
 model.setTotalAmount(String.valueOf(0.01));// 支付金额
 request.setBizModel(model);
 // 回调地址(充值订单)
 request.setNotifyUrl(AlipayConfig.notify_url);// 回调地址
 //这里和普通的接口调用不同,使用的是sdkExecute
 AlipayTradeAppPayResponse response = null;
 try {
 response = alipayClient.sdkExecute(request);
 map.put("code", UserStatusEnum.SUCCESS.intKey());
 map.put("msg", UserStatusEnum.SUCCESS.value());
 Map<String, Object> dataMap = new HashMap<>();
 dataMap.put("payPath", response.getBody());
 map.put("data", dataMap);
 return map;
 } catch (AlipayApiException e) {
 e.printStackTrace();
 }
 map.put("code", UserStatusEnum.ERROR.intKey());
 map.put("msg", UserStatusEnum.ERROR.value());
 return map;
 }

3、回调接口

controller层

/**
 * @Function: 支付宝异步通知回调
 * @author: YangXueFeng
 * @Date: 2019/6/11 20:02
 */
 @ResponseBody
 @RequestMapping("/notify")
 public String notify(HttpServletRequest request, HttpServletResponse response) {
 return alipayViewService.notify(request, response);
 }

service层

/**
 * @Function: 支付宝异步回调接口
 * @author: YangXueFeng
 * @Date: 2019/6/11 20:03
 */
 @Override
 public String notify(HttpServletRequest request, HttpServletResponse response) {
 Map<String, String> params = new HashMap<String, String>();
 //从支付宝回调的request域中取值
 Map<String, String[]> requestParams = request.getParameterMap();

 for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
 String name = iter.next();
 String[] values = requestParams.get(name);
 String valueStr = "";
 for (int i = 0; i < values.length; i++) {
 valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
 }
 // 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
 // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
 params.put(name, valueStr);
 }
 //商品订单号
 String out_trade_no = request.getParameter("out_trade_no"); // 商户订单号
 // 当前交易状态
 String tradeStatus = request.getParameter("trade_status"); //交易状态
 // 支付金额
 String totalAmount = request.getParameter("total_amount"); //交易状态
 // 支付时间
 String payDate = request.getParameter("gmt_payment"); //交易状态
 //3.签名验证(对支付宝返回的数据验证,确定是支付宝返回的)
 boolean signVerified = false;
 try {
 //3.1调用SDK验证签名
 signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.public_key, AlipayConfig.charset, AlipayConfig.signtype);
 } catch (AlipayApiException e) {
 e.printStackTrace();
 }
 //返回状态存入redis中
 //对验签进行处理
 if (signVerified) {
 //验签通过
 if(tradeStatus.equals("TRADE_SUCCESS")) {
 //支付成功后的业务处理
 OrderEntity order = orderMapper.getOrderInfo(Long.valueOf(out_trade_no));
 if(!Util.isEmpty(order)){
  order.setStatus(CalculatStaticConstant.CHECK_ONE);
  order.setCompleteTime(DateUtil.currentDate());
  orderMapper.updateOrder(order);
 }
 /* 添加支付信息 */
 OrderPayEntity orderPay = new OrderPayEntity();
 orderPay.setId(Long.valueOf(IdUtils.getPrimaryKey()));
 orderPay.setOrderId(order.getId());
 orderPay.setUserId(order.getUserId());
 orderPay.setPayPrice(Double.valueOf(totalAmount));
 orderPay.setPayType(PayTypeEnum.ALI_PAY.intKey());
 orderPay.setStatus(CalculatStaticConstant.CHECK_ONE);
 orderPay.setPayTime(payDate);
 orderMapper.saveOrderPay(orderPay);
 RedisUtil.set("ali"+out_trade_no, tradeStatus,300);
 return "success";
 }
 } else { //验签不通过
 System.err.println("验签失败");
 return "failure";
 }
 return "failure";
 }

此处回调函数接口要有返回值,成功后返回success(success是小写,别大写),此处如果没有返回值的话,支付宝会一直进行回调通知

至此,支付宝APP支付OK

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

(0)

相关推荐

  • Spring Boot接口设计防篡改、防重放攻击详解

    本示例主要内容 请求参数防止篡改攻击 基于timestamp方案,防止重放攻击 使用swagger接口文档自动生成 API接口设计 API接口由于需要供第三方服务调用,所以必须暴露到外网,并提供了具体请求地址和请求参数,为了防止被别有用心之人获取到真实请求参数后再次发起请求获取信息,需要采取很多安全机制. 需要采用https方式对第三方提供接口,数据的加密传输会更安全,即便是被破解,也需要耗费更多时间 需要有安全的后台验证机制,达到防参数篡改+防二次请求(本示例内容) 防止重放攻击必须要保证请求

  • 解决Vue调用springboot接口403跨域问题

    最近在做一个前后端分离的项目, 前端用的是Vue后端使用的是springboot, 在项目整合的时候发现前端调用后端接口报错403跨域请求问题 前端跨域请求已解决, 那么问题就出在后端了, 找了一些资料找到了很多种方法, 这里说两个简单粗暴的. 注意:"@CrossOrigin"注解要求jdk1.8及以上版本, SpringMVC 4.2及以上版本 1. 在controller层上添加@Configuration注解, 如果没有效果请制定RequestMapping总的method类型

  • springboot调用支付宝第三方接口(沙箱环境)

    springboot+调用支付宝第三方接口(沙箱环境) 大神勿喷!! 网址:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,应用私钥.应用私钥自

  • IDEA基于支付宝小程序搭建springboot项目的详细步骤

    服务端 在平台上创建springboot小程序应用 创建小程序 登录蚂蚁金服开放平台,扫码登录填写信息后,点击支付宝小程序,选择立即接入 > 同意个人公测 > 开始创建 . 填写好小程序基本信息后,点击创建按钮,创建名为xxx小程序. PS:一个账号下最多可以创建10个小程序:未提交过审核的小程序可以删除,删除的小程序不在计数范围. 创建云应用后端服务 在小程序页面选择刚创建的小程序,点击查看,进入开发者页面. 在左侧导航栏选择云服务(免费),点击创建云服务,选择创建云应用,技术栈选Sprin

  • spring boot 下支付宝的开箱既用环境

    sdk-alipay spring boot下支付宝的开箱既用环境 使用场景 spring boot应用中需要接入支付宝 开始使用 pom.xml中引入依赖 <dependency> <groupId>net.guerlab</groupId> <artifactId>sdk-alipay-starter</artifactId> <version>1.0.3</version> </dependency> b

  • SpringBoot设置接口超时时间的方法

    SpringBoot设置接口访问超时时间有两种方式 一.在配置文件application.properties中加了spring.mvc.async.request-timeout=20000,意思是设置超时时间为20000ms即20s, 二.还有一种就是在config配置类中加入: public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void configureAsyncSupport(fin

  • SpringBoot集成支付宝沙箱支付(支付、退款)

    前言 支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了demo,但demo是一个普通web项目,怎么整合到Spring Boot项目呢,其实很简单 简单配置请参照支付宝沙箱支付开发文档 一.支付部分 AlipayConfig配置:我使用的是页面跳转同步通知,返回路径return_url为公网访问地址,也可以使用localhost,且不能携带参数,APPID.商户私钥.支付宝公钥和支付宝网关换为自己的. public class AlipayConfig{ // 应用ID,您的APP

  • SpringBoot下如何实现支付宝接口的使用

    这篇文章主要介绍了SpringBoot下如何实现支付宝接口的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前期准备: 参考之前写过的 支付宝接口引入servlet版本 Jar包引入: <!-- 支付宝 --> <dependency> <groupId>net.guerlab</groupId> <artifactId>sdk-alipay-starter</artifactId&g

  • SpringBoot整合支付宝APP支付

    前言 现在是移动端产品疯狂的年代,随之,移动端支付也是热门小技能,最近本公司在做一个移动端,要接入微信支付和支付宝支付,老习惯,功能做完之后做个复盘记录,这边主要讲解支付宝APP支付 所需条件 1.创建蚂蚁金服开放平台公司账号 2.选择开发中心---->移动应用 3.选择支付接入 4.创建应用 5.查看应用appId 6.添加功能 两个功能:支付宝授权功能和APP支付功能 7.功能签约 开发流程 引入支付宝支付SDK <!-- 支付宝支付 SDK --> <dependency&g

  • Springboot整合支付宝支付功能

    1.需要的Maven依赖 // 支付宝 <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.8.73.ALL</version> </dependency> 2.controller层 /** * 统一下单接口 * @param orderNo 订单号 * @para

  • springboot接入微信app支付的方法

    1.前戏 1.1请先完成微信APP支付接入商户服务中心 1.2详情请参考微信官方文档:https://open.weixin.qq.com/ 2.application.yml文件的配置如下 #微信支付配置 tenpayconfig: #商户APPID appId: asdfg12345 #商户号 mchId: 12345678 #商户的key(API密匙) key: qwertyuiop #API支付请求地址 payUrl: https://api.mch.weixin.qq.com/pay/

  • springboot整合ehcache 实现支付超时限制的方法

    下面给大家介绍springboot整合ehcache 实现支付超时限制的方法,具体内容如下所示: <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency> pom文件中引入ehcache依赖 在类路径下存放ehcache.

  • php 服务端集成支付宝APP支付实例

    支付宝支付分为了很多种场景,这里只讲述支付宝APP支付功能集成,期间遇到了特别大的坑,因此我简单描述下集成过程,并概述遇到的问题及解决方案 由于公司业务简单,只支持支付宝支付,而无需关心退款,查询等等额外功能,因此该篇内容仅仅讲述支付宝支付接口时服务端如何准备APP拉取支付订单的信息,大概流程如下 一.创建应用及配置 首先,需要到蚂蚁金服开发平台(open.alipay.com)注册应用,并获取应用ID,并配置应用,这里在配置时主要是签约,生成应用的RSA2公私钥,同时获取到支付宝提供的支付公钥

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

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

  • SpringBoot集成支付宝沙箱支付的实现示例

    目录 开发前准备 1.密钥工具 2.沙箱环境 3.内网穿透工具 代码集成 1.Java SDK 2.支付宝配置 3.支付和回调接口 4.前端Vue调用 开发前准备 1.密钥工具 在线工具地址:https://miniu.alipay.com/keytool/create 无需下载,直接在线生成你的应用私钥 点击生成即可生成自己的公钥和私钥 这个公钥后面会用到叫做alipayPublicKey 这个私钥后面会用到叫做appPrivateKey 如果遇到生成失败点击链接选择Web在线加密https:

  • php支付宝APP支付功能

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 支付宝网页支付 1.支付宝开放平台添加应用,获得appid,并签约. 2.在支付宝开放品台设置如下: 3.配置支付宝的应用公钥.(根据支付宝的文档) 4.在开放平台下载官方sdk demo. 5.代码: //支付宝 include_once VENDOR_PATH . 'Alipay/aop/AopClient.php'; include_once VENDOR_PATH . 'Alipay/aop/reque

  • 支付宝APP支付(IOS手机端+java后台)版

    0.介绍预览 针对需要在IOS手机上接入原生微信支付场景,调用微信进行支付.如图: 1.资料准备 1.1 账号注册 打开https://openhome.alipay.com,注册支付宝开放平台开发者账号 1.2 开发者认证 登录,进入开发者中心,进行开发者资质认证,并创建移动应用. 1.3 签约应用 创建应用后上传相关资料,上线应用并通过审核.审核通过后点击应用,进行签约,此步骤不能省略,否则或报ISV权限不足. 1.4 应用配置 打开应用信息,配置一下内容,接口签名可下载支付宝签名验签工具进

随机推荐