| @ -0,0 +1,51 @@ | |||||
| package org.jeecg.modules.applet.controller; | |||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
| import io.swagger.v3.oas.annotations.Operation; | |||||
| import io.swagger.v3.oas.annotations.Parameter; | |||||
| import io.swagger.v3.oas.annotations.tags.Tag; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.jeecg.common.api.vo.Result; | |||||
| import org.jeecg.common.aspect.annotation.AutoLog; | |||||
| import org.jeecg.config.shiro.IgnoreAuth; | |||||
| import org.jeecg.modules.applet.service.AppletApiSubscribeService; | |||||
| import org.jeecg.modules.demo.appletProduct.entity.AppletProduct; | |||||
| import org.jeecg.modules.demo.appletSubscribeDetection.entity.AppletSubscribeDetection; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.GetMapping; | |||||
| import org.springframework.web.bind.annotation.RequestMapping; | |||||
| import org.springframework.web.bind.annotation.RequestParam; | |||||
| import org.springframework.web.bind.annotation.RestController; | |||||
| @Tag(name="预约检测", description="预约检测") | |||||
| @RestController | |||||
| @RequestMapping("/appletApi/subscribe") | |||||
| @Slf4j | |||||
| public class AppletApiSubscribeController { | |||||
| @Autowired | |||||
| private AppletApiSubscribeService appletApiSubscribeService; | |||||
| /** | |||||
| * 预约检测列表查询 | |||||
| * @param type 预约检测类型(选填) | |||||
| * @param pageNo 页码 | |||||
| * @param pageSize 每页大小 | |||||
| * @return 预约检测列表 | |||||
| */ | |||||
| @AutoLog(value = "预约检测列表查询") | |||||
| @Operation(summary = "预约检测列表查询", description = "分页查询") | |||||
| @GetMapping(value = "/list") | |||||
| public Result<IPage<AppletSubscribeDetection>> list( | |||||
| @Parameter(description = "产品类型【选填】(0自采,1上门,2到店,3已取消)", required = false) String type, | |||||
| @Parameter(description = "页码") @RequestParam(defaultValue = "1") Integer pageNo, | |||||
| @Parameter(description = "每页大小") @RequestParam(defaultValue = "10") Integer pageSize) { | |||||
| log.info("产品列表查询 - type: {}, pageNo: {}, pageSize: {}", | |||||
| type, pageNo, pageSize); | |||||
| return Result.OK(appletApiSubscribeService.getAppletSubscribeDetection(pageNo, pageSize, type)); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,12 @@ | |||||
| package org.jeecg.modules.applet.service; | |||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
| import org.jeecg.modules.demo.appletSubscribeDetection.entity.AppletSubscribeDetection; | |||||
| public interface AppletApiSubscribeService { | |||||
| IPage<AppletSubscribeDetection> getAppletSubscribeDetection(Integer pageNo, Integer pageSize, String type); | |||||
| } | |||||
| @ -0,0 +1,39 @@ | |||||
| package org.jeecg.modules.applet.service.impl; | |||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.jeecg.modules.applet.service.AppletApiSubscribeService; | |||||
| import org.jeecg.modules.demo.appletSubscribeDetection.entity.AppletSubscribeDetection; | |||||
| import org.jeecg.modules.demo.appletSubscribeDetection.service.IAppletSubscribeDetectionService; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | |||||
| @Service | |||||
| public class AppletApiSubscribeServiceImpl implements AppletApiSubscribeService { | |||||
| @Autowired | |||||
| private IAppletSubscribeDetectionService appletSubscribeDetectionService; | |||||
| @Override | |||||
| public IPage<AppletSubscribeDetection> getAppletSubscribeDetection(Integer pageNo, Integer pageSize, String type) { | |||||
| Page<AppletSubscribeDetection> page = appletSubscribeDetectionService.lambdaQuery() | |||||
| .and(StringUtils.isNotBlank(type), q -> {//进行筛选 | |||||
| q.and("3".equals(type), w -> { | |||||
| w.eq(AppletSubscribeDetection::getStatus, 3); | |||||
| }); | |||||
| q.and(!"3".equals(type), w -> { | |||||
| w.ne(AppletSubscribeDetection::getStatus, 3) | |||||
| .eq(AppletSubscribeDetection::getType, type); | |||||
| }); | |||||
| }).page(new Page<>(pageNo, pageSize)); | |||||
| return page; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1 @@ | |||||
| /target/ | |||||
| @ -0,0 +1,55 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
| <parent> | |||||
| <artifactId>jeecg-boot-module</artifactId> | |||||
| <groupId>org.jeecgframework.boot</groupId> | |||||
| <version>3.8.1</version> | |||||
| </parent> | |||||
| <modelVersion>4.0.0</modelVersion> | |||||
| <artifactId>module-pay</artifactId> | |||||
| <properties> | |||||
| <weixin.version>3.5.0</weixin.version> | |||||
| </properties> | |||||
| <dependencies> | |||||
| <dependency> | |||||
| <groupId>org.springframework.boot</groupId> | |||||
| <artifactId>spring-boot-starter-web</artifactId> | |||||
| </dependency> | |||||
| <!-- alipay --> | |||||
| <dependency> | |||||
| <groupId>com.alipay.sdk</groupId> | |||||
| <artifactId>alipay-sdk-java</artifactId> | |||||
| <version>4.11.33.ALL</version> | |||||
| </dependency> | |||||
| <dependency> | |||||
| <groupId>com.aliyun</groupId> | |||||
| <artifactId>aliyun-java-sdk-core</artifactId> | |||||
| <version>4.5.3</version> | |||||
| </dependency> | |||||
| <!-- mp --> | |||||
| <dependency> | |||||
| <groupId>com.github.binarywang</groupId> | |||||
| <artifactId>weixin-java-pay</artifactId> | |||||
| <version>${weixin.version}</version> | |||||
| </dependency> | |||||
| <dependency> | |||||
| <groupId>com.github.binarywang</groupId> | |||||
| <artifactId>weixin-java-miniapp</artifactId> | |||||
| <version>${weixin.version}</version> | |||||
| </dependency> | |||||
| <dependency> | |||||
| <groupId>com.github.binarywang</groupId> | |||||
| <artifactId>weixin-java-mp</artifactId> | |||||
| <version>${weixin.version}</version> | |||||
| </dependency> | |||||
| </dependencies> | |||||
| </project> | |||||
| @ -0,0 +1,47 @@ | |||||
| package org.jeecg; | |||||
| import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; | |||||
| import org.jeecg.modules.pay.MpWxPayService; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.boot.SpringApplication; | |||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |||||
| import org.springframework.context.ConfigurableApplicationContext; | |||||
| import org.springframework.web.bind.annotation.RequestBody; | |||||
| import org.springframework.web.bind.annotation.RequestMapping; | |||||
| import org.springframework.web.bind.annotation.RestController; | |||||
| @RestController | |||||
| @SpringBootApplication | |||||
| public class PayDemoApplication { | |||||
| public static void main(String[] args) { | |||||
| ConfigurableApplicationContext app = SpringApplication.run(PayDemoApplication.class, args); | |||||
| // 用法说明 @Autowired MpWxPayService mpWxPayService | |||||
| MpWxPayService bean = app.getBean(MpWxPayService.class); | |||||
| //Object callback = bean.createAppOrder("产品名", "127.0.0.1", "89", 1, "20219092", "{}",""); | |||||
| //System.err.println(callback.toString()); | |||||
| Object webOrder = bean.createWebOrder("产品名", "117.61.97.157", "89", 1, "20219092", "{}", ""); | |||||
| System.err.println(webOrder.toString()); | |||||
| //缓存该数据用于与异步通知对比处理 | |||||
| //WxPayAppOrderResult(sign=6E404CB2E71FD391BB0FE2C2B12F5264, prepayId=wx17011430290850d50f73c68d61e80a0000, partnerId=1560997691, appId=wx7081b3f6277c100d, packageValue=Sign=WXPay, timeStamp=1637082870, nonceStr=1637082870392) | |||||
| //取以上数据交由前端调起支付 | |||||
| } | |||||
| //部署该地址至外网接受异步通知 | |||||
| @RequestMapping("/notify") | |||||
| public Object notify(@RequestBody String requestBody, @Autowired MpWxPayService mpWxPayService){ | |||||
| WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); | |||||
| String outTradeNo = notify.getOutTradeNo(); | |||||
| System.err.println(outTradeNo); | |||||
| //对比outTradeNo进行业务处理 | |||||
| if (notify == null){ | |||||
| //会继续通知 | |||||
| return "FAIL"; | |||||
| } | |||||
| //不再通知该结果 | |||||
| return "SUCCESS"; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,191 @@ | |||||
| package org.jeecg.modules.pay; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.alipay.api.AlipayApiException; | |||||
| import com.alipay.api.AlipayClient; | |||||
| import com.alipay.api.domain.AlipayTradeAppPayModel; | |||||
| import com.alipay.api.domain.AlipayTradeWapPayModel; | |||||
| import com.alipay.api.internal.util.AlipaySignature; | |||||
| import com.alipay.api.request.AlipayTradeAppPayRequest; | |||||
| import com.alipay.api.request.AlipayTradeQueryRequest; | |||||
| import com.alipay.api.request.AlipayTradeWapPayRequest; | |||||
| import com.alipay.api.response.AlipayTradeAppPayResponse; | |||||
| import com.alipay.api.response.AlipayTradeQueryResponse; | |||||
| import lombok.Data; | |||||
| import lombok.ToString; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.jeecg.modules.pay.config.AliPay; | |||||
| import org.springframework.web.bind.annotation.RequestMapping; | |||||
| import java.math.BigDecimal; | |||||
| import java.util.HashMap; | |||||
| import java.util.Map; | |||||
| @Slf4j | |||||
| public class AlipayService { | |||||
| AlipayClient alipayClient; | |||||
| AliPay aliPay; | |||||
| final String web_notify_Url = ""; | |||||
| final String web_retrun_Url = ""; | |||||
| final String app_notify_Url = ""; | |||||
| @RequestMapping("/webpay") | |||||
| public Object webpay() { | |||||
| String subject = "小李飞刀"; | |||||
| String amount = "0.01"; | |||||
| String body = "uid:9090"; | |||||
| String orderNo = String.valueOf(System.currentTimeMillis()); | |||||
| AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest(); | |||||
| AlipayTradeWapPayModel model=new AlipayTradeWapPayModel(); | |||||
| model.setOutTradeNo(orderNo); | |||||
| model.setSubject(subject); | |||||
| model.setTotalAmount(amount); | |||||
| model.setBody(body); | |||||
| model.setTimeoutExpress("5m"); | |||||
| model.setProductCode("QUICK_WAP_PAY"); | |||||
| alipay_request.setBizModel(model); | |||||
| alipay_request.setNotifyUrl(web_notify_Url); | |||||
| alipay_request.setReturnUrl(web_retrun_Url); | |||||
| try { | |||||
| return alipayClient.pageExecute(alipay_request).getBody(); | |||||
| } catch (AlipayApiException e) { | |||||
| e.printStackTrace(); | |||||
| return e.getErrMsg(); | |||||
| } | |||||
| } | |||||
| @RequestMapping("/reback") | |||||
| public String webpayNotify() { | |||||
| return null; | |||||
| } | |||||
| @RequestMapping("apppay") | |||||
| public Object apppay(String subject, String clientIp, String productId, Integer price, String orderNo, String body){ | |||||
| System.err.printf("create Order: \n{} \n{} \n{} \n{} \n{} \n{}", subject, clientIp, productId, price, orderNo, body); | |||||
| String amount = BigDecimal.valueOf(price/100).toString(); | |||||
| //String amount = "0.01"; | |||||
| AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); | |||||
| AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); | |||||
| model.setOutTradeNo(orderNo); | |||||
| model.setBody(body); | |||||
| model.setSubject(subject); | |||||
| model.setTimeoutExpress("15m"); | |||||
| model.setTotalAmount(amount); | |||||
| model.setProductCode("QUICK_MSECURITY_PAY"); | |||||
| request.setBizModel(model); | |||||
| request.setNotifyUrl(app_notify_Url); | |||||
| try { | |||||
| AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); | |||||
| return response.getBody(); | |||||
| } catch (AlipayApiException alipayae) { | |||||
| alipayae.printStackTrace(); | |||||
| return alipayae.getErrMsg(); | |||||
| } | |||||
| } | |||||
| public AliPayNotifyResult appNotify(Map<String,String[]> requestParams) throws AlipayApiException { | |||||
| Map<String,String> params = new HashMap<>(); | |||||
| for (String name : requestParams.keySet()) { | |||||
| String[] values = requestParams.get(name); | |||||
| String valueStr = ""; | |||||
| for (int i = 0; i < values.length; i++) { | |||||
| valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; | |||||
| } | |||||
| if (name.equals("trade_status")) { | |||||
| System.out.println("交易状态为:" + valueStr); | |||||
| } | |||||
| //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 | |||||
| //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk"); | |||||
| params.put(name, valueStr); | |||||
| } | |||||
| //return new AliPayNotifyResult(params, aliPay.getAliPubilcKey()); | |||||
| return new AliPayNotifyResult(params, ""); | |||||
| } | |||||
| public JSONObject selectAlipayResult(String outTradeNo){ | |||||
| try { | |||||
| //实例化客户端(参数:网关地址、商户appid、商户私钥、格式、编码、支付宝公钥、加密类型) | |||||
| AlipayTradeQueryRequest alipayTradeQueryRequest = new AlipayTradeQueryRequest(); | |||||
| alipayTradeQueryRequest.setBizContent("{" + "\"out_trade_no\":\""+outTradeNo+"\"" + "}"); | |||||
| AlipayTradeQueryResponse alipayTradeQueryResponse = alipayClient.execute(alipayTradeQueryRequest); | |||||
| if(alipayTradeQueryResponse.isSuccess()){ | |||||
| switch (alipayTradeQueryResponse.getTradeStatus()) // 判断交易结果 | |||||
| { | |||||
| case "TRADE_FINISHED": // 交易结束并不可退款 | |||||
| break; | |||||
| case "TRADE_SUCCESS": // 交易支付成功 | |||||
| break; | |||||
| case "TRADE_CLOSED": // 未付款交易超时关闭或支付完成后全额退款 | |||||
| break; | |||||
| case "WAIT_BUYER_PAY": // 交易创建并等待买家付款 | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| return null; | |||||
| } else { | |||||
| return null; | |||||
| } | |||||
| } catch (AlipayApiException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| return null; | |||||
| } | |||||
| @Data | |||||
| @ToString | |||||
| public static class AliPayNotifyResult { | |||||
| private String outTradeNo; | |||||
| private String tradeNo; | |||||
| private String authAppId; | |||||
| private String buyerLogonId; | |||||
| private String gmtPayment; | |||||
| private String invoiceAmount; | |||||
| private Boolean verifyResult = false; | |||||
| public AliPayNotifyResult(Map<String, String> params, String pubilcKey){ | |||||
| this.outTradeNo = new String(params.get("out_trade_no")); | |||||
| this.tradeNo = new String(params.get("trade_no")); | |||||
| this.authAppId = new String(params.get("auth_app_id")); | |||||
| this.buyerLogonId = new String(params.get("buyer_logon_id")); | |||||
| this.gmtPayment = new String(params.get("gmt_payment")); | |||||
| this.invoiceAmount = new String(params.get("invoice_amount")); | |||||
| try { | |||||
| this.verifyResult = AlipaySignature.rsaCheckV1(params, pubilcKey, "UTF-8", "RSA2"); | |||||
| } catch (AlipayApiException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,43 @@ | |||||
| package org.jeecg.modules.pay; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.github.binarywang.wxpay.bean.entpay.EntPayRequest; | |||||
| import com.github.binarywang.wxpay.bean.entpay.EntPayResult; | |||||
| import com.github.binarywang.wxpay.exception.WxPayException; | |||||
| import com.github.binarywang.wxpay.service.WxPayService; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.jeecg.modules.pay.config.WxPay; | |||||
| /** | |||||
| * 微信付款到账户 | |||||
| **/ | |||||
| @Slf4j | |||||
| public class MpWxEntPayService { | |||||
| WxPay wxPayConfig; | |||||
| WxPayService wxPayService; | |||||
| public String entPay(Integer amount, String openId, String desc, String ip, String mchOrderNo) { | |||||
| EntPayRequest entPayRequest = new EntPayRequest(); | |||||
| entPayRequest.setAppid(wxPayConfig.appId); | |||||
| entPayRequest.setMchId(wxPayConfig.mchId); | |||||
| entPayRequest.setPartnerTradeNo(mchOrderNo); | |||||
| entPayRequest.setOpenid(openId); | |||||
| entPayRequest.setCheckName("NO_CHECK"); | |||||
| entPayRequest.setAmount(amount); | |||||
| entPayRequest.setDescription(desc); | |||||
| entPayRequest.setSpbillCreateIp(ip); | |||||
| EntPayResult entPayResult; | |||||
| try { | |||||
| entPayResult = wxPayService.getEntPayService().entPay(entPayRequest); | |||||
| System.err.println("打款结果:" + entPayRequest); | |||||
| } catch (WxPayException wpe) { | |||||
| return wpe.getErrCodeDes(); | |||||
| } catch (Exception e) { | |||||
| return e.getLocalizedMessage(); | |||||
| } | |||||
| return JSON.toJSONString(entPayResult); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,201 @@ | |||||
| package org.jeecg.modules.pay; | |||||
| import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; | |||||
| import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; | |||||
| import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult; | |||||
| import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; | |||||
| import com.github.binarywang.wxpay.constant.WxPayConstants; | |||||
| import com.github.binarywang.wxpay.exception.WxPayException; | |||||
| import com.github.binarywang.wxpay.service.WxPayService; | |||||
| import org.jeecg.modules.pay.config.WxPay; | |||||
| import java.io.File; | |||||
| @SuppressWarnings("all") | |||||
| public class MpWxPayService { | |||||
| public boolean dev = false; | |||||
| public WxPay wxPay; | |||||
| public WxPayService wxPayService; | |||||
| /** | |||||
| * 生成二维码 | |||||
| * @param codeUrl | |||||
| * @param logoFile | |||||
| * @param sideLength | |||||
| * @return | |||||
| */ | |||||
| public Object createScanPayQrcodeMode2(String codeUrl, File logoFile, Integer sideLength){ | |||||
| try { | |||||
| byte[] scanPayQrcodeMode2 = wxPayService.createScanPayQrcodeMode2(codeUrl, null, null); | |||||
| return scanPayQrcodeMode2; | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| return e.getLocalizedMessage(); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 扫码支付 | |||||
| * @param productName | |||||
| * @param clientIp | |||||
| * @param productId | |||||
| * @param price | |||||
| * @param orderNo | |||||
| * @param openId | |||||
| * @param body | |||||
| * @return | |||||
| */ | |||||
| public Object createQrOrder(String productName, String clientIp, | |||||
| String productId, Integer price, String orderNo, String body) { | |||||
| WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); | |||||
| request.setDeviceInfo("WEB"); //设备号 | |||||
| request.setTradeType("NATIVE"); //交易类型 | |||||
| request.setBody(productName); //商品描述 | |||||
| request.setOutTradeNo(orderNo); //商户订单号 | |||||
| request.setDetail(productName); //商品详情 | |||||
| request.setTotalFee(price); //总金额|分计 | |||||
| request.setSpbillCreateIp(clientIp); //终端IP | |||||
| request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径 | |||||
| request.setProductId(productId); //商品id | |||||
| if (dev) { | |||||
| request.setTotalFee(price); | |||||
| request.setNotifyUrl(wxPay.notifyUrlDev); | |||||
| } | |||||
| try { | |||||
| Object order = wxPayService.unifiedOrder(request); | |||||
| return order; | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| return e.getLocalizedMessage(); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 微信吊起支付 | |||||
| * @param productName | |||||
| * @param clientIp | |||||
| * @param productId | |||||
| * @param price | |||||
| * @param orderNo | |||||
| * @param openId | |||||
| * @param body | |||||
| * @return | |||||
| */ | |||||
| public Object createOrder(String productName, String clientIp, | |||||
| String productId, Integer price, String orderNo, | |||||
| String openId, String body){ | |||||
| WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); | |||||
| request.setDeviceInfo("WEB"); //设备号 | |||||
| request.setTradeType("JSAPI"); //交易类型 | |||||
| request.setBody(productName); //商品描述 | |||||
| request.setOutTradeNo(orderNo); //商户订单号 | |||||
| request.setDetail(productName); //商品详情 | |||||
| request.setTotalFee(price); //总金额|分计 | |||||
| request.setSpbillCreateIp(clientIp); //终端IP | |||||
| request.setNotifyUrl(wxPay.notifyOneUrl);//设置回调路径 | |||||
| request.setProductId(productId); //商品id | |||||
| request.setOpenid(openId); //JSAPI OPENID | |||||
| if (dev){ | |||||
| request.setTotalFee(price); | |||||
| request.setNotifyUrl(wxPay.notifyUrlOneDev); | |||||
| } | |||||
| try { | |||||
| Object order = wxPayService.createOrder(request); | |||||
| return order; | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| return e.getLocalizedMessage(); | |||||
| } | |||||
| } | |||||
| public WxPayOrderNotifyResult notify(String requestBody){ | |||||
| WxPayOrderNotifyResult notify = null; | |||||
| try { | |||||
| notify = wxPayService.parseOrderNotifyResult(requestBody); | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| return notify; | |||||
| } | |||||
| public Object createAppOrder(String productName, String clientIp, | |||||
| String productId, Integer price, | |||||
| String orderNo, String body, | |||||
| String openid){ | |||||
| WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); | |||||
| request.setDeviceInfo("WEB"); | |||||
| request.setBody(productName); | |||||
| request.setOutTradeNo(orderNo); | |||||
| request.setDetail(productName); | |||||
| request.setTotalFee(price); | |||||
| request.setSpbillCreateIp(clientIp); | |||||
| request.setNotifyUrl(wxPay.notifyUrl); | |||||
| request.setTradeType(WxPayConstants.TradeType.JSAPI); | |||||
| request.setProductId(productId); | |||||
| request.setAppid(wxPay.appId); | |||||
| request.setOpenid(openid); | |||||
| if (dev){ | |||||
| request.setTotalFee(price); | |||||
| request.setNotifyUrl(wxPay.notifyUrlDev); | |||||
| request.setAppid(wxPay.appId); | |||||
| request.setOpenid(openid); | |||||
| } | |||||
| try { | |||||
| Object order = wxPayService.createOrder(request); | |||||
| return order; | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| return e.getLocalizedMessage(); | |||||
| } | |||||
| } | |||||
| public Object createWebOrder(String productName, String clientIp, | |||||
| String productId, Integer price, | |||||
| String orderNo, String body, | |||||
| String openid){ | |||||
| WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); | |||||
| request.setDeviceInfo("WEB"); | |||||
| request.setBody(productName); | |||||
| request.setOutTradeNo(orderNo); | |||||
| request.setDetail(productName); | |||||
| request.setTotalFee(price); | |||||
| request.setSpbillCreateIp(clientIp); | |||||
| request.setNotifyUrl(wxPay.notifyUrl); | |||||
| request.setTradeType(WxPayConstants.TradeType.MWEB); | |||||
| request.setProductId(productId); | |||||
| request.setAppid(wxPay.appId); | |||||
| request.setOpenid(openid); | |||||
| if (dev){ | |||||
| request.setTotalFee(price); | |||||
| request.setNotifyUrl(wxPay.notifyUrlDev); | |||||
| request.setAppid(wxPay.appId); | |||||
| request.setOpenid(openid); | |||||
| } | |||||
| try { | |||||
| Object order = wxPayService.createOrder(request); | |||||
| return order; | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| return e.getLocalizedMessage(); | |||||
| } | |||||
| } | |||||
| public WxPayOrderNotifyResult appNotify(String requestBody){ | |||||
| WxPayOrderNotifyResult notify = null; | |||||
| try { | |||||
| notify = wxPayService.parseOrderNotifyResult(requestBody); | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| return notify; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,23 @@ | |||||
| package org.jeecg.modules.pay.config; | |||||
| import lombok.Data; | |||||
| import lombok.ToString; | |||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
| import org.springframework.context.annotation.PropertySource; | |||||
| import org.springframework.stereotype.Component; | |||||
| @Data | |||||
| @ToString | |||||
| @Component | |||||
| @PropertySource("classpath:pay_alipay.properties") | |||||
| @ConfigurationProperties(prefix = "alipay") | |||||
| public class AliPay { | |||||
| private String appId; | |||||
| private String aliPubilcKey; | |||||
| private String appPrivateKey; | |||||
| private String appPubilcKey; | |||||
| } | |||||
| @ -0,0 +1,29 @@ | |||||
| package org.jeecg.modules.pay.config; | |||||
| import com.github.binarywang.wxpay.service.WxPayService; | |||||
| import lombok.extern.java.Log; | |||||
| import org.jeecg.modules.pay.MpWxPayService; | |||||
| import org.springframework.context.annotation.Bean; | |||||
| import org.springframework.context.annotation.Configuration; | |||||
| import javax.annotation.Resource; | |||||
| @Log | |||||
| @Configuration | |||||
| public class WeixinConfig { | |||||
| @Resource | |||||
| WxPay wxPay; | |||||
| @Resource | |||||
| WxPayService wxPayService; | |||||
| @Bean | |||||
| public MpWxPayService mpWxPayService(){ | |||||
| MpWxPayService mpWxPayService = new MpWxPayService(); | |||||
| mpWxPayService.wxPay = wxPay; | |||||
| mpWxPayService.wxPayService = wxPayService; | |||||
| mpWxPayService.dev = true; | |||||
| log.info("MpWxPayService is regiterd (" + (mpWxPayService.dev?"dev":"prod") + ") as " + wxPay.mchId); | |||||
| return mpWxPayService; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,79 @@ | |||||
| package org.jeecg.modules.pay.config; | |||||
| import lombok.Data; | |||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
| import org.springframework.context.annotation.PropertySource; | |||||
| import org.springframework.stereotype.Component; | |||||
| @Data | |||||
| @Component | |||||
| @PropertySource("classpath:pay_weixin.properties") | |||||
| @ConfigurationProperties(prefix = "pay") | |||||
| public class WxPay { | |||||
| /** | |||||
| * 微信支付mchId | |||||
| */ | |||||
| public String mchId; | |||||
| /** | |||||
| * app支付appId JS支付openId | |||||
| */ | |||||
| public String appId; | |||||
| /** | |||||
| * 微信支付mchKey | |||||
| */ | |||||
| public String mchKey; | |||||
| /** | |||||
| * 回调地址 | |||||
| */ | |||||
| public String notifyUrl; | |||||
| /** | |||||
| * 回调地址dev | |||||
| */ | |||||
| public String notifyUrlDev; | |||||
| /** | |||||
| * 回调地址 | |||||
| */ | |||||
| public String notifyOneUrl; | |||||
| /** | |||||
| * 回调地址dev | |||||
| */ | |||||
| public String notifyUrlOneDev; | |||||
| /** | |||||
| * 签名类型 | |||||
| */ | |||||
| public String signType; | |||||
| /** | |||||
| * 支付证书路径 | |||||
| */ | |||||
| public String keyPath; | |||||
| /** | |||||
| * 回调地址 | |||||
| */ | |||||
| public String notifyOrderUrl; | |||||
| /** | |||||
| * 回调地址dev | |||||
| */ | |||||
| public String notifyOrderUrlDev; | |||||
| } | |||||
| @ -0,0 +1,53 @@ | |||||
| package org.jeecg.modules.pay.config; | |||||
| import com.github.binarywang.wxpay.config.WxPayConfig; | |||||
| import com.github.binarywang.wxpay.constant.WxPayConstants; | |||||
| import com.github.binarywang.wxpay.exception.WxPayException; | |||||
| import com.github.binarywang.wxpay.service.WxPayService; | |||||
| import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; | |||||
| import lombok.RequiredArgsConstructor; | |||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | |||||
| import org.springframework.context.annotation.Bean; | |||||
| import org.springframework.context.annotation.Configuration; | |||||
| import javax.annotation.Resource; | |||||
| @Configuration | |||||
| @RequiredArgsConstructor | |||||
| @ConditionalOnClass(WxPayService.class) | |||||
| public class WxPayConfiguration { | |||||
| @Resource | |||||
| private WxPay wxPay; | |||||
| @Bean | |||||
| public WxPayService wxMpPayService() { | |||||
| WxPayConfig payConfig = new WxPayConfig(); | |||||
| payConfig.setAppId(wxPay.appId); | |||||
| payConfig.setMchId(wxPay.mchId); | |||||
| payConfig.setMchKey(wxPay.mchKey); | |||||
| payConfig.setKeyPath(wxPay.keyPath); | |||||
| payConfig.setSignType(WxPayConstants.SignType.MD5); | |||||
| WxPayService wxPayService = new WxPayServiceImpl(); | |||||
| wxPayService.setConfig(payConfig); | |||||
| return wxPayService; | |||||
| } | |||||
| // @Bean("saboxWxPayService") | |||||
| // public WxPayService saboxWxPayService(){ | |||||
| // WxPayConfig payConfig = new WxPayConfig(); | |||||
| // WxPayService wxPayService = new WxPayServiceImpl(); | |||||
| // String sandboxSignKey = null; | |||||
| // try { | |||||
| // wxPayService.setConfig(payConfig); | |||||
| // sandboxSignKey = wxPayService.getSandboxSignKey(); | |||||
| // } catch (WxPayException e) { | |||||
| // e.printStackTrace(); | |||||
| // } | |||||
| // payConfig.setUseSandboxEnv(true); | |||||
| // payConfig.setMchKey(sandboxSignKey); | |||||
| // wxPayService.setConfig(payConfig); | |||||
| // return wxPayService; | |||||
| // } | |||||
| } | |||||
| @ -0,0 +1,25 @@ | |||||
| -----BEGIN CERTIFICATE----- | |||||
| MIIENDCCAxygAwIBAgIUe+VtxpWythK9HGxxCn+/oaxGsQ8wDQYJKoZIhvcNAQEL | |||||
| BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT | |||||
| FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg | |||||
| Q0EwHhcNMjQxMjA5MDUzNTU3WhcNMjkxMjA4MDUzNTU3WjCBjTETMBEGA1UEAwwK | |||||
| MTY1OTA2Njg3MDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTkwNwYDVQQL | |||||
| DDDlvq7nqIvpg6jokL3vvIjoi4/lt57vvInlm73pmYXml4XooYzmnInpmZDlhazl | |||||
| j7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcN | |||||
| AQEBBQADggEPADCCAQoCggEBAMOUPv24dTCOvyuFKWTuDIK+ZYA4f3DWe+Xq+NK0 | |||||
| 3RQRsaQ9gS1mEAqnKTArm49XQJcckjxrsiW/6qsLRjWb4xDrdJnwAdv57nB36IaR | |||||
| dJdfhP/LaMEcEZXEmTA8Hts3ueHtRirg5nU8HnEpe9jBiCtO2YMrEyvBtqh0mvIt | |||||
| uLr9bMLhBwotJBPAno716EdWtRZsFeLNgplf9AeP0FBjvca182GP+mlVWHjx0+R9 | |||||
| jLbSkZLm04/pUMeyU1B7UUexQvPZAqv1+pRwYqX0KGeltxQCQO0fOUjY0NiJWyJ1 | |||||
| ElmNqMkDjOljKfdJv12XpUb8GxWAtMBI8OiHyWKdcqSya4ECAwEAAaOBuTCBtjAJ | |||||
| BgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGE | |||||
| aHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0 | |||||
| MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFC | |||||
| NjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEB | |||||
| CwUAA4IBAQB2wKNWFtzqAwwVMH2QeF2Fx8i0utPR03D22jmaHGtsxV08vxo2tt6k | |||||
| j9Xh2X4sTwn7ZDcPWP8Yqq41m3/LxmSpcaocTUG5WAIr7Waz19pmqUnFit17XiZb | |||||
| PEHNLtz1UosdpsrEKbRBQOz3VYZBsB/IPBEVOKrcmt9oRgMFKz1LfSG/DBY2Vf9q | |||||
| yUagxC1wsSP1ZFYL6ZCkroXmmyMDaaJ9JvSYRBfmmXJ0626ag2L1FqzDHIObFM+J | |||||
| 3Im6Qm0c9TzH/VsX/QdJhDJcYN6jlBn22xnWeVMnLNS5YzX7zcDuZR3m0Oakru6y | |||||
| i6bO8IWfJzS22nnM0hy1ORHieMB6Jrsq | |||||
| -----END CERTIFICATE----- | |||||
| @ -0,0 +1,28 @@ | |||||
| -----BEGIN PRIVATE KEY----- | |||||
| MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDDlD79uHUwjr8r | |||||
| hSlk7gyCvmWAOH9w1nvl6vjStN0UEbGkPYEtZhAKpykwK5uPV0CXHJI8a7Ilv+qr | |||||
| C0Y1m+MQ63SZ8AHb+e5wd+iGkXSXX4T/y2jBHBGVxJkwPB7bN7nh7UYq4OZ1PB5x | |||||
| KXvYwYgrTtmDKxMrwbaodJryLbi6/WzC4QcKLSQTwJ6O9ehHVrUWbBXizYKZX/QH | |||||
| j9BQY73GtfNhj/ppVVh48dPkfYy20pGS5tOP6VDHslNQe1FHsULz2QKr9fqUcGKl | |||||
| 9ChnpbcUAkDtHzlI2NDYiVsidRJZjajJA4zpYyn3Sb9dl6VG/BsVgLTASPDoh8li | |||||
| nXKksmuBAgMBAAECggEAf4/cee3qeY5RP9hthEgDXu9CEpxG+tjaHL7iJcQTgfh8 | |||||
| bcwzyeGMyvX2VlXK83YMScM32jLAEgEX1RHYbDTNqAZ6mcDB5bEhBLggsEyEyApk | |||||
| G9aW74UYLx/4bk54LbEuCx6QKn1fss1QaayN+3VXFDAsjHH24g5JzZuoSBbsKwDl | |||||
| WVP3wHh87x4eiXnDtR9hBG5ul5AXRhuE24ka1cpYE0N3/7cm+D+lNfvXz/A427z9 | |||||
| 6+El2sBTutrfIzFnJjz2KUX1RqFHXqBWVwCxUPH0SSp6l59qy/kWOkIW1nlOjo8x | |||||
| fPoLEd6y6x5YgaNSLG3ur4hhxp7h/2beVqwfmSSxJQKBgQDwuG8LTpB+xDKjmE3C | |||||
| sX82n1yvE6I0UQo4mc/5LkS/PxsKAE9zo6yX96WsFThY8S43Ep6gg6SdMVGINHBx | |||||
| vPudiWgIrhGMocJ+9PHapJQBtUAxem64gNVxSXFrfyphjO+GRtM4ji9+71fcUwFD | |||||
| lS0T0wKm5MVCbSzbUWIdGgWM5wKBgQDP/kqqP/SalLD89dQa4jaJ5jOQJTiYq7lB | |||||
| 9BIsy23dQEv5mNXJS6pcOjayuE1iaiYdA0Ri0Rueu4xZ+hNaAdSHcH1Pgt/0qMI7 | |||||
| +SuaHjPFxffNFtePkmHg6dS9JzXwQ/xub6ZOf+E/qUf1BTv6ja0o69ApWl0RFtAF | |||||
| xL/Z6kIPVwKBgETsujbllvAFI26+ND2z7vXn6XTjzUTnk2Kjf+4cNmkAG7DgZ993 | |||||
| lPqqWRCNvuWQoSf5t9vD9cVgkrTKNwwKDY2NA3HAzZuT0YnifsGY8BwRFsFUChHg | |||||
| Kb1XRxd9gNgPr6Gl8+K0q5rP0ztttOXx98c+WvsIdAbSFc7yXYJxqfcvAoGAAorI | |||||
| HNaVRcJle2IByqZTJlJS9QMPcwY+SGkUQ8nkuNyNUSqmCkTLez8W5g5Mm9RSTO56 | |||||
| Sn7lyIXgTEU7MVFuaI1earddx168qQD9oG+YEGXABpit38pZOeeBuyIcjag3EJ56 | |||||
| uODlPuLxxzPeLMzIfgSL0cWR96CAwGFMOvya/BcCgYBpOOie5LdFOLh0kCRWk0sg | |||||
| 1/pIJYr9hXmG+QEFSELZ56mWl0ujPfZ8g7bh211RZ5FWaddD3ba7nZR6u884bRwN | |||||
| 9Tg/BKz5rXd7FkKtaodxs1/ti1WLGdrC/mnCjIq0LfnVK6Zg5dbOSGdE2qQaVyPY | |||||
| ZUrwYWW/VDgsAyeMuWWdEQ== | |||||
| -----END PRIVATE KEY----- | |||||
| @ -0,0 +1,28 @@ | |||||
| -----BEGIN PRIVATE KEY----- | |||||
| MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGTdqq3lLCX5s2 | |||||
| Du4/F43kUjTDS7gzFgYfdxQFVAvY5Fb49JkApKAnTIi/Oql4MmRQEHXePxS84HA+ | |||||
| Ses6/21klPX7VDBy2i5FvHVLJVpkYG1Y0Otlv0RgLN5iZrrLvOG0IU0AQs/F5sgH | |||||
| XA4k7W3QhYAlxJVBRuWqj/9PxDLNwdRMGDvfF84I29XVxrDEq9c+QfomZbZumnVg | |||||
| VIJYo7Do6GKDEYItMKGlr9nfiQ8eXbfbOnaIwlzP+TIUfsbLUDpvCjon3MhwkZw5 | |||||
| jtslpxMceLV6r3Dd0pv1OvOVDEbeARiIwgSoI2+PH3pLuDMfkGDOQoH96mIcBPrO | |||||
| 4wgq8ma/AgMBAAECggEBAKy5RTxNF3KcCboFOTkVEA8OF0z/1/oPNdgURQj7ErKg | |||||
| +KwxiE8KFUEFpZpCwzehVMR0AeZJtYtqRfnLMquZrbPNF5AI3YY8Sc+N/fAtIdWK | |||||
| M9QHbPGbrjfC/RRifFNXOpRF6SbQCt9KS3I1mVBKybq1fU/oMUTBNuvgLrZQoxuZ | |||||
| LnyrRaYI18xJXXXXqvf5RDEaviFRNbf7+uv85hBWGbiZV12eWhXOY50hTqmvQOp1 | |||||
| jG/emsKxBUN2o0S+2l7hks/tNvT3kFEPMyJDoKh6WpQcHVngegHgTMrkI9YD0Ryc | |||||
| oBCTfaD2glJYcTtWaD47Vxq2iW1tsxxbK45FHe4WLIkCgYEA7aPTQecIHL6sMxC0 | |||||
| eZ0C9rsmewtaa1COQq1o50oiLW+qRlQixA9BytYZn+VNfBw+toYfL4OYH1J69z+f | |||||
| EvZ5P9/N+7IusOnIPqNk31SONR9m/Z6MhoGbouYIArR5aeZXo4Bo3MZXtq+CwbtR | |||||
| hayPCY6yLy3AWVEQ8+eclxWo+h0CgYEA1aAF7dvi34tciIP1DonjD4vFqtTH5Irh | |||||
| EIxO0gduzHV78fyrW14ezRKA25n90TinKBeBKrveOrCIq+Am/Z6MWtEbQCZMbo3D | |||||
| MHR53GfOK3WqAxF92ioVWkOrlcLNJCfVUID78L/lNRmq6+ED4IXI11FMQQ3L/OGU | |||||
| 7emnTSRRrYsCgYAcR42hXxP5D7vAS/GeM1Ah+n2G0QAOm0SCrM46D/lnPM2flu2Y | |||||
| NVSYBciA3bHN3jKcV/OoHNniiFc3yytr/0bIkiKaHEcwKHH6+kjLxu0xZy5DajXA | |||||
| 3/WcehFj+QQl1RKC04onE7dmdxZxZZA6/yD6ey+7K4+jUWFaFSruU9aLBQKBgERD | |||||
| RGHDl/WzBLii4hXpPeNj2KBEKjP/pPeyviUjNuaizB6BjQg/RTxmo0KJLLBEmDWZ | |||||
| fS74pYS/kIzLrenxVgxXMYwIMPhK2IqNTbt+eEUu7krYtgyW0gfsA9JxUzgwelul | |||||
| O9yslUOolhOV7bU7SvhzBBjtnbeLJhn4RfvClU8NAoGAXOQRM4SHGEKKfvrgBqf5 | |||||
| KD/gyoOB/akfFaucKOZ6wCXqRGPzvfWb3DiOk8vonzhUotJIHUJ3HyfL1+LxDNuH | |||||
| FkV4NTSc8W0/GMgUX840Mf0bgAv9tCk/C22EWbSU45y7C9yb4IaOb02xqnrn0HTX | |||||
| QMF4fplSUn1iU6rG3NmO6qo= | |||||
| -----END PRIVATE KEY----- | |||||
| @ -0,0 +1,2 @@ | |||||
| server: | |||||
| port: 7002 | |||||
| @ -0,0 +1,4 @@ | |||||
| alipay.appId= | |||||
| alipay.aliPubilcKey= | |||||
| alipay.appPubilcKey= | |||||
| alipay.appPrivateKey= | |||||
| @ -0,0 +1,7 @@ | |||||
| pay.mchId= | |||||
| pay.appId= | |||||
| pay.mchKey= | |||||
| pay.keyPath= | |||||
| pay.notifyUrl= | |||||
| pay.notifyUrlDev= | |||||
| @ -0,0 +1,25 @@ | |||||
| -----BEGIN CERTIFICATE----- | |||||
| MIIENDCCAxygAwIBAgIUS2ctG8sgsiCB/WxeyqfBJ3rxt3IwDQYJKoZIhvcNAQEL | |||||
| BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT | |||||
| FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg | |||||
| Q0EwHhcNMjUwNjIwMDg1MTE2WhcNMzAwNjE5MDg1MTE2WjCBjTETMBEGA1UEAwwK | |||||
| MTcxMTAzMDQ2OTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTkwNwYDVQQL | |||||
| DDDlvJjlpKrohb7ooavvvIjkuIrmtbfvvInljLvnlpfnp5HmioDmnInpmZDlhazl | |||||
| j7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcN | |||||
| AQEBBQADggEPADCCAQoCggEBAN4LlVj/OWVE0T1W7ZpOqDDLYtbHOPWY8VbvJdsH | |||||
| imHaYfLVB2ouaN8FDNHATHvInj2D0BwxnFuWcusJr8k5Pyu/eEkGmsvWSLefY6dd | |||||
| qrF7F/eZCber2UTJ8Q69gUSSaXAhZ3bkppKP+JcNSRtaswqT/pLMjRrx4MLZbyTa | |||||
| pTqsEGDRSpXG1694vgv8MOD3YdmTLwJ+4paS7QZ5wZypPWLnK7/5haTJWoeLy6G4 | |||||
| ZOdBHqnksh3uQ7DQQEl0mx4i+bQdIDN2V4qAvQJM3CQlVJbYBqIPqRQJdH1Cqpvh | |||||
| vtwTjD4UuZw9gX1vVKBnitE85r2qXmpTgIigPtHkIemKWXsCAwEAAaOBuTCBtjAJ | |||||
| BgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGE | |||||
| aHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0 | |||||
| MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFC | |||||
| NjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEB | |||||
| CwUAA4IBAQCBwGs4zHnrTAuGMIxknKqU1Z1ZpYGRRomZBZrygMOBwPkPOHOYAgyu | |||||
| 8+JBPTtYp9Nq25nYpcM8GXHFwAGB28Z8jvRnAXVg/VMRTFmrTEI1mg1NZF1PNo0f | |||||
| wFJT/71ZU6uT1vJBUVLbPvfIHmnue6Uk56JAqUZNaJPyup7LDC01x9MsCzsHFimZ | |||||
| b4D9g3hhTVvfuChXQE4xpysUP2GgRRtY13w9bxwLYoR1NVGPC9un9Dpszs20ExNt | |||||
| flSQiw4pIdJlKHaFclD03tlFctH9pl24b10WsNVzpsq1akIjLFscykq+ERzWVn/w | |||||
| YtGglgy+OG1fPFna3xapR/k7MDcIQ2QO | |||||
| -----END CERTIFICATE----- | |||||
| @ -0,0 +1,28 @@ | |||||
| -----BEGIN PRIVATE KEY----- | |||||
| MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDeC5VY/zllRNE9 | |||||
| Vu2aTqgwy2LWxzj1mPFW7yXbB4ph2mHy1QdqLmjfBQzRwEx7yJ49g9AcMZxblnLr | |||||
| Ca/JOT8rv3hJBprL1ki3n2OnXaqxexf3mQm3q9lEyfEOvYFEkmlwIWd25KaSj/iX | |||||
| DUkbWrMKk/6SzI0a8eDC2W8k2qU6rBBg0UqVxteveL4L/DDg92HZky8CfuKWku0G | |||||
| ecGcqT1i5yu/+YWkyVqHi8uhuGTnQR6p5LId7kOw0EBJdJseIvm0HSAzdleKgL0C | |||||
| TNwkJVSW2AaiD6kUCXR9Qqqb4b7cE4w+FLmcPYF9b1SgZ4rRPOa9ql5qU4CIoD7R | |||||
| 5CHpill7AgMBAAECggEBAJteHY1dYKrUgVhbV/wt54/k8G76jYeEEfLTeXiOCS05 | |||||
| ImpI11xbxvOuU+78kEfY86h1cAwaRp7rYdPGPmMdlG8nFaJ7ZZsVgGJDu/YjG0n+ | |||||
| qKGOSvdi3q88Ylj/DtGNZQuZxAy0Jz3MUZRYLnxedYMEVRAg4ucksjGE9TkjaJPo | |||||
| /XEJBgPFAAS0p802cLD+P6rn08IQXOws8hvempRbwhtHbhmnKzytf54tQxqD0CJ6 | |||||
| b9QZW0wourw7PTnIA1Ss7XmJ0YV0i5Fdc9aUP7nvBqdW44cvq21zOOjJ4o4SyaXO | |||||
| l0qyfvwoTla6xqjW5gIVltlBD8Jp8ZEyTX9q7rdEtQkCgYEA/Xtg/zxOmE5i2xdV | |||||
| +ZhYS+axTdPBRs31ZMifMNsgjRyblzgzdxA6qt7XS7fSdXJ2h2oZetU5jOHITt7z | |||||
| Q/D7GTfe9yrFqYrRo8Ckj8zgAPuZwGA6Vjkr+SoLNwnWiFo6OrGUGrrGRT1dk7t0 | |||||
| rsD+e0V66sAfiMXLrRV/OsWWsi0CgYEA4EBCSFG+TILW7Gheev4FmEXl48jf8m7u | |||||
| nKQwgyEPn1CE/q1K6V+Rrq8R45HEPxtSZuPUwR1la3pLFnCFnE6fMT7sFcF77JuZ | |||||
| eem29NJoL7yBvCezPoRXxBaXTWLL7MOCgOBTb+N5Ty46ECWMDUSxwCK45nZTaLIZ | |||||
| oJ1ykujTC0cCgYEAnQURp+oesaBVAmzpOC0T/SiRiqly375zlZPlcOk8t80R4NHS | |||||
| p52pCfHyohfjyhc2r1mdIQb2mHvAjoLzZJHhqdR/TNL1ELpKdMq/5cg+tr0kmBPD | |||||
| 72eJAtb1jYmNmHdz/KnGGey7J2cFEZ+cfyhUO95lbwfGQP5t1fEsGCcP250CgYB7 | |||||
| iss5XldRfW98VE9gwNtCNZfd8sd1nymzgDz9sNQTd9+dEslHYpA2xVo8ngyYm6u8 | |||||
| 5V1Leq9qE7iURy9EmofXMIwNvEdSZbKa2Ggj3lrpmZd7mf+EvJJBhBSc3IXuDROz | |||||
| fmJZLN+jAJuaU6Uhliu65yYoSR3QevXlZ3g8eSnzdwKBgBxoA1/79eW/vIlypk3G | |||||
| ujEToMVY1e0JQTIe+ns0BgxG/iP1zHSJXUqzCUCirArgiQUxXMhV5oO5VApgxQ/e | |||||
| Aeb/jw7Rr0V3+/tx6KzBqRej5rtNB7YBj5XDtIypHjEhgCJXgqUUeIY1pu01l7F8 | |||||
| 8H+Jh6L0yQ+oslN1Uf9BLRrq | |||||
| -----END PRIVATE KEY----- | |||||
| @ -0,0 +1,4 @@ | |||||
| alipay.appId=111 | |||||
| alipay.aliPubilcKey=111 | |||||
| alipay.appPubilcKey=111 | |||||
| alipay.appPrivateKey=111 | |||||
| @ -0,0 +1,8 @@ | |||||
| pay.mchId=1711030469 | |||||
| pay.appId=wx8ff2ab9559aa6387 | |||||
| pay.mchKey=0fdb77429ffdf206c151af76a663041c | |||||
| pay.keyPath=classpath:apiclient_cert.pem | |||||
| pay.notifyUrl=https://prod-api.budingxiaoshuo.com/health-admin/order/payNotify | |||||
| pay.notifyUrlDev=https://prod-api.budingxiaoshuo.com/health-admin/order/payNotify | |||||
| pay.notifyOneUrl=https://prod-api.budingxiaoshuo.com/health-admin/order/payNotify | |||||
| pay.notifyUrlOneDev=https://prod-api.budingxiaoshuo.com/health-admin/order/payNotify | |||||