| @ -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 | |||