From 53437eea3e12aa55c4864a24958bea4631918b9f Mon Sep 17 00:00:00 2001 From: hankaikai <3233542360@qq.com> Date: Wed, 7 Jun 2023 17:18:22 +0800 Subject: [PATCH] =?UTF-8?q?"=E6=8B=89=E5=8D=A1=E6=8B=89=E8=BF=9B=E4=BB=B6?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E4=BB=A3=E7=A0=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/config/application-common.yml | 15 +- .../klk/service/LkLPayServiceImpl.java | 308 ++++++++++++++---- .../platform/klk/service/LklPayService.java | 21 -- .../merchant/impl/MerchantServiceImpl.java | 7 +- .../impl/MerchantOrderServiceImpl.java | 32 ++ .../controller/home/MerchantController.java | 12 +- .../controller/home/PayNotifyController.java | 18 + 7 files changed, 315 insertions(+), 98 deletions(-) diff --git a/pluss-common-bundle/src/main/resources/config/application-common.yml b/pluss-common-bundle/src/main/resources/config/application-common.yml index 2714ca6..68af570 100644 --- a/pluss-common-bundle/src/main/resources/config/application-common.yml +++ b/pluss-common-bundle/src/main/resources/config/application-common.yml @@ -161,6 +161,20 @@ getui: express: USERID: 1778214 APIKEY: 63e75d64-e8fd-4dcc-93fa-17dc710cdf04 +#lkl: +# privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIcHuPuAbeKgueevtuy4RdMCH/xhLFKniVAhgZb2BfQiSDP0moBF2DiISdTq2A2KvEDol2DQBaAslDFAERkyTDIrZl9iB6xiGUmS/pZULy/k6Q6uED01JDeJLomxh6Cxk7QYlJO0tBpM4Xxahs9h7k0j55ZTV9HPZnLGVaUqyEF5AgMBAAECgYAmugRHvXHGiapH1JF2GvOLrRRXYddAbWRoYvOzxCO4/QwQOpsFJwL4U745HpGQcLXFN/ASiBbU9XQbG/DLdS182qAjvdZVJOA2e3H3LhpY3D8ec3webO+0nGk6e4oWGG1efJLM88Nb0FtQiQ0E6z17Paw5AGvxMVBPbL5SoQfq8QJBANHQmvFkAWlBL2XTLPUXaj+NAJzolE90ctAquxfDcTtfEXv0JitC5bwTg87uNl7n4PUTmtMDIkse+D5vQ2CIF78CQQCkwOIMzedKtWhOEbdGxiz1Y/jkuA8yF7HREeC7X2Av0z2Gi3yltoJd0s6zLn+6zowQp1O/5U6ifrYCIObWlTTHAkA0WOZ/eWL8vr2zmvdpgtkIWAaiH0j5deU7WJ3rNODoXjS/h0+KlZs5zGijVT2Nei7fFnAXW33P3j8zXJEj4XCDAkAcrG0rKVLNz9C9dZveN3NvqdyRge8zGqiZ6HCia7ED4dHdbr1c4ezCg4Px72/PhU8fPt/2j+Qlp8PpjuxeAE3VAkBqUiVV9XZptFEXa/77rgHP3SWrC3TcrrS5jtNTGfA4VISV95YXnZzWjYfpgs2WoxdAXjsrM5TB7L3V4um4o6Dp +# appid: OP00000657 #接入方唯一编号 +# mchSerialNo: 01887665511e #证书序列号 +# merchantNo: 8221210594300JY #商户号 +# vposId: 491612871013605376 #vpos_id +# termNo: A0073841 #终端号 +# apiUrl: https://s2.lakala.com/ +# privateKeyPath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\api_private_key.pem +# certificatePath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\lkl-apigw-v1.cer +# returncatePath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\lkl-apigw-v1.cer +# callBackUrl: https://p40312246f.goho.co/wap/notify/lklCallBack +# pubKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHB7j7gG3ioLnnr7bsuEXTAh/8YSxSp4lQIYGW9gX0Ikgz9JqARdg4iEnU6tgNirxA6Jdg0AWgLJQxQBEZMkwyK2ZfYgesYhlJkv6WVC8v5OkOrhA9NSQ3iS6JsYegsZO0GJSTtLQaTOF8WobPYe5NI+eWU1fRz2ZyxlWlKshBeQIDAQAB + lkl: privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIcHuPuAbeKgueevtuy4RdMCH/xhLFKniVAhgZb2BfQiSDP0moBF2DiISdTq2A2KvEDol2DQBaAslDFAERkyTDIrZl9iB6xiGUmS/pZULy/k6Q6uED01JDeJLomxh6Cxk7QYlJO0tBpM4Xxahs9h7k0j55ZTV9HPZnLGVaUqyEF5AgMBAAECgYAmugRHvXHGiapH1JF2GvOLrRRXYddAbWRoYvOzxCO4/QwQOpsFJwL4U745HpGQcLXFN/ASiBbU9XQbG/DLdS182qAjvdZVJOA2e3H3LhpY3D8ec3webO+0nGk6e4oWGG1efJLM88Nb0FtQiQ0E6z17Paw5AGvxMVBPbL5SoQfq8QJBANHQmvFkAWlBL2XTLPUXaj+NAJzolE90ctAquxfDcTtfEXv0JitC5bwTg87uNl7n4PUTmtMDIkse+D5vQ2CIF78CQQCkwOIMzedKtWhOEbdGxiz1Y/jkuA8yF7HREeC7X2Av0z2Gi3yltoJd0s6zLn+6zowQp1O/5U6ifrYCIObWlTTHAkA0WOZ/eWL8vr2zmvdpgtkIWAaiH0j5deU7WJ3rNODoXjS/h0+KlZs5zGijVT2Nei7fFnAXW33P3j8zXJEj4XCDAkAcrG0rKVLNz9C9dZveN3NvqdyRge8zGqiZ6HCia7ED4dHdbr1c4ezCg4Px72/PhU8fPt/2j+Qlp8PpjuxeAE3VAkBqUiVV9XZptFEXa/77rgHP3SWrC3TcrrS5jtNTGfA4VISV95YXnZzWjYfpgs2WoxdAXjsrM5TB7L3V4um4o6Dp appid: OP00000657 #接入方唯一编号 @@ -176,7 +190,6 @@ lkl: pubKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHB7j7gG3ioLnnr7bsuEXTAh/8YSxSp4lQIYGW9gX0Ikgz9JqARdg4iEnU6tgNirxA6Jdg0AWgLJQxQBEZMkwyK2ZfYgesYhlJkv6WVC8v5OkOrhA9NSQ3iS6JsYegsZO0GJSTtLQaTOF8WobPYe5NI+eWU1fRz2ZyxlWlKshBeQIDAQAB - #lkl: # privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIcHuPuAbeKgueevtuy4RdMCH/xhLFKniVAhgZb2BfQiSDP0moBF2DiISdTq2A2KvEDol2DQBaAslDFAERkyTDIrZl9iB6xiGUmS/pZULy/k6Q6uED01JDeJLomxh6Cxk7QYlJO0tBpM4Xxahs9h7k0j55ZTV9HPZnLGVaUqyEF5AgMBAAECgYAmugRHvXHGiapH1JF2GvOLrRRXYddAbWRoYvOzxCO4/QwQOpsFJwL4U745HpGQcLXFN/ASiBbU9XQbG/DLdS182qAjvdZVJOA2e3H3LhpY3D8ec3webO+0nGk6e4oWGG1efJLM88Nb0FtQiQ0E6z17Paw5AGvxMVBPbL5SoQfq8QJBANHQmvFkAWlBL2XTLPUXaj+NAJzolE90ctAquxfDcTtfEXv0JitC5bwTg87uNl7n4PUTmtMDIkse+D5vQ2CIF78CQQCkwOIMzedKtWhOEbdGxiz1Y/jkuA8yF7HREeC7X2Av0z2Gi3yltoJd0s6zLn+6zowQp1O/5U6ifrYCIObWlTTHAkA0WOZ/eWL8vr2zmvdpgtkIWAaiH0j5deU7WJ3rNODoXjS/h0+KlZs5zGijVT2Nei7fFnAXW33P3j8zXJEj4XCDAkAcrG0rKVLNz9C9dZveN3NvqdyRge8zGqiZ6HCia7ED4dHdbr1c4ezCg4Px72/PhU8fPt/2j+Qlp8PpjuxeAE3VAkBqUiVV9XZptFEXa/77rgHP3SWrC3TcrrS5jtNTGfA4VISV95YXnZzWjYfpgs2WoxdAXjsrM5TB7L3V4um4o6Dp # appid: OP00000462 #接入方唯一编号 diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LkLPayServiceImpl.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LkLPayServiceImpl.java index 0fda7ba..e3c582b 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LkLPayServiceImpl.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LkLPayServiceImpl.java @@ -2,6 +2,8 @@ package cn.pluss.platform.klk.service; import cn.hutool.core.util.ObjectUtil; import cn.pluss.platform.api.ResultCode; +import cn.pluss.platform.constants.Constant; +import cn.pluss.platform.device.MercOrderNewService; import cn.pluss.platform.dto.MemberScanPayDTO; import cn.pluss.platform.dto.MerChantOrderDTO; import cn.pluss.platform.entity.*; @@ -10,21 +12,29 @@ import cn.pluss.platform.klk.LakalaConfig; import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl; import cn.pluss.platform.mapper.MerchantBackLklMapper; import cn.pluss.platform.mapper.MerchantBaseInfoMapper; +import cn.pluss.platform.merchantOrder.MerchantOrderService; import cn.pluss.platform.pay.PayService; import cn.pluss.platform.util.DateUtils; import cn.pluss.platform.util.SnowFlakeUtil; import cn.pluss.platform.util.StringUtil; +import cn.pluss.platform.ys.YsConfig; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import springfox.documentation.spring.web.json.Json; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Date; import java.util.HashMap; import java.util.Map; + @Service("lkLPayService") @Slf4j public class LkLPayServiceImpl implements PayService { @@ -42,112 +52,206 @@ public class LkLPayServiceImpl implements PayService { MerchantBaseInfoMapper merchantBaseInfoMapper; + @Autowired + private RestTemplate restTemplate; + + + @Resource + private MercOrderNewService mercOrderNewService; + @Override public JSONObject tradePay(MerchantOrder order, MerchantChannelStatus channel, MerchantBaseInfo merchant) { - String account_type="WECHAT"; - if(StringUtil.isNotEmpty(order.getScanType())&&"01".equals(order.getScanType())){ - account_type="wechatPay".equals(order.getPayTypeCode())?"WECHAT":"aliPay".equals(order.getPayTypeCode()) ?"ALIPAY":"UQRCODEPAY"; - }else { - + String account_type = "WECHAT"; + if (StringUtil.isNotEmpty(order.getScanType()) && "01".equals(order.getScanType())) { + account_type = "wechatPay".equals(order.getPayTypeCode()) ? "WECHAT" : "aliPay".equals(order.getPayTypeCode()) ? "ALIPAY" : "UQRCODEPAY"; + } else { + account_type = "wechatPay".equals(order.getPayTypeCode()) ? "WECHAT" : "aliPay".equals(order.getPayTypeCode()) ? "ALIPAY" : "UQRCODEPAY"; } + String transType = account_type.equals("WECHAT") ? "71" : account_type.equals("ALIPAY") ? "41" : "51"; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("merchant_code", merchant.getMerchantCode()); + queryWrapper.eq("channel", "5"); + queryWrapper.eq("user_no", LaKalaInterfaceImpl.userNo); + + MerchantBackLkl merchantBackLkl = merchantBackLklMapper.selectOne(queryWrapper); + MsgException.checkNull(merchantBackLkl, "渠道信息异常"); + String req_time = DateUtils.getSdfTimes(); + + Long order_amt = new BigDecimal(order.getConsumeFee()).multiply(new BigDecimal(100)).longValue(); + String body = null; + if (account_type.equals("WECHAT")) { + body = "{\n" + + "\t\"out_org_code\": \"" + lakalaConfig.getAppid() + "\",\n" + + "\t\"req_data\": {\n" + + "\"acc_busi_fields\": {\n" + + "\t\t\t\"user_id\": \"" + order.getMercUserId() + "\"\n" + + "\t\t}," + + "\t\t\"account_type\": \"" + account_type + "\",\n" + + "\t\t\"location_info\": {\n" + + "\t\t\t\"request_ip\": \"" + order.getIp() + "\"\n" + + "\t\t},\n" + + "\t\t\"merchant_no\": \"" + merchantBackLkl.getExternalCustomerNo() + "\",\n" + + "\t\t\"notify_url\": \"" + lakalaConfig.getCallBackUrl() + "\",\n" + + "\t\t\"out_trade_no\": \"" + order.getOrderNumber() + "\",\n" + + "\t\t\"term_no\": \"" + merchantBackLkl.getTermNos() + "\",\n" + + "\t\t\"total_amount\": \"" + order_amt + "\",\n" + + "\t\t\"trans_type\": \"" + transType + "\"\n" + + "\t},\n" + + "\t\"req_time\": \"" + req_time + "\",\n" + + "\t\"version\": \"3.0\"\n" + + "}"; + + } + + if (account_type.equals("ALIPAY")) { + body = "{\n" + + "\t\"out_org_code\": \"" + lakalaConfig.getAppid() + "\",\n" + + "\t\"req_data\": {\n" + + "\t\t\"account_type\": \"" + account_type + "\",\n" + + "\t\t\"location_info\": {\n" + + "\t\t\t\"request_ip\": \"" + order.getIp() + "\"\n" + + "\t\t},\n" + + "\t\t\"merchant_no\": \"" + merchantBackLkl.getExternalCustomerNo() + "\",\n" + + "\t\t\"notify_url\": \"" + lakalaConfig.getCallBackUrl() + "\",\n" + + "\t\t\"out_trade_no\": \"" + order.getOrderNumber() + "\",\n" + + "\t\t\"term_no\": \"" + merchantBackLkl.getTermNos() + "\",\n" + + "\t\t\"total_amount\": \"" + order_amt + "\",\n" + + "\t\t\"trans_type\": \"" + transType + "\"\n" + + "\t},\n" + + "\t\"req_time\": \"" + req_time + "\",\n" + + "\t\"version\": \"3.0\"\n" + + "}"; + } + String response = lklPayService.req(body, "api/v3/labs/trans/preorder"); + + JSONObject resp = new JSONObject(); + if (ObjectUtil.isNotEmpty(response)) { + JSONObject payData = new JSONObject(); + JSONObject object = JSONObject.parseObject(response); + + if (object.containsKey("code") && "BBS00000".equals(object.getString("code"))) { + if (!(StringUtil.isNotEmpty(order.getScanType()) && "01".equals(order.getScanType()))) { + JSONObject acc_resp_fields = object.getJSONObject("resp_data").getJSONObject("acc_resp_fields"); + if (Constant.PAY_TYPE_ALIPAY.equals(order.getPayTypeCode())) { + payData.put("source", acc_resp_fields.getString("code")); + } else if (Constant.PAY_TYPE_WECHAT.equals(order.getPayTypeCode())) { + + payData.put("payAppId", acc_resp_fields.getString("app_id")); + payData.put("payTimeStamp", Long.valueOf(acc_resp_fields.getString("time_stamp")) * 1000); + payData.put("paynonceStr", acc_resp_fields.getString("nonce_str")); + payData.put("payPackage", acc_resp_fields.getString("package")); + payData.put("paySignType", acc_resp_fields.getString("sign_type")); + payData.put("paySign", acc_resp_fields.getString("pay_sign")); + } else { + payData.put("redirectUrl", acc_resp_fields.containsKey("redirect_url") ? acc_resp_fields.getString("redirect_url") : null); + } + + } else { + payData.put("payUrl", object.get("code")); + payData.put("orderNumber", order.getOrderNumber()); + payData.put("mercOrderNo", order.getMercOrderNo()); + } + resp.put("code", ResultCode.SUCCESS.code()); + payData.put("channel", channel.getChannel()); + order.setTransNo((object.getJSONObject("resp_data").containsKey("log_no") && ObjectUtil.isNotEmpty(object.getJSONObject("resp_data").getString("log_no"))) ? object.getString("log_no") : ""); + resp.put("payData", payData); + return resp; + + } else if (object.containsKey("code") && "BBS16270".equals(object.getString("code"))) { + resp.put("code", ResultCode.FAIL.code()); + resp.put("msg", object.getString("msg")); + return resp; + } + } + + + resp.put("code", ResultCode.FAIL.code()); + resp.put("msg", "失败"); + return resp; - return null; } @Override public JSONObject tradePay(MerChantOrderDTO merchantOrderDTO, MerchantOrder order) { - QueryWrapper baseQueyWrapper=new QueryWrapper<>(); - baseQueyWrapper.eq("merchantCode",merchantOrderDTO.getMerchantCode()); - MerchantBaseInfo baseInfo= merchantBaseInfoMapper.selectOne(baseQueyWrapper); - MsgException.checkNull(baseInfo,"商户基本信息错误"); + QueryWrapper baseQueyWrapper = new QueryWrapper<>(); + baseQueyWrapper.eq("merchantCode", merchantOrderDTO.getMerchantCode()); + MerchantBaseInfo baseInfo = merchantBaseInfoMapper.selectOne(baseQueyWrapper); + MsgException.checkNull(baseInfo, "商户基本信息错误"); - - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.eq("merchant_code",merchantOrderDTO.getMerchantCode()); - queryWrapper.eq("channel","5"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("merchant_code", merchantOrderDTO.getMerchantCode()); + queryWrapper.eq("channel", "5"); queryWrapper.eq("user_no", LaKalaInterfaceImpl.userNo); - MerchantBackLkl merchantBackLkl=merchantBackLklMapper.selectOne(queryWrapper); - MsgException.checkNull(merchantBackLkl,"进件信息不存在"); - - - - - - + MerchantBackLkl merchantBackLkl = merchantBackLklMapper.selectOne(queryWrapper); + MsgException.checkNull(merchantBackLkl, "进件信息不存在"); JSONObject obj = new JSONObject(6); - String req_time= DateUtils.getSdfTimes(); + String req_time = DateUtils.getSdfTimes(); Long order_amt = new BigDecimal(order.getConsumeFee()).multiply(new BigDecimal(100)).longValue(); - String body="{\n" + + String body = "{\n" + "\t\"req_data\": {\n" + - "\t\t\"merchant_no\": \""+merchantBackLkl.getExternalCustomerNo()+"\",\n" + - "\t\t\"term_no\": \""+merchantBackLkl.getTermNos()+"\",\n" + - "\t\t\"out_trade_no\": \""+order.getOrderNumber()+"\",\n" + - "\t\t\"total_amount\": \""+order_amt+"\",\n" + - "\t\t\"subject\": \""+baseInfo.getMccName()+"\",\n" + + "\t\t\"merchant_no\": \"" + merchantBackLkl.getExternalCustomerNo() + "\",\n" + + "\t\t\"term_no\": \"" + merchantBackLkl.getTermNos() + "\",\n" + + "\t\t\"out_trade_no\": \"" + order.getOrderNumber() + "\",\n" + + "\t\t\"total_amount\": \"" + order_amt + "\",\n" + + "\t\t\"subject\": \"" + baseInfo.getMccName() + "\",\n" + "\t\t\"acc_busi_fields\": {},\n" + - "\t\t\"notify_url\": \""+lakalaConfig.getCallBackUrl()+"\",\n" + + "\t\t\"notify_url\": \"" + lakalaConfig.getCallBackUrl() + "\",\n" + "\t\t\"location_info\": {\n" + - "\t\t\t\"request_ip\": \""+order.getIp()+"\"\n" + + "\t\t\t\"request_ip\": \"" + order.getIp() + "\"\n" + "\t\t},\n" + - "\t\t\"auth_code\": \""+merchantOrderDTO.getAuthCode()+"\"\n" + + "\t\t\"auth_code\": \"" + merchantOrderDTO.getAuthCode() + "\"\n" + "\t},\n" + - "\t\"out_org_code\": \""+lakalaConfig.getAppid()+"\",\n" + + "\t\"out_org_code\": \"" + lakalaConfig.getAppid() + "\",\n" + "\t\"version\": \"3.0\",\n" + - "\t\"req_time\": "+req_time+"\n" + + "\t\"req_time\": " + req_time + "\n" + "}"; - - - - - - - String response=lklPayService.req(body,"api/v3/labs/trans/micropay"); - if(ObjectUtil.isNotEmpty(response)){ - JSONObject object= JSON.parseObject(response); - if(object.containsKey("code")&&"BBS10000".equals(object.get("code"))){ - obj.put("code",ResultCode.TRANSUNKNOW.code()); - obj.put("msg","用户支付中"); - obj.put("channelOrderNo",object.getJSONObject("resp_data").get("trade_no")); - obj.put("transNo",object.getJSONObject("resp_data").get("log_no")); - obj.put("payStatus","1"); + String response = lklPayService.req(body, "api/v3/labs/trans/micropay"); + if (ObjectUtil.isNotEmpty(response)) { + JSONObject object = JSON.parseObject(response); + if (object.containsKey("code") && "BBS10000".equals(object.get("code"))) { + obj.put("code", ResultCode.TRANSUNKNOW.code()); + obj.put("msg", "用户支付中"); + obj.put("channelOrderNo", object.getJSONObject("resp_data").get("trade_no")); + obj.put("transNo", object.getJSONObject("resp_data").get("log_no")); + obj.put("payStatus", "7"); return obj; - }else if(object.containsKey("code")&&"BBS00000".equals(object.get("code"))){ - obj.put("code",ResultCode.SUCCESS.code()); - obj.put("msg","成功"); - obj.put("channelOrderNo",object.getJSONObject("resp_data").get("trade_no")); - obj.put("transNo",object.getJSONObject("resp_data").get("log_no")); - obj.put("payStatus","1"); - obj.put("payTime",DateUtils.convertDate(object.getJSONObject("resp_data").getString("trade_time"))); + } else if (object.containsKey("code") && "BBS00000".equals(object.get("code"))) { + obj.put("code", ResultCode.SUCCESS.code()); + obj.put("msg", "成功"); + obj.put("channelOrderNo", object.getJSONObject("resp_data").get("trade_no")); + obj.put("transNo", object.getJSONObject("resp_data").get("log_no")); + obj.put("payStatus", "1"); + obj.put("payTime", DateUtils.convertDate(object.getJSONObject("resp_data").getString("trade_time"))); return obj; - }else { - obj.put("code",ResultCode.FAIL.code()); - obj.put("msg",object.get("msg")); + } else { + obj.put("code", ResultCode.FAIL.code()); + obj.put("msg", object.get("msg")); return obj; } } - obj.put("code",ResultCode.FAIL.code()); - obj.put("msg","失败"); + obj.put("code", ResultCode.FAIL.code()); + obj.put("msg", "失败"); return obj; } @@ -179,19 +283,85 @@ public class LkLPayServiceImpl implements PayService { @Override public Map getUnionInfo(String userAuthCode, String paymentApp, String merchantId) throws Exception { Map result = new HashMap<>(); -// JSONObject reqData = new JSONObject(2); -// Map stringObjectMap=lklPayService.authUserId(userAuthCode, paymentApp); -// reqData.put("data",stringObjectMap.get("userId")); -// reqData.put("userAuthCode",userAuthCode); -// reqData.put("appUpIdentifier",paymentApp); -// result.put("data",reqData); -// result.put("code","1"); -// result.put("msg","获取成功"); + String req_time = DateUtils.getSdfTimes(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("merchant_code", merchantId); + queryWrapper.eq("channel", "5"); + MerchantBackLkl merchantBackLkl = merchantBackLklMapper.selectOne(queryWrapper); + MsgException.checkNull(merchantBackLkl, "商户基本信息不完整"); + + String body = "{\n" + + "\"ver\":\"1.0.0\",\n" + + "\"timestamp\":\"" + System.currentTimeMillis() + "\",\n" + + "\"reqId\":\"" + req_time + "\",\n" + + "\"reqData\":{\n" + + "\"mercId\":\"" + merchantBackLkl.getExternalCustomerNo() + "\",\n" + + "\"termNo\":\"" + merchantBackLkl.getTermNos() + "\",\n" + + "\"authCode\":\"" + userAuthCode + "\",\n" + + "\"tradeCode\":\"030304\"\n" + + "}\n" + + "}\n"; + String response = lklPayService.req(body, "api/v2/saas/query/wx_openid_query"); + if (ObjectUtil.isNotEmpty(response)) { + JSONObject object = JSONObject.parseObject(response); + if (object.containsKey("retCode") && "BBS00000".equals(object.getString("retCode"))) { + + JSONObject reqData = new JSONObject(2); + reqData.put("data", object.getJSONObject("respData").getString("openId")); + reqData.put("userAuthCode", userAuthCode); + reqData.put("appUpIdentifier", paymentApp); + result.put("data", reqData); + result.put("code", "1"); + result.put("msg", "获取成功"); + } + } + result.put("code","0"); + result.put("msg", "获取失败"); return result; } + + @Setter(onMethod_ = {@Autowired, @Lazy}) + private MerchantOrderService merchantOrderService; + @Override public Object payNotifyCallBack(Map params) { + + Map result = new HashMap<>(2); + result.put("code", "fail"); + result.put("msg", "失败"); + + String trade_no = params.get("trade_no"); + String ordNo = params.get("out_trade_no"); + + String acc_trade_no = params.get("acc_trade_no"); + + String payTime = params.get("trade_time"); + + String bizCode = params.get("trade_status"); + + String buyerId = params.get("user_id1"); + if ("SUCCESS".equals(bizCode)) { + QueryWrapper queryWrapper = new QueryWrapper().eq("orderNumber", ordNo); + + MerchantOrder order = merchantOrderService.getOne(queryWrapper); + if (order == null) { + log.error("====================>【拉卡拉】支付成功回调订单号查询,查询的订单为空:订单号:{}<====================", ordNo); + return YsConfig.RESULT_SUCCESS_CODE; + } + Date payDate = DateUtils.parse(payTime, "yyyy-MM-dd HH:mm:ss"); + order.setTransDt(payDate); + order.setTransNo(trade_no); + order.setThirdTransNo(acc_trade_no); + merchantOrderService.updateOrderAndCreateProfit(order); + result.put("code", "success"); + result.put("msg", "成功"); + return result; + + } + + return null; } diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LklPayService.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LklPayService.java index a3691d8..a485877 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LklPayService.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/klk/service/LklPayService.java @@ -78,28 +78,7 @@ public class LklPayService { public JSONObject tradePay(MerchantOrder order, MerchantChannelStatus channel, MerchantBaseInfo merchant){ - String req_time= DateUtils.getSdfTimes(); - - - - - - String body="{\n" + - " \"req_time\": \""+req_time+"\",\n" + - " \"version\": \"3.0\",\n" + - " \"req_data\": {\n" + - " \"merchant_no\": \"822290070111135\",\n" + - " \"term_no\": \"29034705\",\n" + - " \"out_trade_no\": \"FD660E1FAA3A4470933CDEDAE1EC1D8E\",\n" + - " \"auth_code\": \"135178236713755038\",\n" + - " \"total_amount\": \"123\",\n" + - " \"location_info\": {\n" + - " \"request_ip\": \"10.176.1.192\",\n" + - " \"location\": \"+37.123456789,-121.123456789\"\n" + - " }\n" + - " }\n" + - "}"; return new JSONObject(); } diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchant/impl/MerchantServiceImpl.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchant/impl/MerchantServiceImpl.java index 591d91d..dabe05b 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchant/impl/MerchantServiceImpl.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchant/impl/MerchantServiceImpl.java @@ -12,6 +12,7 @@ import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.exception.PayRiskException; import cn.pluss.platform.fans.FansService; import cn.pluss.platform.ipLocation.IpLocationService; +import cn.pluss.platform.klk.service.LkLPayServiceImpl; import cn.pluss.platform.klk.service.LklPayService; import cn.pluss.platform.leshua.LeshuaSignature; import cn.pluss.platform.mapper.*; @@ -146,6 +147,8 @@ public class MerchantServiceImpl implements MerchantService { @Setter(onMethod_ = {@Autowired, @Lazy}) private LklPayService lklPayService; + @Setter(onMethod_ = {@Autowired, @Lazy}) + LkLPayServiceImpl lkLPayServiceImpl; @Override @@ -425,7 +428,7 @@ public class MerchantServiceImpl implements MerchantService { result = ysPayOldService.tradePay(order, channel,merchant); }else if(channel.getChannel()==5){ //拉卡拉的主扫接口 - result=lklPayService.tradePay(order,channel,merchant); + result=lkLPayServiceImpl.tradePay(order,channel,merchant); } else { MsgException.throwException("未知通道"); @@ -1404,7 +1407,7 @@ public class MerchantServiceImpl implements MerchantService { unionInfo = ysPayOldService.getUnionInfo(userAuthCode, payMentApp,null); }else if(channel.getChannel()==5){ //拉卡拉的被扫接口 - lklPayService.tradePay(orderAmt,channel,auth_code,IpUtils.getIpAddr(request),payMentApp); +// lklPayService.tradePay(orderAmt,channel,auth_code,IpUtils.getIpAddr(request),payMentApp); } else { diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java index 00b22f9..e21a87d 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/merchantOrder/impl/MerchantOrderServiceImpl.java @@ -20,6 +20,7 @@ import cn.pluss.platform.enums.UserRoleEnum; import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.klk.service.LkLPayServiceImpl; import cn.pluss.platform.klk.service.LklPayService; +import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl; import cn.pluss.platform.mapper.*; import cn.pluss.platform.memberOrder.MemberOrderService; import cn.pluss.platform.merchant.MerchantCashPlaceService; @@ -2347,6 +2348,37 @@ public class MerchantOrderServiceImpl extends ServiceImpl 1000.0d){ + order.setChannelRate(YsOldConstants.CREDIT_DEBIT_CARD_BANK_RATE_LARGE.multiply(new BigDecimal(10000))); + order.setChannelFee(new BigDecimal(order.getConsumeFee().toString()).multiply(YsOldConstants.CREDIT_DEBIT_CARD_BANK_RATE_LARGE).setScale(2,BigDecimal.ROUND_HALF_UP)); + } + orderPrefix = "LKL_Y_"; + order.setPayTypeCode(Constant.PAY_TYPE_YSFPAY); + order.setPayTypeName(Constant.PAY_TYPE_NAME_YSFPAY); + } + } + break; default: throw new MsgException("无效的通道"); } diff --git a/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/MerchantController.java b/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/MerchantController.java index 1784499..f52fd16 100644 --- a/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/MerchantController.java +++ b/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/MerchantController.java @@ -1690,10 +1690,12 @@ public class MerchantController { String ua = request.getHeader("User-Agent"); log.info("===================>【银联】标识,获取请求头部信息:{},==============", ua); int begin = ua.indexOf("UnionPay"); - String payMentApp = ua.substring(begin); - if (payMentApp.length() > 30) { - payMentApp = payMentApp.substring(0, 30); - } +// String payMentApp = ua.substring(begin); +// if (payMentApp.length() > 30) { +// payMentApp = payMentApp.substring(0, 30); +// } + + String payMentApp = null; try { Map unionInfo = null; //随行付 @@ -1707,7 +1709,7 @@ public class MerchantController { } else if (channel.getChannel() == 4) { unionInfo = ysPayOldService.getUnionInfo(userAuthCode, payMentApp, null); } else if (channel.getChannel() == 5) { - unionInfo = lkLPayService.getUnionInfo(userAuthCode, payMentApp, null); + unionInfo=lkLPayService.getUnionInfo(userAuthCode,payMentApp,channel.getMerchantCode()); } else { view.addObject("error", "未知通道类型"); return view; diff --git a/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/PayNotifyController.java b/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/PayNotifyController.java index 3a4fa81..5e7bd1a 100644 --- a/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/PayNotifyController.java +++ b/pluss-wap-page/src/main/java/cn/pluss/platform/controller/home/PayNotifyController.java @@ -1,5 +1,6 @@ package cn.pluss.platform.controller.home; +import cn.pluss.platform.klk.service.LkLPayServiceImpl; import cn.pluss.platform.pay.PayService; import cn.pluss.platform.ryx.pay.RyxPayService; import cn.pluss.platform.sxf.pay.SxfPayService; @@ -30,6 +31,10 @@ public class PayNotifyController { @Setter(onMethod_ = {@Autowired, @Qualifier("ysPayService")}) private PayService ysPayService; + + @Setter(onMethod_ = {@Autowired, @Qualifier("lkLPayService")}) + private PayService lklPayService; + @Setter(onMethod_ = {@Autowired, @Lazy}) private SxfPayService sxfPayService; @@ -58,4 +63,17 @@ public class PayNotifyController { log.info("【瑞银信】异步回调开始,【瑞银信】回调参数:{}<=====================",JSONObject.toJSONString(params)); return (String) ryxPayService.payNotifyCallBack(params); } + + + @RequestMapping(value = "/lklCallBack",method = RequestMethod.POST) + public String lklCallBack(@RequestBody Map params) { + log.info("【拉卡拉】异步回调开始,【拉卡拉】回调参数:{}<=====================",JSONObject.toJSONString(params)); + return String.valueOf(lklPayService.payNotifyCallBack(params)); + } + + + + + + }