1. Log in to Alipay Sandbox
Login – Alipay
Click on the console
Scroll to the bottom and click on the sandbox
Click to view the public key mode and copy
Copy the public and private keys and write the configuration class
#ID alipay.appId=9021. . . # Public key alipay.alipayPublicKey. . . # Private key alipay.privateKey. . . # Callback address?# https://www.baidu.com/ alipay.notifyUrl=http://127.0.0.1:8081/paySuccess alipay.returnUrl=http://127.0.0.1:8081/paySuccess alipay.charset=UTF-8 alipay.signType=RSA2 # Response address alipay.gatewayUrl=https://openapi-sandbox.dl.alipaydev.com/gateway.do alipay.logPath="F:\alipay\log"
Required jar packages
<!-- Personal version pitfalls: If you do not add this dependency, when in the configuration class When using @ConfigurationProperties(prefix = "aliyun") annotation, My version of spring boot will prompt that there is a problem --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.31</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.3.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.74</version> </dependency> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.22.110.ALL</version> </dependency>
Write configuration class
AliPay:
package com.cskt.springboot_aliyun.baen; import com.alibaba.fastjson.JSON; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.cskt.springboot_aliyun.config.AliPayConfig; import com.cskt.springboot_aliyun.domian.Order; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @author 26846 */ @Component public class AliPay { @Autowired private AliPayConfig aliPayConfig; public String pay(Order order) throws AlipayApiException { //payment gateway String serverUrl = aliPayConfig.getGatewayUrl(); //AppId String appId = aliPayConfig.getAppId(); // User key (private key), that is, RSA2 private key in PKCS8 format String privateKey = aliPayConfig.getPrivateKey(); //Format to json format String format = "json"; //coding String charset = aliPayConfig.getCharset(); //Alipay public key, which corresponds to the Alipay public key under Appid String alipayPublicKey = aliPayConfig.getAlipayPublicKey(); //Signature method String signType = aliPayConfig.getSignType(); //Page jump synchronization notification page path String returnUrl = aliPayConfig.getReturnUrl(); //Server asynchronous notification page path String notifyUrl = aliPayConfig.getNotifyUrl(); //1. Get the initialized AlipayClient AlipayClient alipayClient = new DefaultAlipayClient( serverUrl, appId, privateKey, format, charset, alipayPublicKey, signType); //2. Set request parameters AlipayTradePagePayRequest alipayTradePagePayRequest = new AlipayTradePagePayRequest(); // Page jump synchronization notification page path alipayTradePagePayRequest.setReturnUrl(returnUrl); alipayTradePagePayRequest.setNotifyUrl(notifyUrl); //Encapsulation parameters (json format) alipayTradePagePayRequest.setBizContent(JSON.toJSONString(order)); // 3. Request Alipay for payment and obtain the payment result String body = alipayClient.pageExecute(alipayTradePagePayRequest).getBody(); //Replace the information return body; } }
AliPayConfig:
package com.cskt.springboot_aliyun.config; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; /** * @author 26846 */ @Configuration @PropertySource(value = "classpath:application-alipay.properties") @ConfigurationProperties(prefix = "alipay") //Prefix @Data public class AliPayConfig { private String appId; private String privateKey; private String alipayPublicKey; private String notifyUrl; private String returnUrl; private String charset; private String signType; private String gatewayUrl; }
service layer:
interface:
/** * Alipay payment interface */ String aliPay(Order order) throws AlipayApiException; /** * Query order information * @return */ List<Order> orderAll(); /** * Add order information * @param order * @return */ int orderAdd(Order order); /** * Modify order status */ int revise(String out_trade_no);
Implementation class:
package com.cskt.springboot_aliyun.service.impl; import com.alipay.api.AlipayApiException; import com.cskt.springboot_aliyun.baen.AliPay; import com.cskt.springboot_aliyun.domian.Order; import com.cskt.springboot_aliyun.mapper.OrderMapper; import com.cskt.springboot_aliyun.service.AliPayService; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @author 26846 * @date 2023/3/23 10:47 */ @Service public class AliPayServiceImpl implements AliPayService { @Autowired private AliPay aliPay; @Autowired private OrderMapper orderMapper; @Override public String aliPay(Order order) throws AlipayApiException { System.out.println("order----service--:" + order); return aliPay.pay(order); } /** * search information * @return */ @Override public List<Order> orderAll() { return orderMapper.orderAll(); } @Override public int orderAdd(Order order) { return orderMapper.orderAdd(order); } @Override public int revise(String out_trade_no) { return orderMapper.revise(out_trade_no); } }
Control layer:
package com.cskt.springboot_aliyun.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradeRefundRequest; import com.alipay.api.response.AlipayTradeRefundResponse; import com.cskt.springboot_aliyun.domian.Order; import com.cskt.springboot_aliyun.service.AliPayService; import com.cskt.springboot_aliyun.service.impl.AliPayServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import java.util.List; @RestController public class AliPayController { @Autowired private AliPayService aliPayService; @Autowired private AliPayServiceImpl aliPay; /** * Enter the payment homepage * @return */ @GetMapping("/") public ModelAndView index(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("testAliPay"); return modelAndView; } /** * Submit Order * @param outTradeNo * @param subject * @param totalAmount * @return * @throws AlipayApiException */ @PostMapping("/order/alipay") public String aliPay(String outTradeNo,String subject, String totalAmount) throws AlipayApiException { System.out.println("--------Enter and submit payment----------"); Order order = new Order(); order.setOut_trade_no(outTradeNo); order.setSubject(subject); order.setTotal_amount(totalAmount); order.setState("Payment successful"); System.out.println("order-----:" + order); if (order.getOut_trade_no()!=null){ int i = aliPay.orderAdd(order); } return aliPayService.aliPay(order); } /** * search information */ @GetMapping("/paySuccess") public ModelAndView All(){ //If the payment is successful, the order will be added to the database //If you cancel payment, you also need to add an order to the database, cancel order-status //Order query can find out the order status information ModelAndView modelAndView = new ModelAndView(); List<Order> orders = aliPay.orderAll(); modelAndView.addObject("ordersList",orders); modelAndView.setViewName("success"); return modelAndView; } /** *Refund orders * @param outTradeNo * @param subject * @return * @throws AlipayApiException */ @GetMapping("/refund") public ModelAndView refund( String outTradeNo, String subject) { System.out.println("--------Enter to submit refund----------"); //The gateway and appid of Alipay sandbox environment String gateway = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; String appId = "9021000129651143"; //Apply private key and Alipay public key // Merchant private key, your RSA2 private key in PKCS8 format String merchant_private_key="MIIEvQIBADANBgkqhkiG9w0BAQEFAAASCBKcwggSjAgEAAoIBAQCWjBTeJqomgK19q8x17V2CpovMIz/kXf4ejack43RLvG4 + DCzKAtDrBLd62WbqXvj5A5pLBOveBQH/I8PxTDOZCJfh3R1f 2Qjz19vavhujf76nSowpaNWL9IAd29pAE2RuM3w4brCktkB7TMnfPv + kowcWIf5h2SFabC6l1tPh7l5XBvwz9A6qEJW + Rflc81WvqAvUBKJWZ1VEmH2oiy1eeLnm6ZV2Boop3YjZrNCs0qvfKcK G6kRXZCuDDCkosHfYJwaMc8a8Bn6HbB3iRuaHuBfMCcbfe6Zb9zx5DbE5PsLazNX2a + 0TfpUZGMemr3L52Q3UfW6hlTPtKCdeS0YlAgMBAAECggEAJuUiLxMGOtRb/m/4by9YTX0B + UfSJgoysWofmOQ7 E6YnRViX6ck4eL/LN64bbMoEwTExF9i5p67biTOQWDM70Xnq46vg/vZv3bATWTxsn51NgKM9 + yTepz4QK6a1iIB6Hg6nNV1DvgpoNnLsZQU9vydvmURHGLikaVwx4R7TtzccSzkPaAgnqGI/69yf ZQoU9au5NebfilGYhBSUQrr/b1Wj0mBX1UAg14Z + Cz9AOjG6of2HnvQ4sNSQskdKCyh2QD + MfdzSAffY3YCiFpo3XnMpoFp4qrVSCNFh99/ccucTsVg9mhTXGfSWnZ0ZiFUDJUVjFzm + goArS3IcUnl SsQKBgQDgIzq3ScvqoxCSH27Z/AZ9c/lGznsjQBn6yiiam6/ZdYDZlZLRL + b8cHzYDAjQRpK2iLms3gDc7fX8o/ orsuYkwP108uuJ28SQlQbY96R75okiKR + 5dKR1CVMkYzcsv7mGg5OeqEa50un + ffH/e9DnTzqN4L5E7cNR0jier + 4v/wKBgQCr8sOzwLyOdYYG6i/LG9Z/k8mjbqUsVhajoV4pdMS OPDqn5GrAUZ1QhsSyOnrij/MUTmRT4i + flEotExS06TQT8QjW4qEYjCqK3WMon/DD4kdzniKVSrJ4xkg/YGDx5Yo3UJJvkw1qLwv2L + 4BuFj1lohcFHPINZ + 4cTckdifJ2wKBgD6heYHIDEQnhrTeN bKR2xppMsnXXs9N1TSgEtKJGI1SaUvjoN/1W71EjY4tZrUUU2DQOdoVOvaBRBBxnbFiTy8MAocQbkLad0XTbtNn971rgPxbs3K2JlJR5bqwQrWtaWEuGSznZsP8LMihVuMGLSzFld4ZY/GM4txVOt8 U2CDvAoGAZs/HOGmb1MpskyHf5eAFR08El9YGqRXof3pzJPKOvEVDBTRMqCWknIuYfMD + zQ0pWRDuaEGsHAy8tWrdTLbLzsimcmYb0OOuZE2vhpDrkxRviLAbGY0KXbChblOgY8LN + /kPNeuFb + IlktRhyWGCv4V8j yIjgKifkdcQE5sae1UCgYEA2UL67oEe3cvDCKoQZeu28ieinRxPuqK + 4f3eVQuR81rnvoN7RHcmTLWnd3Zjl8H4SnWBrODWRDX7UjTobchMsYDG33Wxxk3iX02V0QuwJM9uFd2mrGBD42wK0sESQVz/r bp88FVAcX5Or2U + 0X + ex0CKhX36NBOSRrxJyB6LxZg=" ; // Alipay public key, view address: https://openhome.alipay.com/platform/keyManage.htm corresponding to the Alipay public key under APPID. String alipay_public_key ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNhWdNjR75qo3F/FnTyCEEDnmoUy7TX2Si0L0vMURfbdDAKtg7q8kO2GZnEANluqED2yf6zdXc0soiuSfMSN3GC + 8nVRmBpx VJvVTXs8dkxdqEByWSS8qFB + tE2eYtd7A8D0EWzYeZZHVc5PZaqGsUz9QeFqgW/XGpgLokAzzb0rVQKq8o5cQ0HxvRcVZoHOr6/WZlPSko31MXzzr2mhH6aci + I3ofdrDexwwOC6qM4zt7U sz7gTtgU0dzu5pwvNrF + yCpcjPX2d6nAz78OMi8K8xHQYdYL5d34ecbrfjt1bq3j4zFJIRr54xdOjFIjKBC/Ye2Gp3joRvoFW8qRnuwIDAQAB"; //Create AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(gateway, appId, merchant_private_key, "json", "UTF-8", alipay_public_key, "RSA2"); //Create a refund request AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); request.setBizContent("{" + ""out_trade_no":"" + outTradeNo + ""," + // Merchant order number ""refund_amount":"" + subject + ""," + // Refund amount ""refund_reason":"No reason"," + // Reason for refund ""out_request_no":"your_out_request_no"" + // Refund request number, guaranteed to be unique "}"); try { //Send a refund request and get the response AlipayTradeRefundResponse response = alipayClient.execute(request); System.out.println(response.getOutTradeNo()); // Determine whether the refund is successful if(response.isSuccess()){ int revise = aliPay.revise(outTradeNo); if (revise>0){ System.out.println("Refund successful"); } } else { System.out.println("Refund failed: " + response.getSubMsg()); } } catch (AlipayApiException e) { System.out.println("Refund request exception: " + e.getErrMsg()); } ModelAndView modelAndView = new ModelAndView(); List<Order> orders = aliPay.orderAll(); modelAndView.addObject("ordersList",orders); modelAndView.setViewName("success"); return modelAndView; } }
Entity class:
package com.cskt.springboot_aliyun.domian; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** * @author 26846 */ @Data @AllArgsConstructor @NoArgsConstructor @Accessors(chain = true) //chain public class Order { /** * Merchant order number */ private String out_trade_no; /** * Order name */ private String subject; /** * Payment amount */ private String total_amount; /** * state */ private String state; /** * Timeout parameter */ private String timeout_express = "10m"; /** * Product number */ private String product_code = "FAST_INSTANT_TRADE_PAY"; }
Project structure:
The knowledge points of the article match the official knowledge files, and you can further learn related knowledge. Java Skill TreeHomepageOverview 137704 people are learning the system