ssm集成沙箱支付宝支付

2024-03-04 07:30

本文主要是介绍ssm集成沙箱支付宝支付,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前测试一直显示系统繁忙,问了一下才旧版沙箱已经停止维护了,要登录新版沙箱沙箱支付

1,注册支付宝开发者平台,进入是这个页面

appId,gateway是等会在项目中会用到的,**选择自定义**,点击设置并查看。

2,点击设置并查看之后,让根据应用公钥生成支付宝公钥,我们需要下载**生成工具先来生成这个应用公钥。

可以发现生成了一个应用公钥,一个应用私钥,这两个记住他们的位置,等会都会用到。

3,使用应用公钥生成支付宝公钥。

注意!!!我们后面真正要用到的是这个支付宝公钥,应用公钥只是为了生成支付宝公钥,千万别搞错了。

将刚刚的应用公钥粘贴下来,自动生成支付宝公钥。

4.准备完成

目前为止,appId,gateway,**,publicKey都已经有了,这四个是接下来必须的配置,我已经都标注了。

5.进入到项目当中,导入依赖。

        <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.16.2.ALL</version></dependency>

6.创建配置文件aplipay.properties

前面四个属性按照自己的配就可以

returnUrl指的是支付成功之后同步回调地址,这个不是必须的。

notifyUrl指的是异步回调地址,在支付成功之后,支付宝会给我们异步发送本次交易的详情。注意!!!这个地址必须是公网地址,因为是在本机上测试的,所以用了内网穿透,后面再说。

alipay.appId=9021000132618445
alipay.privateKey=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyg5po29pFfrFLiz1uHipN/EZSDbGHtvHn8kG1eTn5ypbEXLEaEu+fS2o1JWrVa68Lx8QKl8BlgBOfQONkQ73Z5hB9fCZQZWsbf+OUb+EO/S12G2Gzia9xfp2YtKm747ORCsYmreaH6/IlKTm0uVXQHObMz4MmO1Auk0ixBUgMx7ellM4u0vxmP19q1CtHuIQowdVYkp+kRoxZTIeqKihY84iAQlW7mxV0XN2nNfoIUXV+8AJt497azlOpZiLK7GPGDDuNUn1TZRB9pOHqHze9OpzQ2JriqrMAX+cioNk+r4z+HAA9+uKJ2nuFaZsqYLOx6LJ3CCxijpIlQVVAOPClAgMBAAECggEAPHCcXfZZ73+WrZomIVtrPV41vOBQBEAnpT17i+LQg0dZRoCPoeFZahiRjA7wHfRInvdy45c/l94GRrwkgTUCWX0whhv7qOq9meDx/7blfzqvIrbgnHX4hbe1yhcZBLlyeaApOL1WORzkrjpIBG1fpYeziRKVN+OLIUnSqcS9AT4m5U1mogsf0A/V3eVs2yCPdNT6w5cT99/2BLgBINW72iDWAgFzw4H1oSIKQdEdrJ37bpQRWjE+GPTTaLJeyXDnpXIodmXjuQnLnKjUkwbZqi7Sn4pVAeeZTJ2zdomfUYGPlZOKg7kPA1Kij525vvpV2czklBG1YhUZeeyPJ6U3oQKBgQD51XVKN4fW12OBPw2OwzULGXeu3pM68GTySWEtQRTBXUgOdr/SlVYstzLvl53wi3F9m+VOS2M4dY+yfItXk0Lgyf3TZuyGI3xOBo6Vfc83ksUoOr1SXe39yHUULJfjU0RSwRiJ1+M5PofIm0UU5Hdl64/6K5QiS2r3GEuHNtoybQKBgQC264VJS0C95MrW9pvbcmsZeBbHk3w4TtDW4+eMMhBmEr94HLyygqavjDcOCENwtvIgm13dbHAaK2LgGtj6FXsYpzyXbFg2N0l98LI1z84Jf8VpKQiwwTtB8oJadprokcyFIvYCTtaYIkoDPt5xbb+fKC91VT6+X7PrLTHg3O+UGQKBgQCQsTPQ3ABsSSpz/FSZziy2VPWf7YBPrlKIkD8buomOw7urxNKr35mdJCz33lO2sMv194gCpF6+oDetI7x/5+Xf0pyTBxUNSxf/CIUjx01v3i0Zc4uaXJQtWx+To5AENIFpfDP+AW60BKcXY/XKd9c+zAMC3KJailtU6Fk14mrUsQKBgH5iMkBW50+M4f0ufLdd0dPSHmMcaup4wmCHLPe3q47rCzHRIStxi/uktHFUkkwxiw+uaWdQwg/CxFk1E4+PAfMhsYKqEDS9dGC4yljV0HTNvDcRa/i8OdYx2ZDpe9SO0DF422Ly1+BbaKnfaVAT1R8BY/D8yhI9C5HFMz47SKkZAoGAOBDzKkhv4dW7bl08qHCiwBYJ3bLFGGuwv4PP9eMqb9vwdIDEzNAZbouZ7Jsf3ZMwaJyMLx4FP5b2PjNsULt33mGlzsiUt3k8hzGfqEfqRk1drLzCfM+B25lQuBh8+NvPUzGQiyxTH/9+T5pd5Ud00wJDxtXVtCUDddXC1t0QUDg=
alipay.publicKey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvK0u9cOpmhjLTtrDo4dDl66ud5v1qNSyj5/iLxLAw6oecDohGu9NSvttySTihLnuClKQmGePSVQmprVjL0erziF8qZP/ZzcbRyocNLGlyQWJo7CEPBbscYy0tENtBgv9mxi+9un0f5u9JIe6zf6FRX34+7tF0BBq5fVW//uuupSqffn30zX4RSaY/JymFwuWjxKZI4t3nO/iTJdu8FIhI+UddmTtsBh1YTe2BQeuFAavASH/WzOjk0d6gTzOFYXFswIrxrFD80FnCVttWfTiKeLWPoarxOGe5LoS2QQKA4+X8Yj3ze+tw0z4GB1lf+r+2oMy4Ad4F5J82C3572Vx7wIDAQAB
alipay.gateway=https://openapi-sandbox.dl.alipaydev.com/gateway.do
alipay.returnUrl=http://vfqahy.natappfree.cc/returnUrl
alipay.notifyUrl=http://vfqahy.natappfree.cc/returnUrl

7.编写配置类

@Data
@Component
@PropertySource("classpath:alipay.properties")
public class AlipayProperties {/*appId*/@Value("${alipay.appId}")private String appId;/*应用私钥*/@Value("${alipay.privateKey}")private String privateKey;/*支付宝公钥*/@Value("${alipay.publicKey}")private String publicKey;/*网关*/@Value("${alipay.gateway}")private String gateway;/*支付宝前端跳转  不需要是公网!!!*/@Value("${alipay.returnUrl}")private String returnUrl;/*异步通知 公网!!!*/@Value("${alipay.notifyUrl}")private String notifyUrl;}

8.创建Controller。

支付宝要求必须有一个订单号,所以我们就给他生成一个订单号orderNumber.

sendRequestToAlipay方法设置参数,向支付宝发送请求,里面这些参数约束是支付宝规定好的。

sendRequestToAlipay中的这个pageExecute是向支付宝发请求。

@Controller
public class PayController {@Autowiredprivate AlipayProperties properties;private final String CHARSET = "UTF-8";private final String FORMAT = "JSON";private final String SIGN_TYPE = "RSA2";@ResponseBody@RequestMapping("/pay/alipay")public String alipay(@RequestParam("dona_money") float dona_money,@RequestParam("dona_id") int dona_id) throws AlipayApiException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");String timeStr = dateFormat.format(new Date());String orderNumber = timeStr + new Random().nextInt(1000000);//向支付宝发送请求return sendRequestToAlipay(orderNumber,dona_money,"ghjk");}private String sendRequestToAlipay(String outTradeNo, Float totalAmount, String subject) throws AlipayApiException, AlipayApiException {//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(properties.getGateway(), properties.getAppId(), properties.getPrivateKey(), FORMAT, CHARSET, properties.getPublicKey(), SIGN_TYPE);//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(properties.getReturnUrl());alipayRequest.setNotifyUrl(properties.getNotifyUrl());String body = "";alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"total_amount\":\"" + totalAmount + "\","+ "\"subject\":\"" + subject + "\","+ "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求String result = alipayClient.pageExecute(alipayRequest).getBody();return result;}
}

9.测试

为了方便,我直接在地址栏请求这个接口,如果正常,显示的页面如下,接着正常填写即可。

如果出现异常,很大概率是配置文件配置的不对,那就再检查一遍。

【可以看到那个页面,这个好像属于违规因为有二维码,发不出来】

10.接下来写回调接口。

在支付成功之后,会自动回调上面配置的alipay.notifyUrl那个地址。获得订单详情等等.....

这是地址必须是公网地址,不然打不过来。natapp内网穿透配置

    @PostMapping("/notifyUrl")  public String payNotify(HttpServletRequest request) throws Exception {if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {System.out.println("=========支付宝异步回调========");Map<String, String> params = new HashMap<>();Map<String, String[]> requestParams = request.getParameterMap();for (String name : requestParams.keySet()) {params.put(name, request.getParameter(name));System.out.println(name + " = " + request.getParameter(name));}String tradeNo = params.get("out_trade_no");String gmtPayment = params.get("gmt_payment");String alipayTradeNo = params.get("trade_no");String sign = params.get("sign");String content = AlipaySignature.getSignCheckContentV1(params);boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, aliPayConfig.getAlipayPublicKey(), "UTF-8"); // 验证签名// 支付宝验签if (checkSignature) {System.out.println("交易名称: " + params.get("subject"));System.out.println("交易状态: " + params.get("trade_status"));System.out.println("支付宝交易凭证号: " + params.get("trade_no"));System.out.println("商户订单号: " + params.get("out_trade_no"));System.out.println("交易金额: " + params.get("total_amount"));//自己的业务}}return "success";}

这篇关于ssm集成沙箱支付宝支付的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772450

相关文章

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

SpringBoot如何集成Kaptcha验证码

《SpringBoot如何集成Kaptcha验证码》本文介绍了如何在Java开发中使用Kaptcha生成验证码的功能,包括在pom.xml中配置依赖、在系统公共配置类中添加配置、在控制器中添加生成验证... 目录SpringBoot集成Kaptcha验证码简介实现步骤1. 在 pom.XML 配置文件中2.

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库,添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存 1、环境准备 新建一个 SpringBoot 工程,引入依赖:

系统架构师-ERP+集成

ERP   集成平台end:就懒得画新的页

Spring Boot集成Tess4J实现OCR

1.什么是Tess4j? Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 Tess