147 lines
8.1 KiB
Java
147 lines
8.1 KiB
Java
package com.muyu.system.controller;
|
||
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.alipay.api.AlipayApiException;
|
||
import com.alipay.api.AlipayClient;
|
||
import com.alipay.api.DefaultAlipayClient;
|
||
import com.alipay.api.request.AlipayTradePagePayRequest;
|
||
import com.alipay.api.response.AlipayTradePagePayResponse;
|
||
import com.alipay.easysdk.factory.Factory;
|
||
import com.muyu.common.core.domain.Result;
|
||
import com.muyu.common.system.domain.PaymentParam;
|
||
import com.muyu.config.util.SfUtil;
|
||
import com.muyu.config.util.StandingRes;
|
||
import com.muyu.system.service.SysUserService;
|
||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||
import jakarta.servlet.http.HttpServletRequest;
|
||
import jakarta.validation.Valid;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.web.bind.annotation.*;
|
||
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
|
||
/**
|
||
* @Author: wangxinyuan
|
||
* @Date: 2024/8/25 下午3:21
|
||
*/
|
||
|
||
@RestController
|
||
@Tag(name = "PaymentController", description = "支付接口")
|
||
@RequestMapping("/aliyun/pay")
|
||
public class PaymentController {
|
||
|
||
|
||
//appid
|
||
private final String APP_ID = "9021000139609995";
|
||
//应用私钥
|
||
private final String APP_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMbBAf8yRmFvLx2SEfhdjdidpqWzfeRkL8d3K0Sz9DC5xxnrrUujwQF7FfbmwR43oJy1mIrMffc2Fp3vpSjWgdOMfAJy5N0GlrDb4o/3mN3pH3xElfdz7VEw9jcIhLDEsV2LP3nnrbkEKoj93gnZsuMkTnO4yfsEyCZVL6rkK01R9Pcu3tKKLrY5n30U7aE1WOuKvE3pTmxkpdXaX3Q46npP8wHOY1x6kUzyFgjFip/E4HEE91OzqaVnirt6GkWm9m0VAiUOENthEbnSzKagoVuTV0lXoX0hzTJ4H/4Ees2wOE4pZzeK2xqrolD3/EIR31I1ztyz4hXJG3sBC3v7gFAgMBAAECggEAQP9jKSWAP02wtaFaXNGMIPTCE+spGm2wwuGgAR+j38eDWMUllpoYmu1NopBToGR52z9jGogFjVD8elNBuJnprtDtAnXyzR8lRbq66gJBPhC0zNkGk2ow+kLzM6UGUQZ5oVqj7mnfmoyGBV6pJ9A1FT06l2Nh1SyTRyq8daSO5TwE5wUl040YT5pFIy4TCL1NhJVqDU61kNZCzVrUN4Lorkvv4gAeYZGY0cX0QMWXxwq5N7dOAn1tbwuo3WHnJbva3KBOVCtkldZ7Z0iwFQsniZXuXk7NmpNKFuZiQArlR8pTqDJB1dUwua9Nw1c9T+0CvpGRUH2u3wFIWK/RYyh0gQKBgQDxZaam5Z4irNdlxv9ypwQiiSsar745cDsmKv7oE4mUkxQzcR1segK+og0aX2s6Oa25Cj64jSXqbY/Y2DsoIEFFDe9z2E52QEOsZcN51edLc88YsopSSSIgobA8/+hB+AHjlILNhrtghwbKBOxNR5vBM/QGmfWaGPqtA8HsD3DQcQKBgQDYyc56eLOPWLuREu1aFrNs4viJ8r4v+pZmLFrXHojPF3teQr6z+CnrnF7vKYAmnOVxD2M44LgRr7LYnswzDWLLvrAkhUCYiaTL+6dvgy0okkUGE5QjGPP889yiHef8b1fRKNaVM+hXkt452oqhh95ZMnN4/ugZ3Uiq3UF8Q4vq1QKBgEV/cn9SVDi/cjQHGrwzgWk//HzuY+G9ggn3DvRZy55Oyd4VjtcQOYIQvZz+I6zbtjwzyuLvIB9h86wGdOGUh7YN0QaVG+HHlrQniCOnhbOfX9xIarJOA9lJM6gcNQ3pDQIsW4w4YfHkbfvzduS43Qq+nl7YLHF1B5aQImCIAX7BAoGBAK135iG33a6RiR0P8R8KVS6G++uecrL/qEM/sLy78SsNFimZ7PEjXZ/rs0dahPHgz/PFJVdI8eEtH0YY4zritjBkeJvwiHzGfzi+OP+RDpyNVnADUKE5AVtiYyTSG2SyT6nNLM+dBoi0u9+9UPrqNnBXX3DtQBoaKGCYxSLDBf21AoGANG5wAjV+ME7uAYEvW9GlrvGmNmzyUuiZrYuYHCf76CTa+q0+P7o0WgKcWEXUSah08qF4EItUQuuw+PtFTFs/sorqa9QrZs/ozTt8Q4ms/tahFPkZOTJ8s1Az2jY3C9ERwS8ab3Q+kbLiXDTnWo4s7YqwpwMZd/abhs3SwCjzLDI=";
|
||
private final String CHARSET = "UTF-8";
|
||
// 支付宝公钥
|
||
private final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOq1vdnkd83CnZUWZVka7EWT0YgiGX8io6ul4GThlue66YNKoS/rKT1rHzyZqBwNG1qgeU7eH+UazuFK2GsxrDI1rSqzljkgQnkmwtjEsJYpXzFF5PTuW8bsDNHoXr5LsEyMaljyiNtBO3uc+Zbb0D6GcbnQUFGorMi9tKR28XjNJkvamohMhh+V5cb1FJtybliNoGAjA+Nh+aQVAXqFEPj3FX0qhPi4gRXniYL0o9ePaRtNg5pJ/uJ3G6llRi3+uZleD7XBSQCSf8ZZJfH8Bvr3mTQ/ObpyDub8VYnIkOgld4OAJRzqXJAyPFo0mRGhaeuSqviyRYGQK8/U8CrLkQIDAQAB";
|
||
//这是沙箱接口路径
|
||
private final String GATEWAY_URL ="https://openapi-sandbox.dl.alipaydev.com/gateway.do";
|
||
private final String FORMAT = "JSON";
|
||
//签名方式
|
||
private final String SIGN_TYPE = "RSA2";
|
||
//支付宝异步通知路径,付款完毕后会异步调用本项目的方法,必须为公网地址
|
||
private final String NOTIFY_URL = "http://IP/aliyun/pay/yibu";
|
||
//支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址
|
||
private final String RETURN_URL = "http://IP/entertainment/payment";
|
||
|
||
|
||
|
||
|
||
@RequestMapping(value = "/payZFB", method = RequestMethod.POST)
|
||
@ResponseBody
|
||
public Result<String> payZFB(@RequestBody PaymentParam paymentParam) throws AlipayApiException {
|
||
AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
|
||
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
|
||
//异步接收地址,仅支持http/https,公网可访问
|
||
request.setNotifyUrl("");
|
||
//同步跳转地址,仅支持http/https
|
||
request.setReturnUrl(paymentParam.getReturnUrl());
|
||
JSONObject json = new JSONObject();
|
||
json.put("outTradeNo", paymentParam.getOutTradeNo());
|
||
String params = json.toString();
|
||
/******必传参数******/
|
||
JSONObject bizContent = new JSONObject();
|
||
//商户订单号,商家自定义,保持唯一性
|
||
bizContent.put("out_trade_no", paymentParam.getOutTradeNo());
|
||
//支付金额,最小值0.01元
|
||
bizContent.put("total_amount", paymentParam.getTotalAmount());
|
||
//订单标题,不可使用特殊符号
|
||
bizContent.put("subject", paymentParam.getSubject());
|
||
//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
|
||
bizContent.put("product_code", paymentParam.getProductCode());
|
||
//支付宝请求的传值 可以在req中获取
|
||
bizContent.put("body", params);
|
||
/******可选参数******/
|
||
request.setBizContent(bizContent.toString());
|
||
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
|
||
return Result.success(response.getBody());
|
||
}
|
||
|
||
|
||
@PostMapping("/notify") // 注意这里必须是POST接口
|
||
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");
|
||
// 支付宝验签
|
||
if (Factory.Payment.Common().verifyNotify(params)) {
|
||
// 验签通过
|
||
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"));
|
||
System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
|
||
System.out.println("买家付款时间: " + params.get("gmt_payment"));
|
||
System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
|
||
}
|
||
}
|
||
return "success";
|
||
}
|
||
|
||
@Autowired
|
||
private SysUserService userService;
|
||
//TODO 充值记录添加
|
||
@PostMapping("/records")
|
||
public Result records(@RequestBody PaymentParam paymentParam) throws AlipayApiException {
|
||
return Result.success(userService.addRecords(paymentParam));
|
||
}
|
||
|
||
|
||
//TODO 身份认证
|
||
@PostMapping("/doPost")
|
||
public Result doPost(@RequestBody @Valid StandingRes standingRes) {
|
||
return SfUtil.query(standingRes);
|
||
}
|
||
|
||
//TODO 发送验证码
|
||
@PostMapping("/sendCode/{phonenumber}")
|
||
public Result<String> sendCode(@PathVariable("phonenumber")String phonenumber){
|
||
return Result.success(null,userService.sendCode(phonenumber));
|
||
}
|
||
|
||
|
||
//TODO 验证验证码
|
||
@PostMapping("/checkCode/{phonenumber}/{code}")
|
||
public Result<String> checkCode(@PathVariable("phonenumber")String phonenumber,@PathVariable("code")String code){
|
||
return Result.success(null,userService.checkCode(phonenumber,code));
|
||
}
|
||
|
||
|
||
}
|