roses/kernel-d-pay/README.md

152 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 支付模块
## 接入支付宝支付
### application.yml添加支付宝支付appid等信息
```yml
alipay:
appId: 2021000117660206
gatewayHost: openapi.alipaydev.com
notifyUrl: http://101.132.1.2:8001/pay/notify_url
merchantPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC+g1/v3Z968
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
```
openapi.alipaydev.com 是沙盒环境 ,正式环境需要更换网关
gatewayHost必须是外网穿透host否则阿里无法回调成功
### 使用Demo
```java
package com.alipay.controller;
import cn.hutool.core.lang.UUID;
import cn.stylefeng.roses.kernel.pay.api.PayApi;
import cn.stylefeng.roses.kernel.pay.api.pojo.TradeRefundResponse;
import com.alipay.easysdk.factory.Factory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* 支付模块测试
*
* @author huziyang
* @date 2021/05/29 21:38
*/
@RestController
@RequestMapping("/test")
@Slf4j
public class AlipayTest {
@Resource
private PayApi payApi;
/**
* PC支付
*
* @return 支付页面
* @author huziyang
* @date 2021/04/20 20:43
*/
@GetMapping("/page")
public String page(){
return payApi.page("xx全屋定制", "eb58cd5c-7613-41ce-93ef-fcf0ad4284f9","12.5",null);
}
/**
* 手机支付
*
* @return 支付页面
* @author huziyang
* @date 2021/04/20 20:43
*/
@GetMapping("/wap")
public String wap(){
return payApi.wap("xx全屋定制", "eb58cd5c-7613-41ce-93ef-fcf0ad4284f8","12.5",null,null);
}
/**
* 退款
*
* @return 退款实体
* @author huziyang
* @date 2021/04/20 20:43
*/
@PostMapping("/refund")
public TradeRefundResponse refund() {
return payApi.refund("eb58cd5c-7613-41ce-93ef-fcf0ad4284f8", "12.5");
}
/**
* 支付宝回调
*
* @param request
* @throws Exception
* @author huziyang
* @date 2021/04/20 20:43
*/
@PostMapping("/notify_url")
public void notify(HttpServletRequest request) throws Exception {
if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
}
if (Factory.Payment.Common().verifyNotify(params)) {
log.info("支付宝异步回调成功");
log.info("订单名称: " + params.get("subject"));
log.info("交易状态: " + params.get("trade_status"));
log.info("支付宝交易凭证号: " + params.get("trade_no"));
log.info("商家订单号: " + params.get("out_trade_no"));
log.info("交易金额: " + params.get("total_amount"));
log.info("支付宝唯一id: " + params.get("buyer_id"));
log.info("付款时间: " + params.get("gmt_payment"));
log.info("付款金额: " + params.get("buyer_pay_amount"));
}
}
}
}
```
### pom中引用支付依赖
```xml
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>pay-spring-boot-starter</artifactId>
<version>${roses.version}</version>
</dependency>
```
至此支付宝支付就接入成功啦!
如果需要配置应用公钥证书文件路径等信息参照如下yml具体配置参数可以查看支付宝支付官方文档
```yml
alipay:
appId:
gatewayHost:
notifyUrl:
merchantPrivateKey:
alipayPublicKey:
encryptKey:
merchantCertPath:
alipayCertPath:
alipayRootCertPath:
```