From e0395c5454534e7cf657b10045d00e4042dc7e71 Mon Sep 17 00:00:00 2001
From: houruijun <411269194@kidgrow.com>
Date: Mon, 28 Sep 2020 15:51:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/pay_master' into pay_master

---
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/WxServiceImpl.java |  107 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 107 insertions(+), 0 deletions(-)

diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/WxServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/WxServiceImpl.java
new file mode 100644
index 0000000..6ee053d
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/WxServiceImpl.java
@@ -0,0 +1,107 @@
+package com.kidgrow.oprationcenter.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.kidgrow.common.utils.QRCodeUtil;
+import com.kidgrow.common.utils.StringUtils;
+import com.kidgrow.oprationcenter.model.SaasClientPay;
+import com.kidgrow.oprationcenter.service.ISaasClientPayService;
+import com.kidgrow.oprationcenter.service.WxService;
+import com.kidgrow.oprationcenter.weixin.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class WxServiceImpl implements WxService {
+    @Resource
+    WeiXinOfficPayProperties weiXinOfficPayProperties;
+    @Autowired
+    @Lazy
+    ISaasClientPayService iSaasClientPayService;
+
+    @Override
+    public Map<String,String> getCode(SaasClientPay saasClientPay, HttpServletRequest request) throws Exception {
+        Map<String,String> jsonObject=new HashMap<>();
+        Map<String,Object> mapto=new HashMap<>();
+        jsonObject.put("body",saasClientPay.getChildName());//商品描述
+        jsonObject.put("out_trade_no", saasClientPay.getOutTradeNo());//商户订单号
+        jsonObject.put("total_fee",saasClientPay.getPayPrice().toString());//标价金额  单位为分
+        jsonObject.put("spbill_create_ip",getIpAddress(request));//终端IP
+        jsonObject.put("notify_url",weiXinOfficPayProperties.getPayNotifyUrl());//通知地址
+        jsonObject.put("trade_type","NATIVE");//交易类型
+        MyConfig wxPayConfig= new MyConfig(weiXinOfficPayProperties);
+        WXPay wxPay=new WXPay(wxPayConfig);
+        Map<String, String> stringStringMap = wxPay.fillRequestData(jsonObject);
+        Map<String, String> result = wxPay.unifiedOrder(stringStringMap);
+        String resultStr = result.get("code_url");
+        log.error("");
+        if(result.get("code_url")==null|| StringUtils.isBlank(resultStr)){
+            return null;
+        }
+        String s = QRCodeUtil.creatRrCode(resultStr, 200, 200, 0).replaceAll("\n","").replaceAll("\r","");
+        String prepay_id = result.get("prepay_id");
+        Map<String,String> map = new HashMap<>();
+        map.put("code_url",s);
+        map.put("prepay_id",prepay_id);
+        return map;
+    }
+    public static String getIpAddress(HttpServletRequest request) {
+        String ip = request.getHeader("x-forwarded-for");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+
+    @Override
+    public String callback(Map<String, String> requestMap) throws Exception {
+        Map<String,String> map=new HashMap<>();
+        map.put("return_code","FAIL");
+        map.put("return_msg","INVALID_REQUEST");
+        log.error("eeeeeeeeeeeeeee:"+requestMap.toString());
+        boolean signatureValid = WXPayUtil.isSignatureValid(requestMap, weiXinOfficPayProperties.getKey(), WXPayConstants.SignType.HMACSHA256);
+        if(signatureValid){
+            log.error("wwwwwwwwwwwwweeeeeeeeeeeeeeeeeeeee");
+            //支付成功
+            if(WXPayConstants.SUCCESS.equals(requestMap.get("result_code"))){
+                //更新状态 out_trade_no
+                QueryWrapper queryWrapper = new QueryWrapper();
+                queryWrapper.eq("out_trade_no",requestMap.get("out_trade_no"));
+                queryWrapper.eq("pay_status",0);
+                List<SaasClientPay> list = iSaasClientPayService.list(queryWrapper);
+                if(!list.isEmpty()){
+                    SaasClientPay saasClientPay = list.get(0);
+                    saasClientPay.setPayTime(new Date());
+                    saasClientPay.setPayStatus(2);
+                    saasClientPay.setPayMethod(0);
+                    saasClientPay.setTradeNo(requestMap.get("transaction_id"));
+                    boolean b = iSaasClientPayService.updateById(saasClientPay);
+                    map.put("return_code","SUCCESS");
+                    map.put("return_msg","OK");
+                }
+            }
+        }
+        return WXPayUtil.mapToXml(map);
+    }
+}

--
Gitblit v1.8.0