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