热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java支付接口示例代码_springboot集成支付宝支付的示例代码

最简单的springboot集成支付宝1注册沙箱沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下然后沙箱需要注册一下,非常

最简单的springboot集成支付宝

1 注册沙箱

沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下

1a0f1ec1f5b62673584d9025c4cf5b1c.png

38fcd55e71f74c54a5e7dab16d6b6d36.png

然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具。然后解压按照里面的readme生成公私密钥,

cf1cc3e4370ea314c5c25815ba822d8a.png

选择沙箱应用 上传公钥即可。。沙箱到这里就基本完成了,里面还有沙箱版本的的android app可以下载下来。

a974003e939bf9ec20dd8c972f8e468d.png

java 程序

1 新建一个springboot项目

因为我们创建的是一个web工程,所以,仅仅演示支付宝的demo,只需要勾选web就足够了。

101e382f2b55679c234db266a29bef7d.png

2 添加alipay-sdk-java和fastjson

fastjson 的作用是用到了其中的JSON.toString方法。

alipay-sdk-java的作用不用说自然是支付宝的sdk,是必不可少的。

com.alipay.api

alipay-sdk-java

20170615110434

com.alibaba

fastjson

1.2.7

3 Config

新建一个支付宝的config文件,如下

因为支付宝支付完成以后会有一个回调函数返回商家页面

7a56701cea811623640c5ce91c0d048e.png

该页面完成过一会儿结束以后会有一个回调,,因为回调地址必须是公网可以直接访问,这也就是下面用到了netapp映射的原因neturl即为映射的公网地址。

package com.example.pay.config.pay;

import org.springframework.context.annotation.Configuration;

import java.io.FileWriter;

import java.io.IOException;

/**

* @author ligen

* @title: AliPayConfig

* @projectName demo

* @description:

* @date 2019/6/1014:20

*/

@Configuration

public class AliPayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

// netapp映射的地址,,,根据自己的需要修改

private static String neturl = "http://g5kike.natappfree.cc";

// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 按照我文章图上的信息填写

public static String app_id = "2016092800619078";

// 商户私钥,您的PKCS8格式RSA2私钥 刚刚生成的私钥直接复制填写

public static String merchant_private_key ="粘贴生成的私钥";

// 支付宝公钥,对应APPID下的支付宝公钥。 按照我文章图上的信息填写支付宝公钥,别填成商户公钥

public static String alipay_public_key = "粘贴生成的公钥";

// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL

public static String notify_url = neturl+"/alipay/notify_url";

// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL

public static String return_url = neturl+"/alipay/return_url";

// 签名方式

public static String sign_type = "RSA2";

// 字符编码格式

public static String charset = "utf-8";

// 支付宝网关

public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

// 支付宝网关

public static String log_path = "C:\\";

//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

/**

* 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)

* @param sWord 要写入日志里的文本内容

*/

public static void logResult(String sWord) {

FileWriter writer = null;

try {

writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");

writer.write(sWord);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (writer != null) {

try {

writer.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

4 Service

调用支付宝的支付接口就是将一包数据通过支付宝SDK的一个接口发送给支付宝的服务器,然后他会返回给你一个输入密码确认支付的界面。

所以只需要干两件事

1 组装数据

数据最少有5项,注意map的key和value都是字符串

001f4d8a90a93c2da978c5e3851f06e8.png

2 创建客户端

创建一个 Client实例,其中的值即为我们Config中的值

930a76dfb4f08ec279a16c2f66c3b8dc.png

3 发送数据

这里面先将数据转化为request 最后将request通过Client发出去。用到了fastjson的toString方法。也就是前面导入fastjson依赖的原因

5e1b6f23cdbe6717d4fb6fc615ca0c34.png

package com.example.pay.config.pay;

import com.alibaba.fastjson.JSON;

import com.alipay.api.AlipayApiException;

import com.alipay.api.DefaultAlipayClient;

import com.alipay.api.request.AlipayTradePagePayRequest;

import com.example.pay.domain.AlipayVo;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

/**

* @author ligen

* @title: AliPayService

* @projectName demo

* @description:

* @date 2019/6/119:11

*/

@Service

public class AliPayService {

Logger logger = LoggerFactory.getLogger("AliPayService.class");

@Autowired

AlipayVo staticVo;

// 支付服务

public String aliPay() throws AlipayApiException {

// 构建支付数据信息

Map data = new HashMap<>();

data.put("subject", staticVo.getSubject()); //订单标题

data.put("out_trade_no", new SimpleDateFormat().format(new Date())); //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 //此处模拟订单号为时间

data.put("timeout_express", staticVo.getTimout_express()); //该笔订单允许的最晚付款时间

data.put("total_amount", staticVo.getTotle_amout()); //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]

data.put("product_code", "FAST_INSTANT_TRADE_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY

//构建客户端

DefaultAlipayClient alipayRsa2Client = new DefaultAlipayClient(

AliPayConfig.gatewayUrl,

AliPayConfig.app_id,

AliPayConfig.merchant_private_key,

"json",

AliPayConfig.charset,

AliPayConfig.alipay_public_key,

AliPayConfig.sign_type);

// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();// APP支付

AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 网页支付

// AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); //移动h5

request.setNotifyUrl(AliPayConfig.notify_url);

request.setReturnUrl(AliPayConfig.return_url);

request.setBizContent(JSON.toJSONString(data));

logger.info(JSON.toJSONString(data));

String respOnse= alipayRsa2Client.pageExecute(request).getBody();

logger.info(response);

return response;

}

}

5 controller 层很简单 代码如下

package com.example.pay.controller;

import com.alipay.api.AlipayApiException;

import com.example.pay.config.pay.AliPayService;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

/**

@author ligen

@title: PayController

@projectName demo

@description:

@date 2019/6/1013:25

*/

@Api(tags = “支付宝测试”)

@RestController

public class PayController {

Logger logger = LoggerFactory.getLogger("PayController.class");

@Autowired

AliPayService aliPayService;

@ApiOperation("支付接口")

@RequestMapping(value = "alipay/toPay/{amount}", method = RequestMethod.GET)

public String alipay(@PathVariable(value = "amount") Integer amount) throws AlipayApiException {

return aliPayService.aliPay(amount);

}

@ApiOperation("支付异步通知接口")

@GetMapping("alipay/notify_url")

public String notifyAlipay() {

logger.info("----notify-----");

return " a li pay notify ";

}

@ApiOperation("支付完成以后的回调接口")

@GetMapping("alipay/return_url")

public String returnAlipay() {

logger.info("----return-----");

return " a li pay return ";

}

}

6 运行

浏览器访问(我这里设置了端口号为1234) 路径最后面200是金额参数。

4c91c43fb64513d47991a53490eaa493.png

会跳转到如下页面,

此时可以使用沙箱支付宝app支付了,这里我们使用账户登录。。。记住是付款用户登录,而不是收款用户。。。那么哪里看付款收款呢。

打开蚂蚁金服->开发者中心->沙箱 如下图

0f816f8339c6dc0bc1015974fb06d3e4.png

登录第二个账号后如下图 密码默认都是111111

13a6fdd5bb937bb44c8510f21f39dc2f.png

873c68f03d4a9e59199fc7cf9b1ae391.png

如果设置了return url 将在该页面结束以后自动跳转至return url对应的页面,如下 我在return url只是返回了一个字符串。

ed9f6a6b95d91afa57e746b9df7ca164.png

代码git 地址

到此这篇关于springboot 集成支付宝支付的示例代码的文章就介绍到这了,更多相关springboot 集成支付宝支付内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!



推荐阅读
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
author-avatar
风一样的梦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有