| | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.dy.common.multiDataSource.DataSourceContext; |
| | | import com.dy.common.util.AES; |
| | | import com.dy.common.webUtil.BaseResponse; |
| | | import com.dy.common.webUtil.BaseResponseUtils; |
| | | import com.dy.common.webUtil.ResultCodeMsg; |
| | |
| | | import com.dy.pipIrrWechat.virtualCard.dto.DtoVirtualCard; |
| | | import com.dy.pipIrrWechat.virtualCard.enums.LastOperateENUM; |
| | | import com.dy.pipIrrWechat.virtualCard.enums.RefundItemStateENUM; |
| | | import com.dy.pipIrrWechat.wechatpay.dto.Code2Session; |
| | | import com.dy.pipIrrWechat.wechatpay.dto.DtoOrder; |
| | | import com.dy.pipIrrWechat.wechatpay.dto.NotifyResource; |
| | | import com.dy.pipIrrWechat.wechatpay.dto.OrderNotify; |
| | | import com.dy.pipIrrWechat.wechatpay.dto.*; |
| | | import com.dy.pipIrrWechat.wechatpay.enums.RefundStatusENUM; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.media.Content; |
| | |
| | | import java.security.SignatureException; |
| | | import java.security.spec.InvalidKeySpecException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @author ZhuBaoMin |
| | |
| | | private final RestTemplateUtil restTemplateUtil; |
| | | private final PayHelper payHelper; |
| | | private final VirtualCardSv virtualCardSv; |
| | | private final String appid = com.dy.pipIrrWechat.wechatpay.PayInfo.appid; |
| | | private final String secret = com.dy.pipIrrWechat.wechatpay.PayInfo.secret; |
| | | private final String mchid = com.dy.pipIrrWechat.wechatpay.PayInfo.mchid; |
| | | private final String schema = com.dy.pipIrrWechat.wechatpay.PayInfo.schema; |
| | | private final String signType = com.dy.pipIrrWechat.wechatpay.PayInfo.signType; |
| | | private final String description = com.dy.pipIrrWechat.wechatpay.PayInfo.description; |
| | | private final String loginUrl = com.dy.pipIrrWechat.wechatpay.PayInfo.loginUrl; |
| | | private final String notifyUrl = com.dy.pipIrrWechat.wechatpay.PayInfo.notifyUrl; |
| | | private final String grantType = com.dy.pipIrrWechat.wechatpay.PayInfo.grantType; |
| | | //private final String appid = com.dy.pipIrrWechat.wechatpay.PayInfo.appid; |
| | | //private final String secret = com.dy.pipIrrWechat.wechatpay.PayInfo.secret; |
| | | //private final String mchid = com.dy.pipIrrWechat.wechatpay.PayInfo.mchid; |
| | | //private final String schema = com.dy.pipIrrWechat.wechatpay.PayInfo.schema; |
| | | //private final String signType = com.dy.pipIrrWechat.wechatpay.PayInfo.signType; |
| | | //private final String description = com.dy.pipIrrWechat.wechatpay.PayInfo.description; |
| | | //private final String loginUrl = com.dy.pipIrrWechat.wechatpay.PayInfo.loginUrl; |
| | | //private final String notifyUrl = com.dy.pipIrrWechat.wechatpay.PayInfo.notifyUrl; |
| | | //private final String grantType = com.dy.pipIrrWechat.wechatpay.PayInfo.grantType; |
| | | |
| | | // 平台证书公钥 |
| | | private final Map CERTIFICATE_MAP = new HashMap(); |
| | |
| | | String jsCode = code2Session.getJs_code(); |
| | | |
| | | Map<String, Object> queryParams = new HashMap<>(); |
| | | queryParams.put("appid", appid); |
| | | queryParams.put("secret", secret); |
| | | queryParams.put("appid", PayInfo.appid); |
| | | queryParams.put("secret", PayInfo.secret); |
| | | queryParams.put("js_code", jsCode); |
| | | queryParams.put("grant_type", grantType); |
| | | queryParams.put("grant_type", com.dy.pipIrrWechat.wechatpay.PayInfo.grantType); |
| | | Map<String, String> headerParams = new HashMap<>(); |
| | | JSONObject job = restTemplateUtil.get(loginUrl, queryParams, headerParams); |
| | | JSONObject job = restTemplateUtil.get(com.dy.pipIrrWechat.wechatpay.PayInfo.loginUrl, queryParams, headerParams); |
| | | |
| | | if(job.getLong("errcode") != null && job.getLong("errcode") >= -1) { |
| | | return BaseResponseUtils.buildFail("登录凭证校验失败"); |
| | |
| | | Long timestamp = System.currentTimeMillis() / 1000; |
| | | |
| | | byte[] certFileBs = WxCertUtil.getKey_pemBytes(resourceLoader) ; |
| | | String header = schema + " " + payHelper.getToken(method, httpUrl, "", nonceStr, timestamp, certFileBs); |
| | | String header = com.dy.pipIrrWechat.wechatpay.PayInfo.schema + " " + payHelper.getToken(method, httpUrl, "", nonceStr, timestamp, certFileBs); |
| | | |
| | | Map<String, String> headers = new HashMap<>(); |
| | | headers.put("Authorization", header); |
| | |
| | | } |
| | | |
| | | JSONObject job_body = new JSONObject(); |
| | | job_body.put("appid", appid); |
| | | job_body.put("mchid", mchid); |
| | | job_body.put("description", description); |
| | | job_body.put("appid", PayInfo.appid); |
| | | job_body.put("mchid", PayInfo.mchid); |
| | | job_body.put("description", com.dy.pipIrrWechat.wechatpay.PayInfo.description); |
| | | job_body.put("out_trade_no", orderNumber); |
| | | job_body.put("attach", DataSourceContext.get()); |
| | | job_body.put("notify_url", notifyUrl); |
| | | job_body.put("notify_url", com.dy.pipIrrWechat.wechatpay.PayInfo.notifyUrl); |
| | | |
| | | //订单金额 |
| | | JSONObject job_amount = new JSONObject(); |
| | |
| | | |
| | | String body = job_body.toJSONString(); |
| | | byte[] certFileBs = WxCertUtil.getKey_pemBytes(resourceLoader) ; |
| | | String header = schema + " " + payHelper.getToken(method, httpUrl, body, nonceStr, timestamp, certFileBs); |
| | | String header = com.dy.pipIrrWechat.wechatpay.PayInfo.schema + " " + payHelper.getToken(method, httpUrl, body, nonceStr, timestamp, certFileBs); |
| | | |
| | | Map<String, String> headers = new HashMap<>(); |
| | | headers.put("Authorization", header); |
| | |
| | | job_result.put("timeStamp", timeStamp); |
| | | job_result.put("nonceStr", nonceStr); |
| | | job_result.put("package", pkg); |
| | | job_result.put("signType", signType); |
| | | job_result.put("signType", com.dy.pipIrrWechat.wechatpay.PayInfo.signType); |
| | | job_result.put("paySign", paySign); |
| | | |
| | | return BaseResponseUtils.buildSuccess(job_result) ; |
| | |
| | | result.put("message", "成功"); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 添加微信支付信息 |
| | | * @param po |
| | | * @param bindingResult |
| | | * @return |
| | | */ |
| | | @PostMapping(path = "add_wechatpay", consumes = MediaType.APPLICATION_JSON_VALUE) |
| | | public BaseResponse<Boolean> addWechatpay(@RequestBody @Valid Wechatpay po, BindingResult bindingResult) throws Exception { |
| | | if(bindingResult != null && bindingResult.hasErrors()){ |
| | | return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); |
| | | } |
| | | |
| | | if(paymentSv.getWechatpayByAppId(po.getAppId()) != null) { |
| | | return BaseResponseUtils.buildErrorMsg("该微信支付信息已经存在"); |
| | | } |
| | | |
| | | SeWechatpay seWechatpay = new SeWechatpay(); |
| | | seWechatpay.setAppId(AES.encrypt(po.getAppId())); |
| | | seWechatpay.setAppSecret(AES.encrypt(po.getAppSecret())); |
| | | seWechatpay.setMchId(AES.encrypt(po.getMchId())); |
| | | seWechatpay.setMchKey(AES.encrypt(po.getMchKey())); |
| | | seWechatpay.setSerialNo((AES.encrypt(po.getSerialNo()))); |
| | | seWechatpay.setNotifyUrl(AES.encrypt(po.getNotifyUrl())); |
| | | seWechatpay.setRemarks(po.getRemarks()); |
| | | |
| | | Long rec = Optional.ofNullable(paymentSv.addWechatpay(seWechatpay)).orElse(0L); |
| | | if(rec == 0) { |
| | | return BaseResponseUtils.buildFail("添加微信支付信息失败"); |
| | | } |
| | | return BaseResponseUtils.buildSuccess(true) ; |
| | | } |
| | | } |