From d2755f00bc2a6507f122f79d54ee009e2cdd26b3 Mon Sep 17 00:00:00 2001
From: ageerle <ageerle@163.com>
Date: 星期二, 08 四月 2025 16:48:06 +0800
Subject: [PATCH] feat: 测试版本提交

---
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java |  664 +++++++++++++++++++++++++++---------------------------
 1 files changed, 332 insertions(+), 332 deletions(-)

diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java
index 5e9d193..eef8331 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java
@@ -1,333 +1,333 @@
-package org.ruoyi.system.controller.system;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.extra.qrcode.QrCodeUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
-import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.stripe.Stripe;
-import com.stripe.exception.StripeException;
-import com.stripe.model.Event;
-import com.stripe.model.Price;
-import com.stripe.model.Product;
-import com.stripe.model.checkout.Session;
-import com.stripe.net.Webhook;
-import com.stripe.param.checkout.SessionCreateParams;
-import jakarta.servlet.http.HttpServletRequest;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.ruoyi.common.config.PayConfig;
-import org.ruoyi.common.core.domain.R;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.core.service.ConfigService;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.oss.core.OssClient;
-import org.ruoyi.common.oss.entity.UploadResult;
-import org.ruoyi.common.oss.factory.OssFactory;
-import org.ruoyi.common.response.PayResponse;
-import org.ruoyi.common.service.PayService;
-import org.ruoyi.common.utils.MD5Util;
-import org.ruoyi.system.domain.bo.PaymentOrdersBo;
-import org.ruoyi.system.domain.bo.SysUserBo;
-import org.ruoyi.system.domain.request.OrderRequest;
-import org.ruoyi.system.domain.vo.PaymentOrdersVo;
-import org.ruoyi.system.domain.vo.SysUserVo;
-import org.ruoyi.system.service.IPaymentOrdersService;
-import org.ruoyi.system.service.ISysUserService;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/pay")
-@Slf4j
-public class PayController {
-
-    private final PayService payService;
-
-    private final ISysUserService userService;
-
-    private final IPaymentOrdersService paymentOrdersService;
-
-    private final PayConfig payConfig;
-
-    private final WxPayService wxService;
-
-    private final ConfigService configService;
-
-    /**
-     * 鑾峰彇鏀粯浜岀淮鐮�
-     *
-     * @Date 2023/7/3
-     * @return void
-     **/
-    @PostMapping("/payUrl")
-    public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) {
-        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
-        PaymentOrdersVo paymentOrdersVo = new PaymentOrdersVo();
-        if(!Boolean.parseBoolean(getKey("enabled"))){
-            String payUrl = payService.getPayUrl(payOrder.getOrderNo(), orderRequest.getName(), Double.parseDouble(orderRequest.getMoney()), "192.168.1.6");
-            byte[] bytes = QrCodeUtil.generatePng(payUrl, 300, 300);
-            OssClient storage = OssFactory.instance();
-            UploadResult upload=storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
-            BeanUtil.copyProperties(payOrder,paymentOrdersVo);
-            paymentOrdersVo.setUrl(upload.getUrl());
-        }else {
-            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
-            request.setTradeType("NATIVE");
-            request.setBody(orderRequest.getName());
-            request.setOutTradeNo(payOrder.getOrderNo());
-            request.setTotalFee(BaseWxPayRequest.yuanToFen(orderRequest.getMoney()));
-            request.setSpbillCreateIp("127.0.0.1");
-            request.setNotifyUrl(getKey("notifyUrl"));
-            request.setProductId(payOrder.getId().toString());
-            try {
-                WxPayNativeOrderResult order = wxService.createOrder(request);
-                byte[] bytes = QrCodeUtil.generatePng(order.getCodeUrl(), 300, 300);
-                OssClient storage = OssFactory.instance();
-                UploadResult upload = storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
-                BeanUtil.copyProperties(payOrder,paymentOrdersVo);
-                paymentOrdersVo.setUrl(upload.getUrl());
-            } catch (WxPayException e) {
-                throw new BaseException("鑾峰彇寰俊鏀粯浜岀淮鐮佸彂鐢熼敊璇細{}"+e.getMessage());
-            }
-        }
-        return R.ok(paymentOrdersVo);
-    }
-
-    /**
-     * 鍥炶皟閫氱煡鍦板潃
-     *
-     * @Date 2023/7/3
-     * @param
-     * @return void
-     **/
-    @GetMapping("/notifyUrl")
-    public String notifyUrl(PayResponse payResponse) {
-        // 鏍¢獙绛惧悕
-        String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() +
-            "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() +
-            "&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() +
-            "&type=" + payResponse.getType() +  payConfig.getKey();
-        String sign = MD5Util.GetMD5Code(mdString);
-        if(!sign.equals(payResponse.getSign())){
-            throw new BaseException("鏍¢獙绛惧悕澶辫触锛�");
-        }
-        double money = Double.parseDouble(payResponse.getMoney());
-        log.info("鏀粯璁㈠崟鍙穥}",payResponse);
-        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
-        paymentOrdersBo.setOrderNo(payResponse.getOut_trade_no());
-        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
-        if (CollectionUtil.isEmpty(paymentOrdersList)){
-            throw new BaseException("璁㈠崟涓嶅瓨鍦紒");
-        }
-        // 璁㈠崟鐘舵�佷慨鏀逛负宸叉敮浠�
-        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
-        paymentOrdersVo.setPaymentStatus("2");
-        paymentOrdersVo.setPaymentMethod(payResponse.getType());
-        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
-        paymentOrdersService.updateByBo(paymentOrdersBo);
-
-        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
-        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money);
-        SysUserBo sysUserBo = new SysUserBo();
-        BeanUtil.copyProperties(sysUserVo,sysUserBo);
-        // 璁剧疆涓轰粯璐圭敤鎴�
-        sysUserBo.setUserGrade("1");
-        userService.updateUser(sysUserBo);
-        return "success";
-    }
-
-    /**
-     * 璺宠浆閫氱煡鍦板潃
-     *
-     * @Date 2023/7/3
-     * @param
-     * @return void
-     **/
-    @GetMapping("/return_url")
-    public void returnUrl() {
-        log.info("return_url===========");
-    }
-
-
-    @PostMapping("/notify/wxOrder")
-    public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
-        WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
-        // TODO 鏍规嵁鑷繁涓氬姟鍦烘櫙闇�瑕佹瀯閫犺繑鍥炲璞�
-        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
-        paymentOrdersBo.setOrderNo(notifyResult.getOutTradeNo());
-        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
-        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
-        paymentOrdersVo.setPaymentStatus("2");
-        paymentOrdersVo.setPaymentMethod("wx");
-        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
-        paymentOrdersService.updateByBo(paymentOrdersBo);
-        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
-        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + convertCentsToYuan(notifyResult.getTotalFee()));
-        SysUserBo sysUserBo = new SysUserBo();
-        BeanUtil.copyProperties(sysUserVo,sysUserBo);
-        // 璁剧疆涓轰粯璐圭敤鎴�
-        sysUserBo.setUserGrade("1");
-        userService.updateUser(sysUserBo);
-        return WxPayNotifyResponse.success("success");
-    }
-
-    /**
-     * 灏嗗垎杞崲涓哄厓锛屽苟淇濈暀绮惧害銆�
-     *
-     * @param cents 鍒嗙殑閲戦锛岀被鍨嬩负Integer
-     * @return 杞崲鍚庣殑鍏冮噾棰濓紝绫诲瀷涓篸ouble
-     */
-    public static double convertCentsToYuan(Integer cents) {
-        // 澶勭悊绌鸿緭鍏�
-        if (cents == null) {
-            throw new IllegalArgumentException("杈撳叆鐨勫垎閲戦涓嶈兘涓虹┖");
-        }
-
-        // 100鍒� = 1鍏�
-        BigDecimal centsBigDecimal = new BigDecimal(cents);
-        BigDecimal yuan = centsBigDecimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
-        // 杞崲涓篸ouble骞惰繑鍥�
-        return yuan.doubleValue();
-    }
-
-    /**
-     * 鑾峰彇璁㈠崟淇℃伅
-     *
-     */
-    @PostMapping("/orderInfo")
-    public R<PaymentOrdersVo> orderInfo(@RequestBody  OrderRequest orderRequest) {
-        if(StringUtils.isEmpty(orderRequest.getOrderNo())){
-            throw new BaseException("璁㈠崟鍙蜂笉鑳戒负绌猴紒");
-        }
-        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
-        paymentOrdersBo.setOrderNo(orderRequest.getOrderNo());
-        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
-        if (CollectionUtil.isEmpty(paymentOrdersList)){
-            throw new BaseException("璁㈠崟涓嶅瓨鍦紒");
-        }
-        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
-        return R.ok(paymentOrdersVo);
-    }
-
-    // 鑾峰彇鏀粯閾炬帴
-//    static {
-//        Stripe.apiKey = "sk_test_51PMMj2KcfX4oNioqXkoKpScTsgmR55xQki2tg8MEZJYc0gjhYV85t2FzDasE06eqZb0sqyYhOp3UXhcGGQLWI4A9008aq8SOnb";
+//package org.ruoyi.system.controller.system;
+//
+//import cn.hutool.core.bean.BeanUtil;
+//import cn.hutool.core.collection.CollectionUtil;
+//import cn.hutool.extra.qrcode.QrCodeUtil;
+//import cn.hutool.json.JSONObject;
+//import cn.hutool.json.JSONUtil;
+//import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
+//import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+//import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
+//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+//import com.github.binarywang.wxpay.exception.WxPayException;
+//import com.github.binarywang.wxpay.service.WxPayService;
+//import com.stripe.Stripe;
+//import com.stripe.exception.StripeException;
+//import com.stripe.model.Event;
+//import com.stripe.model.Price;
+//import com.stripe.model.Product;
+//import com.stripe.model.checkout.Session;
+//import com.stripe.net.Webhook;
+//import com.stripe.param.checkout.SessionCreateParams;
+//import jakarta.servlet.http.HttpServletRequest;
+//import lombok.RequiredArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.ruoyi.common.config.PayConfig;
+//import org.ruoyi.common.core.domain.R;
+//import org.ruoyi.common.core.exception.base.BaseException;
+//import org.ruoyi.common.core.service.ConfigService;
+//import org.ruoyi.common.core.utils.StringUtils;
+//import org.ruoyi.common.oss.core.OssClient;
+//import org.ruoyi.common.oss.entity.UploadResult;
+//import org.ruoyi.common.oss.factory.OssFactory;
+//import org.ruoyi.common.response.PayResponse;
+//import org.ruoyi.common.service.PayService;
+//import org.ruoyi.common.utils.MD5Util;
+//import org.ruoyi.system.domain.bo.PaymentOrdersBo;
+//import org.ruoyi.system.domain.bo.SysUserBo;
+//import org.ruoyi.system.domain.request.OrderRequest;
+//import org.ruoyi.system.domain.vo.PaymentOrdersVo;
+//import org.ruoyi.system.domain.vo.SysUserVo;
+//import org.ruoyi.system.service.IPaymentOrdersService;
+//import org.ruoyi.system.service.ISysUserService;
+//import org.springframework.web.bind.annotation.*;
+//
+//import java.io.ByteArrayOutputStream;
+//import java.io.InputStream;
+//import java.math.BigDecimal;
+//import java.math.RoundingMode;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//
+//@RequiredArgsConstructor
+//@RestController
+//@RequestMapping("/pay")
+//@Slf4j
+//public class PayController {
+//
+//    private final PayService payService;
+//
+//    private final ISysUserService userService;
+//
+//    private final IPaymentOrdersService paymentOrdersService;
+//
+//    private final PayConfig payConfig;
+//
+//    private final WxPayService wxService;
+//
+//    private final ConfigService configService;
+//
+//    /**
+//     * 鑾峰彇鏀粯浜岀淮鐮�
+//     *
+//     * @Date 2023/7/3
+//     * @return void
+//     **/
+//    @PostMapping("/payUrl")
+//    public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) {
+//        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
+//        PaymentOrdersVo paymentOrdersVo = new PaymentOrdersVo();
+//        if(!Boolean.parseBoolean(getKey("enabled"))){
+//            String payUrl = payService.getPayUrl(payOrder.getOrderNo(), orderRequest.getName(), Double.parseDouble(orderRequest.getMoney()), "192.168.1.6");
+//            byte[] bytes = QrCodeUtil.generatePng(payUrl, 300, 300);
+//            OssClient storage = OssFactory.instance();
+//            UploadResult upload=storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
+//            BeanUtil.copyProperties(payOrder,paymentOrdersVo);
+//            paymentOrdersVo.setUrl(upload.getUrl());
+//        }else {
+//            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+//            request.setTradeType("NATIVE");
+//            request.setBody(orderRequest.getName());
+//            request.setOutTradeNo(payOrder.getOrderNo());
+//            request.setTotalFee(BaseWxPayRequest.yuanToFen(orderRequest.getMoney()));
+//            request.setSpbillCreateIp("127.0.0.1");
+//            request.setNotifyUrl(getKey("notifyUrl"));
+//            request.setProductId(payOrder.getId().toString());
+//            try {
+//                WxPayNativeOrderResult order = wxService.createOrder(request);
+//                byte[] bytes = QrCodeUtil.generatePng(order.getCodeUrl(), 300, 300);
+//                OssClient storage = OssFactory.instance();
+//                UploadResult upload = storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
+//                BeanUtil.copyProperties(payOrder,paymentOrdersVo);
+//                paymentOrdersVo.setUrl(upload.getUrl());
+//            } catch (WxPayException e) {
+//                throw new BaseException("鑾峰彇寰俊鏀粯浜岀淮鐮佸彂鐢熼敊璇細{}"+e.getMessage());
+//            }
+//        }
+//        return R.ok(paymentOrdersVo);
 //    }
-
-    /**
-     *   鍘绘敮浠�
-     * 1銆佸垱寤轰骇鍝�
-     * 2銆佽缃环鏍�
-     * 3銆佸垱寤烘敮浠樹俊鎭� 寰楀埌url
-     * @return
-     */
-    @PostMapping("/stripePay")
-    public String pay(@RequestBody OrderRequest orderRequest) throws StripeException {
-
-        String enabled = configService.getConfigValue("stripe", "enabled");
-        if(!Boolean.parseBoolean(enabled)){
-            String prompt = configService.getConfigValue("stripe", "prompt");
-            throw new BaseException(prompt);
-        }
-
-        // 鑾峰彇鏀粯閾炬帴
-        Stripe.apiKey = configService.getConfigValue("stripe", "key");
-
-        // 鑾峰彇閲戦瀛楃涓插苟瑙f瀽涓� double
-        double moneyDouble = Double.parseDouble(orderRequest.getMoney());
-
-        // 灏嗛噾棰濊浆鎹负浠ュ垎涓哄崟浣嶇殑鏁存暟
-        int randMoney = (int) (moneyDouble * 100);
-
-        Map<String, Object> params = new HashMap<>();
-        params.put("name", orderRequest.getName());
-        Product product = Product.create(params);
-
-        Map<String, Object> recurring = new HashMap<>();
-        recurring.put("interval", "month");
-        Map<String, Object> params2 = new HashMap<>();
-        params2.put("unit_amount", randMoney);
-        params2.put("currency", "usd");
-        params2.put("recurring", recurring);
-        params2.put("product", product.getId());
-        Price price = Price.create(params2);
-
-        // 鍒涘缓鏀粯璁㈠崟
-        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
-
-        //鍒涘缓鏀粯淇℃伅 寰楀埌url
-        SessionCreateParams params3 = SessionCreateParams.builder()
-            .setMode(SessionCreateParams.Mode.SUBSCRIPTION)
-            .setSuccessUrl(configService.getConfigValue("stripe", "success"))
-            .setCancelUrl(configService.getConfigValue("stripe", "cancel"))
-            .addLineItem(
-                SessionCreateParams.LineItem.builder()
-                    .setQuantity(1L)
-                    .setPrice(price.getId())
-                    .build()).putMetadata("orderId", payOrder.getOrderNo())
-            .build();
-        Session session = Session.create(params3);
-        return session.getUrl();
-    }
-
-    /**
-     *  鏀粯鍥炶皟
-     *
-     */
-    @PostMapping("/stripe_events")
-    public R<String> stripeEvent(HttpServletRequest request) {
-        try {
-            String endpointSecret = configService.getConfigValue("stripe", "secret");//webhook绉橀挜绛惧悕
-            InputStream inputStream = request.getInputStream();
-            ByteArrayOutputStream output = new ByteArrayOutputStream();
-            byte[] buffer = new byte[1024*4];
-            int n = 0;
-            while (-1 != (n = inputStream.read(buffer))) {
-                output.write(buffer, 0, n);
-            }
-            byte[] bytes = output.toByteArray();
-            String payload = new String(bytes, "UTF-8");
-            String sigHeader = request.getHeader("Stripe-Signature");
-            Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//楠岀锛屽苟鑾峰彇浜嬩欢
-            if("checkout.session.completed".equals(event.getType())){
-                // 瑙f瀽 JSON 瀛楃涓蹭负 JSONObject
-                JSONObject jsonObject = JSONUtil.parseObj(event);
-                // 鑾峰彇 metadata 瀵硅薄
-                JSONObject metadata = jsonObject.getJSONObject("data")
-                    .getJSONObject("object")
-                    .getJSONObject("metadata");
-
-                OrderRequest orderRequest = new OrderRequest();
-                orderRequest.setPayType("stripe");
-                orderRequest.setOrderNo(metadata.getStr("orderId"));
-                paymentOrdersService.updatePayOrder(orderRequest);
-            }
-        } catch (Exception e) {
-            System.out.println("stripe寮傛閫氱煡锛坵ebhook浜嬩欢锛�"+e);
-        }
-        return R.ok();
-    }
-
-    public String getKey(String key) {
-        return configService.getConfigValue("weixin", key);
-    }
-
-}
-
+//
+//    /**
+//     * 鍥炶皟閫氱煡鍦板潃
+//     *
+//     * @Date 2023/7/3
+//     * @param
+//     * @return void
+//     **/
+//    @GetMapping("/notifyUrl")
+//    public String notifyUrl(PayResponse payResponse) {
+//        // 鏍¢獙绛惧悕
+//        String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() +
+//            "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() +
+//            "&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() +
+//            "&type=" + payResponse.getType() +  payConfig.getKey();
+//        String sign = MD5Util.GetMD5Code(mdString);
+//        if(!sign.equals(payResponse.getSign())){
+//            throw new BaseException("鏍¢獙绛惧悕澶辫触锛�");
+//        }
+//        double money = Double.parseDouble(payResponse.getMoney());
+//        log.info("鏀粯璁㈠崟鍙穥}",payResponse);
+//        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
+//        paymentOrdersBo.setOrderNo(payResponse.getOut_trade_no());
+//        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
+//        if (CollectionUtil.isEmpty(paymentOrdersList)){
+//            throw new BaseException("璁㈠崟涓嶅瓨鍦紒");
+//        }
+//        // 璁㈠崟鐘舵�佷慨鏀逛负宸叉敮浠�
+//        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
+//        paymentOrdersVo.setPaymentStatus("2");
+//        paymentOrdersVo.setPaymentMethod(payResponse.getType());
+//        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
+//        paymentOrdersService.updateByBo(paymentOrdersBo);
+//
+//        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
+//        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money);
+//        SysUserBo sysUserBo = new SysUserBo();
+//        BeanUtil.copyProperties(sysUserVo,sysUserBo);
+//        // 璁剧疆涓轰粯璐圭敤鎴�
+//        sysUserBo.setUserGrade("1");
+//        userService.updateUser(sysUserBo);
+//        return "success";
+//    }
+//
+//    /**
+//     * 璺宠浆閫氱煡鍦板潃
+//     *
+//     * @Date 2023/7/3
+//     * @param
+//     * @return void
+//     **/
+//    @GetMapping("/return_url")
+//    public void returnUrl() {
+//        log.info("return_url===========");
+//    }
+//
+//
+//    @PostMapping("/notify/wxOrder")
+//    public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
+//        WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
+//        // TODO 鏍规嵁鑷繁涓氬姟鍦烘櫙闇�瑕佹瀯閫犺繑鍥炲璞�
+//        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
+//        paymentOrdersBo.setOrderNo(notifyResult.getOutTradeNo());
+//        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
+//        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
+//        paymentOrdersVo.setPaymentStatus("2");
+//        paymentOrdersVo.setPaymentMethod("wx");
+//        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
+//        paymentOrdersService.updateByBo(paymentOrdersBo);
+//        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
+//        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + convertCentsToYuan(notifyResult.getTotalFee()));
+//        SysUserBo sysUserBo = new SysUserBo();
+//        BeanUtil.copyProperties(sysUserVo,sysUserBo);
+//        // 璁剧疆涓轰粯璐圭敤鎴�
+//        sysUserBo.setUserGrade("1");
+//        userService.updateUser(sysUserBo);
+//        return WxPayNotifyResponse.success("success");
+//    }
+//
+//    /**
+//     * 灏嗗垎杞崲涓哄厓锛屽苟淇濈暀绮惧害銆�
+//     *
+//     * @param cents 鍒嗙殑閲戦锛岀被鍨嬩负Integer
+//     * @return 杞崲鍚庣殑鍏冮噾棰濓紝绫诲瀷涓篸ouble
+//     */
+//    public static double convertCentsToYuan(Integer cents) {
+//        // 澶勭悊绌鸿緭鍏�
+//        if (cents == null) {
+//            throw new IllegalArgumentException("杈撳叆鐨勫垎閲戦涓嶈兘涓虹┖");
+//        }
+//
+//        // 100鍒� = 1鍏�
+//        BigDecimal centsBigDecimal = new BigDecimal(cents);
+//        BigDecimal yuan = centsBigDecimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+//        // 杞崲涓篸ouble骞惰繑鍥�
+//        return yuan.doubleValue();
+//    }
+//
+//    /**
+//     * 鑾峰彇璁㈠崟淇℃伅
+//     *
+//     */
+//    @PostMapping("/orderInfo")
+//    public R<PaymentOrdersVo> orderInfo(@RequestBody  OrderRequest orderRequest) {
+//        if(StringUtils.isEmpty(orderRequest.getOrderNo())){
+//            throw new BaseException("璁㈠崟鍙蜂笉鑳戒负绌猴紒");
+//        }
+//        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
+//        paymentOrdersBo.setOrderNo(orderRequest.getOrderNo());
+//        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
+//        if (CollectionUtil.isEmpty(paymentOrdersList)){
+//            throw new BaseException("璁㈠崟涓嶅瓨鍦紒");
+//        }
+//        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
+//        return R.ok(paymentOrdersVo);
+//    }
+//
+//    // 鑾峰彇鏀粯閾炬帴
+////    static {
+////        Stripe.apiKey = "sk_test_51PMMj2KcfX4oNioqXkoKpScTsgmR55xQki2tg8MEZJYc0gjhYV85t2FzDasE06eqZb0sqyYhOp3UXhcGGQLWI4A9008aq8SOnb";
+////    }
+//
+//    /**
+//     *   鍘绘敮浠�
+//     * 1銆佸垱寤轰骇鍝�
+//     * 2銆佽缃环鏍�
+//     * 3銆佸垱寤烘敮浠樹俊鎭� 寰楀埌url
+//     * @return
+//     */
+//    @PostMapping("/stripePay")
+//    public String pay(@RequestBody OrderRequest orderRequest) throws StripeException {
+//
+//        String enabled = configService.getConfigValue("stripe", "enabled");
+//        if(!Boolean.parseBoolean(enabled)){
+//            String prompt = configService.getConfigValue("stripe", "prompt");
+//            throw new BaseException(prompt);
+//        }
+//
+//        // 鑾峰彇鏀粯閾炬帴
+//        Stripe.apiKey = configService.getConfigValue("stripe", "key");
+//
+//        // 鑾峰彇閲戦瀛楃涓插苟瑙f瀽涓� double
+//        double moneyDouble = Double.parseDouble(orderRequest.getMoney());
+//
+//        // 灏嗛噾棰濊浆鎹负浠ュ垎涓哄崟浣嶇殑鏁存暟
+//        int randMoney = (int) (moneyDouble * 100);
+//
+//        Map<String, Object> params = new HashMap<>();
+//        params.put("name", orderRequest.getName());
+//        Product product = Product.create(params);
+//
+//        Map<String, Object> recurring = new HashMap<>();
+//        recurring.put("interval", "month");
+//        Map<String, Object> params2 = new HashMap<>();
+//        params2.put("unit_amount", randMoney);
+//        params2.put("currency", "usd");
+//        params2.put("recurring", recurring);
+//        params2.put("product", product.getId());
+//        Price price = Price.create(params2);
+//
+//        // 鍒涘缓鏀粯璁㈠崟
+//        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
+//
+//        //鍒涘缓鏀粯淇℃伅 寰楀埌url
+//        SessionCreateParams params3 = SessionCreateParams.builder()
+//            .setMode(SessionCreateParams.Mode.SUBSCRIPTION)
+//            .setSuccessUrl(configService.getConfigValue("stripe", "success"))
+//            .setCancelUrl(configService.getConfigValue("stripe", "cancel"))
+//            .addLineItem(
+//                SessionCreateParams.LineItem.builder()
+//                    .setQuantity(1L)
+//                    .setPrice(price.getId())
+//                    .build()).putMetadata("orderId", payOrder.getOrderNo())
+//            .build();
+//        Session session = Session.create(params3);
+//        return session.getUrl();
+//    }
+//
+//    /**
+//     *  鏀粯鍥炶皟
+//     *
+//     */
+//    @PostMapping("/stripe_events")
+//    public R<String> stripeEvent(HttpServletRequest request) {
+//        try {
+//            String endpointSecret = configService.getConfigValue("stripe", "secret");//webhook绉橀挜绛惧悕
+//            InputStream inputStream = request.getInputStream();
+//            ByteArrayOutputStream output = new ByteArrayOutputStream();
+//            byte[] buffer = new byte[1024*4];
+//            int n = 0;
+//            while (-1 != (n = inputStream.read(buffer))) {
+//                output.write(buffer, 0, n);
+//            }
+//            byte[] bytes = output.toByteArray();
+//            String payload = new String(bytes, "UTF-8");
+//            String sigHeader = request.getHeader("Stripe-Signature");
+//            Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//楠岀锛屽苟鑾峰彇浜嬩欢
+//            if("checkout.session.completed".equals(event.getType())){
+//                // 瑙f瀽 JSON 瀛楃涓蹭负 JSONObject
+//                JSONObject jsonObject = JSONUtil.parseObj(event);
+//                // 鑾峰彇 metadata 瀵硅薄
+//                JSONObject metadata = jsonObject.getJSONObject("data")
+//                    .getJSONObject("object")
+//                    .getJSONObject("metadata");
+//
+//                OrderRequest orderRequest = new OrderRequest();
+//                orderRequest.setPayType("stripe");
+//                orderRequest.setOrderNo(metadata.getStr("orderId"));
+//                paymentOrdersService.updatePayOrder(orderRequest);
+//            }
+//        } catch (Exception e) {
+//            System.out.println("stripe寮傛閫氱煡锛坵ebhook浜嬩欢锛�"+e);
+//        }
+//        return R.ok();
+//    }
+//
+//    public String getKey(String key) {
+//        return configService.getConfigValue("weixin", key);
+//    }
+//
+//}
+//

--
Gitblit v1.9.3