server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java
@@ -3,10 +3,12 @@ import com.alibaba.fastjson.JSON; import com.doumee.config.wx.TransferDetailEntityNew; import com.doumee.config.wx.WxMiniConfig; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.ApiResponse; import com.doumee.service.business.OrdersService; import com.doumee.service.business.WithdrawalOrdersService; import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.RSAAutoCertificateConfig; import com.wechat.pay.java.core.RSAPublicKeyConfig; @@ -16,6 +18,7 @@ import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; import com.wechat.pay.java.service.refund.model.RefundNotification; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.mgt.DefaultSecurityManager; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +48,9 @@ @Autowired private OrdersService ordersService; @Autowired private WithdrawalOrdersService withdrawalOrdersService; /** * ã微信æ¯ä»ã弿¥éç¥ @@ -177,14 +183,30 @@ * @return */ @PostMapping(value = "/web/wechat/transferNotify") public ApiResponse wxPayCallback( HttpServletRequest request) { public ApiResponse transferNotify( HttpServletRequest request) { Map<String,String> errMap = new HashMap<>(); try { log.info("å¾®ä¿¡åæ·é¶çº¿è½¬è´¦ - åè°éç¥ /wxpay/callback"); TransferDetailEntityNew entity = wxPaySuccessCallback(request); log.info("transfer ok.{}",entity); log.error("å¾®ä¿¡åæ·é¶çº¿è½¬è´¦ - åè°éç¥ /wxpay/callback"); Config config = new RSAPublicKeyConfig.Builder() .merchantId(WxMiniConfig.wxProperties.getSubMchId()) //微信æ¯ä»çåæ·å· .privateKeyFromPath(WxMiniConfig.wxProperties.getWechatPrivateKeyPath()) // åæ·APIè¯ä¹¦ç§é¥çåæ¾è·¯å¾ .publicKeyFromPath(WxMiniConfig.wxProperties.getWechatPubKeyPath()) //微信æ¯ä»å ¬é¥çåæ¾è·¯å¾ .publicKeyId(WxMiniConfig.wxProperties.getWechatPayPublicKeyId()) //微信æ¯ä»å ¬é¥ID .merchantSerialNumber(WxMiniConfig.wxProperties.getWechatSerialNumer()) //åæ·APIè¯ä¹¦åºåå· .apiV3Key("7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB") //APIv3å¯é¥ .build(); TransferDetailEntityNew entity = wxSuccessCallback(request,config); log.error("transfer ok.{}",entity); //åè°æååå¤çèªå·±çä¸å¡ if(entity != null){ if((entity.getState().equals(Constants.SUCCESS) || entity.getState().equals(Constants.CANCELLED) || entity.getState().equals(Constants.FAIL)) && StringUtils.isNotBlank(entity.getOutBillNo())){ withdrawalOrdersService.transferSuccess(entity.getOutBillNo(),entity.getState().equals(Constants.SUCCESS)?true:false); } } return ApiResponse.success("å¤çæå"); } catch (Exception e) { @@ -195,7 +217,7 @@ } } public TransferDetailEntityNew wxPaySuccessCallback(HttpServletRequest request) throws IOException { public TransferDetailEntityNew wxSuccessCallback(HttpServletRequest request,Config config) throws IOException { String requestBody = getBodyString(request, "UTF-8"); //è¯ä¹¦åºåå·ï¼å¾®ä¿¡å¹³å°ï¼ éªç¾çâ微信æ¯ä»å¹³å°è¯ä¹¦âæå¯¹åºçå¹³å°è¯ä¹¦åºåå· String wechatPaySerial = request.getHeader("Wechatpay-Serial"); @@ -214,14 +236,14 @@ .body(requestBody) .build(); // 2. æå»ºConfig RSAPublicKeyConfig Config config = new RSAPublicKeyConfig.Builder() .merchantId(WxMiniConfig.wxProperties.getMchId()) //微信æ¯ä»çåæ·å· .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) // åæ·APIè¯ä¹¦ç§é¥çåæ¾è·¯å¾ .publicKeyFromPath(WxMiniConfig.wxProperties.getWechatPubKeyPath()) //微信æ¯ä»å ¬é¥çåæ¾è·¯å¾ .publicKeyId(WxMiniConfig.wxProperties.getWechatPayPublicKeyId()) //微信æ¯ä»å ¬é¥ID .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) //åæ·APIè¯ä¹¦åºåå· .apiV3Key("") //APIv3å¯é¥ .build(); // Config config = new RSAPublicKeyConfig.Builder() // .merchantId(WxMiniConfig.wxProperties.getMchId()) //微信æ¯ä»çåæ·å· // .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) // åæ·APIè¯ä¹¦ç§é¥çåæ¾è·¯å¾ // .publicKeyFromPath(WxMiniConfig.wxProperties.getWechatPubKeyPath()) //微信æ¯ä»å ¬é¥çåæ¾è·¯å¾ // .publicKeyId(WxMiniConfig.wxProperties.getWechatPayPublicKeyId()) //微信æ¯ä»å ¬é¥ID // .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) //åæ·APIè¯ä¹¦åºåå· // .apiV3Key("") //APIv3å¯é¥ // .build(); log.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]",wechatPaySerial,wechatSignature,wechatTimestamp,wechatpayNonce,requestBody); // 3. åå§å NotificationParser NotificationParser parser = new NotificationParser((NotificationConfig) config); server/admin/src/main/resources/application.yml
@@ -12,7 +12,7 @@ spring: profiles: active: dev active: test # JSONè¿åé ç½® jackson: # é»è®¤æ¶åº server/admin/src/main/resources/logback-spring.xml
ÎļþÃû´Ó server/services/src/main/resources/logback-spring.xml ÐÞ¸Ä @@ -5,7 +5,7 @@ <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern> </layout> </appender> <property name="log.path" value="/usr/local/jars/official_website/logs"></property> <property name="log.path" value="/usr/local/jars/logs/admin"></property> <property name="log.fileSize" value="100MB"></property> <property name="log.historyDays" value="7"></property> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> server/pom.xml
@@ -62,10 +62,10 @@ </exclusion> </exclusions> --> </dependency> <dependency> <!--<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> </dependency>--> <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> server/services/src/main/java/com/doumee/config/wx/TransferToUser.java
@@ -27,6 +27,14 @@ private static String CANCEL_PATH = "/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}/cancel"; public TransferToUser(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { this.mchid = mchid; this.certificateSerialNo = certificateSerialNo; this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); this.wechatPayPublicKeyId = wechatPayPublicKeyId; this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); } public static void main(String[] args) { // TODO: 请åå¤åæ·å¼åå¿ è¦åæ°ï¼åèï¼https://pay.weixin.qq.com/doc/v3/merchant/4013070756 // TransferToUser client = new TransferToUser( @@ -38,18 +46,18 @@ // ); TransferToUser client = new TransferToUser( "1661772003", // åæ·å·ï¼æ¯ç±å¾®ä¿¡æ¯ä»ç³»ç»çæå¹¶åé ç»æ¯ä¸ªåæ·çå¯ä¸æ è¯ç¬¦ï¼åæ·å·è·åæ¹å¼åè https://pay.weixin.qq.com/doc/v3/merchant/4013070756 "3C9A32FB6CD453FAAAF97F9737ECAEA9D6625727", // åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 "d://wechatApiclient_key.pem", // åæ·APIè¯ä¹¦ç§é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ "47E172124E73E8098A565E971064C20ACDE7C911", // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 "d://wechatpay_47E172124E73E8098A565E971064C20ACDE7C911.pem" // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ "1723326069", // åæ·å·ï¼æ¯ç±å¾®ä¿¡æ¯ä»ç³»ç»çæå¹¶åé ç»æ¯ä¸ªåæ·çå¯ä¸æ è¯ç¬¦ï¼åæ·å·è·åæ¹å¼åè https://pay.weixin.qq.com/doc/v3/merchant/4013070756 "12C0F0DD0F3D2B565B45586D3FEA225EBF723BEC", // åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 "d://jinkuai/shanghu/apiclient_key.pem", // åæ·APIè¯ä¹¦ç§é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ "PUB_KEY_ID_0117233260692025072500181939000603", // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 "d://jinkuai/shanghu/pub_key.pem" // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ ); TransferToUserRequest request = new TransferToUserRequest(); request.appid = "wxcd2b89fd2ff065f8"; //å°ç¨åºid request.appid = "wx332441ae5b12be7d"; //å°ç¨åºid request.outBillNo = "plfk2020042016"; request.transferSceneId = "1005"; request.openid = "oKKHU5IFKpss_DIbFX1lqghFJOEg"; request.openid = "oFucG7Nu5teWNIZiWkAINfAE4glE"; // request.userName = client.encrypt("æ½æè¾"); request.transferAmount = 10L; request.transferRemark = "~~~"; @@ -83,13 +91,6 @@ private final String wechatPayPublicKeyId; private final PublicKey wechatPayPublicKey; public TransferToUser(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { this.mchid = mchid; this.certificateSerialNo = certificateSerialNo; this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); this.wechatPayPublicKeyId = wechatPayPublicKeyId; this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); } public TransferToUserResponse testRun(TransferToUserRequest request) { String uri = PATH; @@ -126,7 +127,7 @@ public TransferToUserResponse run(TransferToUserRequest request,String name) { String uri = PATH; request.appid = WxMiniConfig.wxProperties.getSubAppId(); // request.notifyUrl = WxMiniConfig.wxProperties.getWechatNotifyUrl(); request.notifyUrl = WxMiniConfig.wxProperties.getWechatNotifyUrl(); request.transferSceneId = "1005"; request.userRecvPerception = "å³å¡æ¥é ¬"; if(request.transferAmount >= 30){ @@ -170,7 +171,10 @@ httpResponse.headers(), respBody); // ä»HTTPåºçæ¥ææå»ºè¿åæ°æ® return WXPayUtility.fromJson(respBody, TransferToUserResponse.class); TransferToUser.TransferToUserResponse response = WXPayUtility.fromJson(respBody, TransferToUserResponse.class); response.appId = request.appid; response.mchId = WxMiniConfig.wxProperties.getSubMchId(); return response; } else { throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); } @@ -236,6 +240,12 @@ @SerializedName("package_info") public String packageInfo; @SerializedName("mch_id") public String mchId; @SerializedName("app_id") public String appId; } public enum TransferBillStatus { server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
@@ -78,15 +78,27 @@ */ public void load_wxPayService() { try { // Config config = // new RSAPublicKeyConfig.Builder() // .merchantId(wxPayProperties.getMchId()) // .privateKeyFromPath(wxPayProperties.getPrivateKeyPath()) // .publicKeyFromPath(wxPayProperties.getPubKeyPath()) // .publicKeyId("PUB_KEY_ID_0117000719222024112700219100000508") // .merchantSerialNumber(wxPayProperties.getSerialNumer()) // .apiV3Key(wxPayProperties.getApiV3Key()) // .build(); Config config = new RSAAutoCertificateConfig.Builder() .merchantId(wxPayProperties.getMchId()) .privateKeyFromPath(wxPayProperties.getPrivateKeyPath()) // .publicKeyFromPath(wxPayProperties.getPubKeyPath()) // .publicKeyId("PUB_KEY_ID_0117000719222024112700219100000508") .merchantSerialNumber(wxPayProperties.getSerialNumer()) .apiV3Key(wxPayProperties.getApiV3Key()) .build(); this.wxPayService = new JsapiService.Builder().config(config).build(); // this.wxPayService = new JsapiService.Builder().config(config).build(); this.jsapiExtService = new JsapiServiceExtension.Builder().config(config).build(); this.refundService = new RefundService.Builder().config(config).build(); this.billDownloadService = new BillDownloadService.Builder().config(config).build(); server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -62,6 +62,7 @@ private String typeId;// gybike private String privateKeyPath ; private String privateCertPath;// gybike private String pubKeyPath;// private String wechatSerialNumer; server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -76,6 +76,12 @@ public static final String WORKORDER_LOG_FILE_PATH ="WORKORDER_LOG_FILE_PATH" ; public static final String REDIS_TOKEN_KEY = "token_"; public static final String SUCCESS = "SUCCESS"; public static final String FAIL = "FAIL"; public static final String CANCELLED = "CANCELLED"; public interface uploadType{ String blob = "blob"; String ftp = "ftp"; server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * Created by IntelliJ IDEA. * @@ -15,8 +17,12 @@ @ApiModel("æç°ç³è¯·") public class WithdrawalDTO { @ApiModelProperty(value = "æç°éé¢ (åä½ï¼å)") private Long amount; @ApiModelProperty(value = "æç°éé¢ (åä½ï¼å )") private BigDecimal amount; @ApiModelProperty(value = "çå®å§å") private String name; @ApiModelProperty(value = "ç¨æ·ä¿¡æ¯",hidden = true) private Member member; server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
@@ -102,4 +102,6 @@ void cancelTransfer(TransferToUser.CancelTransferRequest request); void transferSuccess(String outBillNo,Boolean isSuccess); } server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -28,6 +28,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Objects; @@ -181,14 +182,17 @@ @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public TransferToUser.TransferToUserResponse applyWithdrawal(WithdrawalDTO withdrawalDTO){ if(Objects.isNull(withdrawalDTO) || Objects.isNull(withdrawalDTO.getAmount())){ || Objects.isNull(withdrawalDTO.getAmount()) || org.apache.commons.lang3.StringUtils.isBlank(withdrawalDTO.getName()) || withdrawalDTO.getAmount().compareTo(BigDecimal.ZERO)<=Constants.ZERO ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Member member = memberMapper.selectById(withdrawalDTO.getMember().getId()); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ç¨æ·ä¿¡æ¯å¼å¸¸,请è系管çå"); } if(member.getAmount() < withdrawalDTO.getAmount()){ if(member.getAmount() < withdrawalDTO.getAmount().multiply(new BigDecimal("100")).intValue()){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼å¯æç°ä½é¢ä¸è¶³ã"); } if(StringUtils.isEmpty(member.getName())){ @@ -198,7 +202,7 @@ withdrawalOrders.setCreateTime(new Date()); withdrawalOrders.setMemberId(member.getId()); withdrawalOrders.setOutBillNo(UUID.randomUUID().toString().replace("-","")); withdrawalOrders.setAmount(withdrawalDTO.getAmount()); withdrawalOrders.setAmount((withdrawalDTO.getAmount().multiply(new BigDecimal("100"))).longValue()); withdrawalOrders.setStatus(Constants.ZERO); withdrawalOrders.setType(Constants.ZERO); withdrawalOrders.setDeleted(Constants.ZERO); @@ -207,18 +211,17 @@ TransferToUser.TransferToUserRequest transferToUserRequest = new TransferToUser.TransferToUserRequest(); transferToUserRequest.openid = member.getOpenid(); transferToUserRequest.outBillNo = withdrawalOrders.getOutBillNo(); transferToUserRequest.transferAmount = withdrawalDTO.getAmount(); transferToUserRequest.transferAmount = withdrawalOrders.getAmount(); transferToUserRequest.transferRemark = "æç°ç³è¯·"; try { TransferToUser.TransferToUserResponse response = WxMiniConfig.transferToUser.run(transferToUserRequest,member.getName()); TransferToUser.TransferToUserResponse response = WxMiniConfig.transferToUser.run(transferToUserRequest,withdrawalDTO.getName()); withdrawalOrders.setRemark(JSONObject.toJSONString(response)); if(response.state.name().equals("WAIT_USER_CONFIRM") || response.state.name().equals("ACCEPTED")){ withdrawalOrders.setWxExternalNo(response.transferBillNo); } withdrawalOrdersMapper.insert(withdrawalOrders); //æ´æ°ç¨æ·ä½é¢ memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT - " + withdrawalDTO.getAmount() ).eq(Member::getId,member.getId())); memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT - " + withdrawalOrders.getAmount() ).eq(Member::getId,member.getId())); //å卿µæ°´è®°å½ MemberRevenue memberRevenue = new MemberRevenue(); memberRevenue.setCreateTime(new Date()); @@ -245,6 +248,48 @@ @Override public void transferSuccess(String outBillNo,Boolean isSuccess){ //转账æå if(isSuccess){ withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda() .set(WithdrawalOrders::getStatus,Constants.ONE) .eq(WithdrawalOrders::getOutBillNo,outBillNo) ); }else { WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda() .eq(WithdrawalOrders::getOutBillNo,outBillNo).last("limit 1")); if(Objects.isNull(withdrawalOrders)){ return; } Member member = memberMapper.selectById(withdrawalOrders.getMemberId()); if(Objects.isNull(member)){ return; } //æ´æ°ç¨æ·ä½é¢ memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId())); //å卿µæ°´è®°å½ MemberRevenue memberRevenue = new MemberRevenue(); memberRevenue.setCreateTime(new Date()); memberRevenue.setTransactionNo(withdrawalOrders.getOutBillNo()); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setMemberId(withdrawalOrders.getMemberId()); memberRevenue.setType(Constants.FOUR); memberRevenue.setOptType(Constants.ONE); memberRevenue.setBeforeAmount(member.getAmount()); memberRevenue.setAmount(withdrawalOrders.getAmount()); memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount()); memberRevenue.setObjId(withdrawalOrders.getId()); memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); memberRevenue.setObjType(Constants.ONE); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setStatus(Constants.ZERO); memberRevenueMapper.insert(memberRevenue); } } @Override public void cancelTransfer(TransferToUser.CancelTransferRequest request){ if(Objects.isNull(request) || StringUtils.isEmpty(request.outBillNo)){ server/services/src/main/resources/application-dev.yml
@@ -85,20 +85,21 @@ pay: #æå¡å---------start------- åæ°è¯¦è§£å°å https://pay.weixin.qq.com/doc/v3/partner/4013080340 mchId: 1700071922 #æå¡åå¨å¾®ä¿¡æ¯ä»ä¾§çå¯ä¸èº«ä»½æ è¯ appId: wx332441ae5b12be7d #æå¡åå¨å¾®ä¿¡å¼æ¾å¹³å°ï¼ç§»å¨åºç¨ï¼æå ¬ä¼å¹³å°ï¼å ¬ä¼å·/å°ç¨åºï¼ä¸ç³è¯·çä¸ä¸ªå¯ä¸æ è¯ appId: wx6cc1087ca79db7f6 #æå¡åå¨å¾®ä¿¡å¼æ¾å¹³å°ï¼ç§»å¨åºç¨ï¼æå ¬ä¼å¹³å°ï¼å ¬ä¼å·/å°ç¨åºï¼ä¸ç³è¯·çä¸ä¸ªå¯ä¸æ è¯ apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB serialNumer: 7DCD480EB6DF3791721867A6EB57105DECEF38BE #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #æå¡åè¯ä¹¦åºåå· serialNumer: 6696086F6EFB8D6A4F821BD47DDBAF75C3BC1209 #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #æå¡åè¯ä¹¦åºåå· #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S notifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxPayNotify refundNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxRefundNotify keyPath: d://jinkuai/apiclient_cert.p12 privateCertPath: d://jinkuai/apiclient_cert.pem privateKeyPath: d://jinkuai/apiclient_key.pem pubKeyPath: d://jinkuai/pub_key.pem #åæ·æ¯ä»å ¬é¥ #æå¡å-------------end--- #åæ·ä¿¡æ¯ wechatSerialNumer: 38495CE0137D90E4DC4F64F7ECDE035A35470BE3 wechatSerialNumer: 12C0F0DD0F3D2B565B45586D3FEA225EBF723BEC wechatPayPublicKeyId: PUB_KEY_ID_0117233260692025072500181939000603 #åæ·/平尿¯ä»å ¬é¥id wechatPubKeyPath: d://jinkuai/shanghu/pub_key.pem #åæ·æ¯ä»å ¬é¥ wechatPrivateKeyPath: d://jinkuai/shanghu/apiclient_key.pem #åæ·ç§é¥ server/services/src/main/resources/application-test.yml
@@ -74,33 +74,34 @@ ########################微信æ¯ä»ç¸å ³é ç½®######################## wx: pay: #æå¡å---------start------- mchId: 1700071922 #æå¡ååæ·å· appId: wx6cc1087ca79db7f6 #æå¡åAPPID apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 serialNumer: 38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #æå¡åè¯ä¹¦åºåå· #æå¡å---------start------- åæ°è¯¦è§£å°å https://pay.weixin.qq.com/doc/v3/partner/4013080340 mchId: 1700071922 #æå¡åå¨å¾®ä¿¡æ¯ä»ä¾§çå¯ä¸èº«ä»½æ è¯ appId: wx332441ae5b12be7d #æå¡åå¨å¾®ä¿¡å¼æ¾å¹³å°ï¼ç§»å¨åºç¨ï¼æå ¬ä¼å¹³å°ï¼å ¬ä¼å·/å°ç¨åºï¼ä¸ç³è¯·çä¸ä¸ªå¯ä¸æ è¯ apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB serialNumer: 7DCD480EB6DF3791721867A6EB57105DECEF38BE #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #æå¡åè¯ä¹¦åºåå· #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S notifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxPayNotify refundNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxRefundNotify keyPath: /usr/local/zhengshu/apiclient_cert.p12 privateCertPath: /usr/local/zhengshu/apiclient_cert.pem privateKeyPath: /usr/local/zhengshu/apiclient_key.pem keyPath: /usr/local/jars/payFile/apiclient_cert.p12 privateCertPath: /usr/local/jars/payFile/apiclient_cert.pem privateKeyPath: /usr/local/jars/payFile/apiclient_key.pem #æå¡å-------------end--- #åæ·ä¿¡æ¯ wechatSerialNumer: 12C0F0DD0F3D2B565B45586D3FEA225EBF723BEC wechatPayPublicKeyId: PUB_KEY_ID_0117233260692025072500181939000603 #åæ·/平尿¯ä»å ¬é¥id wechatPubKeyPath: /usr/local/zhengshu/pub_key.pem #åæ·æ¯ä»å ¬é¥ wechatPrivateKeyPath: /usr/local/zhengshu/shanghu/apiclient_key.pem #åæ·ç§é¥ wechatPubKeyPath: /usr/local/jars/payFile/shanghu/pub_key.pem #åæ·æ¯ä»å ¬é¥ wechatPrivateKeyPath: /usr/local/jars/payFile/shanghu/apiclient_key.pem #åæ·ç§é¥ wechatNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wechat/transferNotify #åæ·è½¬è´¦åè°å°å #æå¡å-------------end--- existsSub: 1 appSecret: #ååæ·------------start---- subMchId: 1723326069 #ååæ·å· subAppId: wx332441ae5b12be7d #å°ç¨åºid subAppSecret: add86d6406f5c14501ac5bbb1a60e004 #å°ç¨åºç§é¥ subMchId: 1723326069 #ååæ·å· #ååæ·------------end---- # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM typeId: gybike server/web/src/main/java/com/doumee/JKWebApplication.java
@@ -24,8 +24,8 @@ context.getEnvironment(); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(JKWebApplication.class) ; } // @Override // protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // return builder.sources(JKWebApplication.class) ; // } } server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -35,7 +35,6 @@ @Autowired private CategoryService categoryService; @LoginRequired @ApiOperation(value = "è·ååç±»å表", notes = "å°ç¨åºç«¯") @GetMapping("/getCategoryList") @ApiImplicitParams({ server/web/src/main/resources/logback-spring.xmlcopy from server/services/src/main/resources/logback-spring.xml copy to server/web/src/main/resources/logback-spring.xml
Îļþ´Ó server/services/src/main/resources/logback-spring.xml ¸´ÖÆ @@ -5,7 +5,7 @@ <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern> </layout> </appender> <property name="log.path" value="/usr/local/jars/official_website/logs"></property> <property name="log.path" value="/usr/local/jars/logs/web"></property> <property name="log.fileSize" value="100MB"></property> <property name="log.historyDays" value="7"></property> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">