操作步骤:
下载链接:https://docs.open.alipay.com/270/106291/
(二)登录后台选择服务类型,并完成信息填写
选择自研开发服务→填写个人信息
(三)进入研发服务
(四)配置密钥
点击“生成方法”,打开界面如下:
下载密钥生成工具,默认安装后,启动如下应用,然后点击生成密钥:
进行公钥的设置
选择“公钥”,将生成的公钥复制到输入框中,点击保存设置
至此,AlipayConfig的相关信息配置完毕
(一)使用Spring Initializer快速创建SpringBoot项目
(二)相关信息
(三)选择Web
(四)pom.xml文件的修改
其他配置文件不动,添加以下内容
<!--代表了springboot集成所有第三方插件的依赖,导入这个注解才能代表这个项目是一个SpringBoot项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
至此,一个SpringBoot项目就快速创建完成啦!
导入项目后,目录结构如下:
这里一些官方demo中的jsp页面我没有导入进去,大家可以根据自身需求导入,我这里只是做一个简单的应用
下面需要进行相应的配置修改:
(一)添加相关依赖
<!--alipay SDK-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.70.ALL</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
<!--slf4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
</dependency>
(二)配置application.yml文件
# 应用名称
spring:
application:
name: sandbox
server:
port: 9010
servlet:
context-path: /
tomcat:
uri-encoding: utf-8
话不多说,直接上代码:
(一) AlipayConfig
以下相关基础配置类的信息,在上方图片中有标出,大家可以自行参考
因为只是简单的整合,所以return_url和notify_url我设置为了百度的地址,这里大家可以根据自身需求进行设置
package com.trikeys.sandbox.config;
import java.io.FileWriter;
import java.io.IOException;
/* *
*类名:AlipayConfig
*功能:基础配置类
*详细:设置帐户有关信息及返回路径
*修改日期:2017-04-05
*说明:
*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "2021000117659363";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCaxIeBHDyr30Fy04XQG0ErRWECcTBtYvuddmFsLgrmYWu1oTDGb7kvpziDPuvuQZMPqd59XhzKbyS67GRIkFlQg5arniNN0lHtByxabmsUEU5c9AxxSzxNvpda7YeSA9j5pTUvfDaeeMs7hNy4k6o6AoTsNN8zNup8GVHjoJpOKxo5kY3aAa8LY1MtH+5kJmlkEpj1wtZ/GpIaUOCZ0offs4dOl5hpvU4h85YzRESmGvYRec34GjIrUbdr47y+GeEAw536WaeuTfOzrSJxZpRHWD2t8lfz+XrDQXOq8gsymuZobEhQ1RN5OekUecq4M7ONKqMzP1i+aWuNWCw5UYC/AgMBAAECggEANBJfjP8VIraw7JNieExTNt3W791pb8RX5/jGeoFbRXwNo0SihoFciz3186Kd+sGxWxnKM+AQS8PtVb7nVsrKYh6D+SXxtuNGkTtSnvJ7sHrKJNgvv4aSuY2gmwVEEcqdnBELvfhK4DLAHjxrjuaP5YindFmtpyuY5TwXo0CL6jRsLuaMqVWXIUK10Y8rbpAtgrfwXxR4tFzTyx1XSo/zRQAZaXySTWtDVy6MOkGsdpJZfumgNpH4coVCrT0GJJKjPET8Zloz2mUZI1PiNi19NjXrERle1wRFSglln45CnMEp/X803GFH8GfGwg6ZYEKhxOqmRztsaWQi9Uhzb2CVUQKBgQDSVpO9vavPnXiLRx0mlbT4quwSGhFIOeN0IcT72yFbOpKrX6ESmTxVpNpvZcUAIajS63TD/RQGDzBesx859SIp0B6Frkh+hQsNl34KYeEEv7HsjptoOyT9IGXsK7Fe+IEWm25gDJ8PTpid54tdg+sJB/s2vgU89BTx0Xdm+dN7gwKBgQC8XadqpA2bXJ6/BnvuQwMHUUVTt0xRueyaOLaXHygV8rarYqUdskDUDSf5Bt/yenmdA/FnsauOZO2fMELPt6ji1T+jn+JS4WhhnLHN8Rtn93DNo6ROVrxubGwH8FXNDFY+nzYeX622IL3dKUsUrgamw4yXaoyc+gpmWhsLU+z1FQKBgEHj4TBFJHdLSyHGSzl1GFX1pTIefF910uzkT0LeaFqdxKhuspSS8DWcCNlwtf/Oi4ZXQCLNOuKTC4H+9r8/LU6P5Z/W8tq/brD5TgCOnODR9Di4i7JhJLsu1P7gyRWJH1cnpbHtAj7XTjPY/u1yj8QqfeWuLRHlHFKMXa0igb9lAoGAXq85C4rhaBoblew9eZvnttLsZVN7Io2x2Cfv6HD55mZ12hqg4xeKLM1cLXp+MdXMsdecjkIp+U7UfzN0MhOg6jzFW4tv6bdyj7aDTgEHhLBF3KiIW/SPjXYkq6zshEDSTXIccxInMKiup7AtFH0RzNv5HNerTPEHL0HV3FDYiK0CgYAymZ9wq+ycM6nCvB/NeCsQ+f2onEqtP1UrdDRpSVnw1JR79JW7LHWhO6TBVNk2gUBaF2QhO/66e35IpZVv6vg9aBJ6izlmdekaQTW3BEX4e4iRRr17FPseqQP2FkTeR+hrorsrYu4Ccu2FwDjQ3BjWbAPIVtlpN6f5zm35btrCrA==";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqQlYrIRvd5uaDWpIwXmo5u1J+rU/sbgN6VICV2ZyoewL6FY4P+aFxt8vFId25ZSQYSNFTRvkRnXb/IFK8DS81CufRJlephMOceIhoem3nLmqQVeaIloP2RGEzuvD2h2wurR+Bl5sih3HnPjKINDlDdrqITz8MF9ZF4WiDxN0spdtxLyvsD6d3xnLISiSqM5xFqiXKBXnYzMVt19uk8g4QeBRsAkoXLmFEi/Bjw1zEjHERq98xasQL6fNsNx0QxzeFX2UaaBRu/FjPmX3blTVPXhkCHu3gc+IBUXo4+537WTf7W+OMPpsH3h2HGtU6uN4yFnU5vxpRZ50a7gK/hG6wIDAQAB";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "https://www.baidu.com";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "https://www.baidu.com";
// 签名方式
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 = "D:\\";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
/**
* 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
* @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();
}
}
}
}
}
(二)AlipayController
package com.trikeys.sandbox.controller;/*
*
*@author trikey
*@date 2021/5/17 9:42
*/
import com.trikeys.sandbox.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
@RequestMapping("/alipay")
public class AlipayController {
@Autowired
AlipayService alipayService;
@RequestMapping("/pay")
public String pay(HttpServletResponse response, HttpServletRequest request) {
String str="" ;
try {
str = alipayService.aliPay(response,request);
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
(三)AlipayService
package com.trikeys.sandbox.service;/*
*
*@author trikey
*@date 2021/5/17 9:40
*/
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public interface AlipayService {
String aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException;
}
(四)AlipayServiceImpl
package com.trikeys.sandbox.service.impl;/*
*
*@author trikey
*@date 2021/5/17 9:41
*/
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.trikeys.sandbox.config.AlipayConfig;
import com.trikeys.sandbox.service.AlipayService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;
@Service
@Slf4j
public class AlipayServiceImpl implements AlipayService {
@Override
public String aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException {
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
aliPayRequest.setReturnUrl(AlipayConfig.return_url);
aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);
//商户订单号,后台可以写一个工具类生成一个订单号,必填
String order_number = new String(UUID.randomUUID().toString().replace("-",""));
//付款金额,从前台获取,必填
String total_amount = new String("0.01");
//订单名称,必填
String subject = new String("瑶瑶");
aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
+ "\"total_amount\":\"" + total_amount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求
String result = null;
try {
result = alipayClient.pageExecute(aliPayRequest).getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
//输出
log.info("返回结果={}",result);
return result;
}
}
浏览器访问:localhost:9010/alipay/pay
扫码或登录即可进行支付
这里的支付需要下载支付宝客户端沙箱版才能够进行支付
下载完毕后,登录的账号和密码需要使用沙箱账号进行登录,然后就可以进行支付啦!
至此,SpringBoot简单整合沙箱支付就完成了
(一)出现 :支付存在钓鱼风险!防钓鱼网站的方法 错误的界面
解决方法:关闭所有支付宝登录的平台,清除缓存,再次访问
(二)支付宝客户端沙箱版界面可能会出现网络异常,这个可以直接使用扫码支付即可,不影响。
(三)其他问题需要检查pom配置文件是否出现一些问题,可自行百度解决。
支付宝官方的demo提供的是javaWeb版本,刚学习SpringBoot不久,我一开始弄的时候还有些迷茫,经过看一些文档的学习后,集成到了SpringBoot项目中,我这里只是做了一个简单的集成,大家可以根据自己所需要的业务来自行更改或添加,也希望这篇文章能够对大家有帮助。
学习时参考文档:https://blog.csdn.net/weixin_45213302/article/details/115490036
这是我的第一篇文章,也算是对自己成长路上的记录吧,有不足之处,希望大家能够帮助指出,谢谢。
如果您觉得文章写的不错的话,不妨点个赞呗!