|
|
|
@ -1,13 +1,14 @@ |
|
|
|
package com.base.springcloud.service.imp; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.base.springcloud.bo.CodePayBO; |
|
|
|
import com.base.springcloud.bo.OrderBO; |
|
|
|
import com.base.springcloud.bo.RefundBO; |
|
|
|
import com.base.springcloud.constant.PaymentConstant; |
|
|
|
import com.base.springcloud.entity.Order; |
|
|
|
import com.base.springcloud.entity.WxpayRefundVo; |
|
|
|
import com.base.springcloud.entity.WxpayRefundVo.WxRefundAmountVo; |
|
|
|
import com.base.springcloud.entity.WxpayTradeVo; |
|
|
|
import com.base.springcloud.entity.WxpayTradeVo.WxTradeAmountVo; |
|
|
|
import com.base.springcloud.service.WecPaymentService; |
|
|
|
import com.base.springcloud.util.DateUtil; |
|
|
|
import com.base.springcloud.util.DecimalUtil; |
|
|
|
@ -16,15 +17,14 @@ import com.fasterxml.jackson.databind.JsonNode; |
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode; |
|
|
|
import com.hisun.iposm.HiCASignUtil2; |
|
|
|
import com.hisun.iposm.HiiposmUtil; |
|
|
|
import lombok.SneakyThrows; |
|
|
|
import org.apache.commons.lang.StringUtils; |
|
|
|
import org.apache.commons.lang.text.StrBuilder; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Optional; |
|
|
|
|
|
|
|
@Service |
|
|
|
@ -133,12 +133,10 @@ public class WecPaymentServiceImp implements WecPaymentService { |
|
|
|
* 微信Native支付 |
|
|
|
* @param orderBO |
|
|
|
*/ |
|
|
|
@SneakyThrows |
|
|
|
@Override |
|
|
|
public String wecNativePay(OrderBO orderBO) { |
|
|
|
Order order = Optional.ofNullable(orderBO).map(o->orderBO.getOrder()).orElse(null); |
|
|
|
if(order == null) { |
|
|
|
// TODO 抛出业务异常
|
|
|
|
} |
|
|
|
Order order = orderBO.getOrder(); |
|
|
|
WxpayTradeVo wxpayTradeVo = new WxpayTradeVo(); |
|
|
|
wxpayTradeVo.setAppid(orderBO.getAppId()); |
|
|
|
wxpayTradeVo.setMchid(orderBO.getMchId()); |
|
|
|
@ -146,18 +144,17 @@ public class WecPaymentServiceImp implements WecPaymentService { |
|
|
|
wxpayTradeVo.setOut_trade_no(order.getOrderNo()); |
|
|
|
// FIXME 待定为商户系统||RBS系统回调接收
|
|
|
|
wxpayTradeVo.setNotify_url("https://www.weixin.qq.com/wxpay/pay.php"); |
|
|
|
WxpayTradeVo.WxTradeAmountVo wxTradeAmountVo = new WxpayTradeVo.WxTradeAmountVo(); |
|
|
|
WxTradeAmountVo wxTradeAmountVo = new WxTradeAmountVo(); |
|
|
|
wxTradeAmountVo.setTotal(order.getOrderAmount()); |
|
|
|
wxpayTradeVo.setAmount(wxTradeAmountVo); |
|
|
|
ObjectNode objectNode = WxpayUtils.getWxpay( |
|
|
|
JSONObject jsonObject = WxpayUtils.getWxpay( |
|
|
|
wxpayTradeVo, |
|
|
|
PaymentConstant.NATIVE, |
|
|
|
orderBO.getMchPrivateKey(), |
|
|
|
orderBO.getCertificate(), |
|
|
|
orderBO.getSerialNo()); |
|
|
|
logger.info("Native支付订单 :{} 接收响应数据 :{}",order.getOrderNo(),objectNode.toString()); |
|
|
|
JsonNode jsonNode = objectNode.get("code_url"); |
|
|
|
return jsonNode.toString(); |
|
|
|
logger.info("Native支付订单 :{} 接收响应数据 :{}",order.getOrderNo(),jsonObject.toString()); |
|
|
|
return jsonObject.get("code_url").toString(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -169,7 +166,7 @@ public class WecPaymentServiceImp implements WecPaymentService { |
|
|
|
WxpayRefundVo wxpayRefundVo = new WxpayRefundVo(); |
|
|
|
wxpayRefundVo.setTransaction_id(refundBO.getOrigOrderNo()); |
|
|
|
wxpayRefundVo.setReason(refundBO.getReason()); |
|
|
|
WxRefundAmountVo wxRefundAmountVo = new WxRefundAmountVo(); |
|
|
|
WxpayRefundVo.WxRefundAmountVo wxRefundAmountVo = new WxpayRefundVo.WxRefundAmountVo(); |
|
|
|
wxRefundAmountVo.setTotal(refundBO.getOrderAmount()); |
|
|
|
wxRefundAmountVo.setRefund(refundBO.getRefundAmount()); |
|
|
|
wxpayRefundVo.setNotify_url(refundBO.getNotifyUrl()); |
|
|
|
@ -186,35 +183,6 @@ public class WecPaymentServiceImp implements WecPaymentService { |
|
|
|
public void codePay(CodePayBO codePayBO) { |
|
|
|
} |
|
|
|
|
|
|
|
/*public static void main(String[] args) { |
|
|
|
CodePayBO codePayBO = new CodePayBO(); |
|
|
|
codePayBO.setAppId("wxa91984b310053c3d"); |
|
|
|
codePayBO.setMchId("1610494969"); |
|
|
|
codePayBO.setDeviceInfo("sb0001"); |
|
|
|
codePayBO.setSpbillCreateIp("8.8.8.8"); |
|
|
|
codePayBO.setBody("Image形象店-深圳腾大-QQ公仔"); |
|
|
|
codePayBO.setOrderNo(DateUtil.getDateString(25)); |
|
|
|
codePayBO.setAmount(new BigDecimal(1)); |
|
|
|
codePayBO.setMchPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCVVy4CUrRTPJZ49vuK9Tr5Rurd3dE3eiz7lsnWPAYgZtdWsC6TORUaP0Px/ZMtaJYNURMpVKC5koXZSPTNr9ROHa6B6IX4lTMERzHgiVzGIqLlE/twBYXbSuh8yXy3k59adFDYZZNN+2THWdst2Ao7pD+GXlDby8gfF67ax9CbWq5yyx6MYMKHwOVe3H/ON2pcmZR6I809Lwa4zfmUyOez1U5pwNiwv2cyorM5UXzVMsvK5jfIKDaskNVIV/+ax15tf+OQ/6t9iaWzRAV1zeeJd/TuVVGB/QU5slg5xyIwaqKzJM1H3n64er5QNRKpU31Ru0dHzJTW7ljtILWCQZubAgMBAAECggEAVga6QixSJACqzVO44vsQ1be8Y8H7WvHOJ79c1UQOY2vab91ddwFS3qPDCAsCVQ4CIfmqCAzv6PY2lEwqeLHooncGp17Cjcekc7pvSODXyGr7Wup/1K/Zw9EKy5dleHpZOUn3qDAbArjl/NAOKgJhIqoizcxW18YzqXWDDBQ+Xr6kqmjWXWZ3Kj6ghZNoSkdoynTQ7Ti0C2lq0UeXg611ea6Zs3fgjOgYEBMSSI7v4zE/6RN7jFGlZe5Z1NgO15rl8r3YdDnXTCIpEiTV+yHsDkluqJquB0E1Xrr1AXl9AGMuq6lYEB4houJUPtGgQ6bLs93MrnyzgnGTLbLSnXDNwQKBgQDD6Z+0xZ8lApXZylI2N4zuSrCsi6wB6Qp/64jr+C7GAdmC7w9WRoIlIF7Q2s9p5ulGyxD2hAbrajY5CsjV3S0uIDAaULoG3dw5vxYFEdvcKgxphf8j0gcajUnPGzCxF5vm29B9D+o1mrylr04dtWHlP0KpKwQ6HiTX7if+DcXMhwKBgQDDJOFpoCcVdZ0clfpvJPZpgRTu3I4HFTs27elCQ98g1UWav/VY7729YLAKU27d6lG+iqH1X5lVu2lr/du8wdJoMbpBPD34V+V6ye8gV9lCG7wSCgsNnPqM/HoyBSe6+JUgwG+vCRh1KMhNBmqEMCqPRAtbW3wfDdCShfTBHAjxTQKBgCjYrNOj4Gp2/4dJB5sGOfv01qEi/dnoHKhPE10fgaEHAbKq5Se3y6qx9RLWjCgoXLrF2+OJ42dx3ZxHA1iTpLfZPi4+ZorH9wKTNKQZ9R0SJ0RZC7kMMS74BkuH/77sjTS03+MzTkGe4XYp9r968c46QkvDDD6Ryly66tutQ3BBAoGBAJiE/MDncWSuVit/dQrlYso3HztJmqAikfNuoz8tePlad1pp6cKnLi8ToMORTjeX6mf4RnlXTKrbHZxP/yxaeK8DHsXZ5b1yRWNg7MrknmOy9Z1LyDPNm24R7xelO9ZAb533idLOUxVO2K6K8zl5w+nRjubKbAqBa6D5ncBIvxyJAoGAP9cSun39cFuzjdTaWojmbQMM8k5pyvFWr2UdY50GFrFCdajkAxqoTLkFEUP5fx8InIU/X9aSbVE6Va5fdOKiifbx5KaSKFrH/xZS6XykAbIkWDWqOPMovHoMWj3lGO96wDInry9YZNy7JA8AuZsLSBUA7Xb33FqZ2WU5ePeFOAA="); |
|
|
|
codePayBO.setAuthCode("135276524069149568"); |
|
|
|
|
|
|
|
Map<String, String> params = MicroPayModel |
|
|
|
.builder() |
|
|
|
.appid(codePayBO.getAppId()) |
|
|
|
.mch_id(codePayBO.getMchId()) |
|
|
|
.device_info(codePayBO.getDeviceInfo()) |
|
|
|
.nonce_str(WxPayKit.generateStr()) |
|
|
|
.body(codePayBO.getBody()) |
|
|
|
//.attach(codePayBO.getAttach())
|
|
|
|
.out_trade_no(codePayBO.getOrderNo()) |
|
|
|
.total_fee(codePayBO.getAmount().toPlainString()) |
|
|
|
.spbill_create_ip(codePayBO.getSpbillCreateIp()) |
|
|
|
.auth_code(codePayBO.getAuthCode()) |
|
|
|
.build() |
|
|
|
.createSign(codePayBO.getMchPrivateKey(), SignType.HMACSHA256); |
|
|
|
System.out.println(WxPayApi.microPay(false,params)); |
|
|
|
} |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 订单状态查询 |
|
|
|
* |
|
|
|
@ -224,50 +192,45 @@ public class WecPaymentServiceImp implements WecPaymentService { |
|
|
|
@Override |
|
|
|
public Boolean orderResult(OrderBO orderBO) { |
|
|
|
Order order = orderBO.getOrder(); |
|
|
|
String orderId = order.getOrderNo(); |
|
|
|
String req_url = "https://ipos.10086.cn/cps/cmpayService"; |
|
|
|
String type = "AggregQueryCPS"; |
|
|
|
String version = "1.0.0"; |
|
|
|
String reserved = order.getReserved(); |
|
|
|
String signType = PaymentConstant.SIGN_TYPE; |
|
|
|
String requestId = DateUtil.getDateString(25); |
|
|
|
String merchantId = order.getMchId(); |
|
|
|
String privateKey = orderBO.getMchPrivateKey(); |
|
|
|
String characterSet = PaymentConstant.CHARACTER_SET; |
|
|
|
|
|
|
|
StringBuilder signData = new StringBuilder(); |
|
|
|
signData.append(merchantId); |
|
|
|
signData.append(requestId); |
|
|
|
signData.append(signType); |
|
|
|
signData.append(type); |
|
|
|
signData.append(version); |
|
|
|
signData.append(orderId); |
|
|
|
signData.append(reserved); |
|
|
|
try { |
|
|
|
StrBuilder requestParam = new StrBuilder(); |
|
|
|
HiCASignUtil2 rsa = new HiCASignUtil2(privateKey, "111"); |
|
|
|
requestParam.append("hmac=").append(rsa.sign(signData.toString())); |
|
|
|
requestParam.append("&characterSet=").append(PaymentConstant.CHARACTER_SET); |
|
|
|
requestParam.append("&merchantId=").append(merchantId); |
|
|
|
requestParam.append("&requestId=").append(requestId); |
|
|
|
requestParam.append("&signType=").append(signType); |
|
|
|
requestParam.append("&type=").append(type); |
|
|
|
requestParam.append("&version=").append(version); |
|
|
|
requestParam.append("&orderId=").append(orderId); |
|
|
|
requestParam.append("&reserved1=").append(reserved); |
|
|
|
|
|
|
|
HiiposmUtil util = new HiiposmUtil(); |
|
|
|
String res = util.sendAndRecv(req_url, requestParam.toString(), characterSet); |
|
|
|
logger.info("订单: {} 查询参数响应: {}",order.getOrderNo(),res); |
|
|
|
if(util.getValue(res, "status").equals("SUCCESS")){ |
|
|
|
return true; |
|
|
|
String url = PaymentConstant.WX_ORDER_QUERY_URL + order.getOrderNo() + "?mchid=" + order.getMchId(); |
|
|
|
logger.info("order_result_url : {}",url); |
|
|
|
return WxpayUtils.queryWxOrder(url,orderBO.getMchId(),orderBO.getMchPrivateKey(),orderBO.getCertificate(),orderBO.getSerialNo()); |
|
|
|
} |
|
|
|
return false; |
|
|
|
} catch (IOException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
OrderBO orderBO = new OrderBO(); |
|
|
|
orderBO.setAppId("wxe61ee6c21345d74d"); |
|
|
|
orderBO.setMchId("1537100771"); |
|
|
|
orderBO.setMchPrivateKey("MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDU7qXRin2MGdDGPQLgMCMlAWccseGXDz99Ulu0KL3u7QBH0eJZoxDpHGqE/sMtQnDUD446Khi3AZgd2xwWOoshkleSOkNd20+tVaq91vw/lJEF4kv4DbFFNLObs1kBqGYZi4HUrbyRH1UqFujImJXDvSOKd53SPjEPs6rRFDwXAQaEQEftwQVvv6ycHc7symgYL486KCVZLm2yfsMA0fu/MiSTIeZCMR1OEx+YK61K4Rzv6rdE8Yf6o2Rwl0xWqcrm2C2RFLgGqmrYmxscgI6ufEEdbWO0YkqFQndcVhT8vooTYdwShrB5rp7TDs3G3qQMzqQpfi2J/gWsWT1S4ZnLAgMBAAECggEAUavLfCijaQZJ1o92N+kewcXc99uejGMz1eyt8dciqq7KycFOEVWDWfYlQSe6UvTF9ACXa+XTnvYEk4cEKd6AmPrZjeO9DRXeZLyUBcac8AIa8efPfbA6yzGgplrPC9y8dJXW0W1mAz/CWad51972qqI0LJsetJJYHQ6ruRAK0ENH7LUAHAzrSbD96y+YuXB6n2x7GQZF1e8PCzVdpNEsDfEwNBB19CyLpCIW3JQMZvVcWUv+8MJwdzvNprwkDKeMC0F/p7R+ErZL1z1pfi9aMV2DzQ25qKW758juTTnGf6z+tTND+cQoeMh1GxqK3CuUpz1Y7lUctF2jyP/6EPctWQKBgQD5m4ZaiW+ucQ1hEkxW4T9TPugyHxvNBtOQvs3F5kin2QVeIkY9ssGHmTx5I5r63sDQylSQRildaIX6EAxYzoy5AHtAKiltiB3ppLdQxX7adoSWNORZ/pjd/sNKTAZtqd0IBNtjuI3y/BxYrqii7cUC/aWv+gxHFUjoyG01aU8mHwKBgQDaYqwrm0gRmpKlhigoXRYGEo24kJHsGjXnpxy9Klq3S7A9zAfEF4WqfuAM3vXbUm8RrDU045N4kyakwfJNewVSzkL9N0vcGHqoB5DNWSrS6qmIZgUAuU55iRXR16Kluv0k3pF1Ar4gtJuDHpEvjlqV8J4Z0bWNrOkXZ5sjIAje1QKBgGJDX7j0sgqyZtn4IiVxt0RGV5KjvIYSUeeBtfBan++z9/D+/Tf8z0Nah/wIkFKCrtWDUZcah95F77hp6PJtHekWz26LKpP8Kgp41dHubeoDDl8zo1HqcLO0P51YII+7d1BY2SWA2iD2LxKab7j0ccKjqD6G6Z5yOqmpfZSxSH9xAoGAPqSVPIDzYFFVhXOBK2rgOWezDWEy6mXuVn/CJ6Txlqh4apGPHLmelvSD8k02eu4ffBNIw94P3ENhj1su1PjX4xPVdWsaMI05Cd/5sl3EgfHcJYsWHkoJb6VaA/J17lI/8QaC9OyPezQzc54eCWUtKNt3jnJwQK57wkHu51l2Ee0CgYBuqDJjYcw1xHYtA+hH/tTrU1t8arwdeoz0QN+Cj1DgGW6zY0WRyIcnl4M1v51bIyrluqpN4e0Dh2VVV0r1LAIlhvAzsz3alCIJzVTVaJXKAGwN9vMxRbnCdg1h+QzAeZ+VC1zLNzHKUPYsGEnH5Hig5mml1pZz4b6LSNDFG6VBqw=="); |
|
|
|
orderBO.setCertificate("MIID8DCCAtigAwIBAgIUbAm85GX1um+ESCWizOGXEoH6gnowDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsTFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3QgQ0EwHhcNMjExMTE2MDczNDUzWhcNMjYxMTE1MDczNDUzWjCBgTETMBEGA1UEAwwKMTUzNzEwMDc3MTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQLDCTlm5vlt53nm5vlkozmnLrmorDorr7lpIfmnInpmZDlhazlj7gxCzAJBgNVBAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTupdGKfYwZ0MY9AuAwIyUBZxyx4ZcPP31SW7Qove7tAEfR4lmjEOkcaoT+wy1CcNQPjjoqGLcBmB3bHBY6iyGSV5I6Q13bT61Vqr3W/D+UkQXiS/gNsUU0s5uzWQGoZhmLgdStvJEfVSoW6MiYlcO9I4p3ndI+MQ+zqtEUPBcBBoRAR+3BBW+/rJwdzuzKaBgvjzooJVkubbJ+wwDR+78yJJMh5kIxHU4TH5grrUrhHO/qt0Txh/qjZHCXTFapyubYLZEUuAaqatibGxyAjq58QR1tY7RiSoVCd1xWFPy+ihNh3BKGsHmuntMOzcbepAzOpCl+LYn+BaxZPVLhmcsCAwEAAaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEArtZJ2FICGrykPJziJxPjTaaA/nn//tXI6rUW9aSHe6atLWgduUDlBQjn8pckAeReuXF6J1D9u45iQY8fc5Mb5BAQsg4qC1zxoRINBNL5HVEf+9uolfJI2urw3cfwbAdrymMDUWc0xFZWgo5z3KFXso8ERb73j/5utbIqZ+C7MtesHs1Em5FRSZgX86wy9zDcbIMtw2LeHymQ3MV8C6cASwlBIJ/UptDieuHRr0FoUxkmtSN1POQRhhYVT2gaHpNOVHmrK6Tbd6nblQ70GdLH7kdb9LPr4kS0GXPz+Gvk8y15PKI02MFcNqJCuLJTpFlAf4gTwWule2Z5/1WlOF1+sA=="); |
|
|
|
orderBO.setSerialNo("6C09BCE465F5BA6F844825A2CCE1971281FA827A"); |
|
|
|
Order order1 = new Order(); |
|
|
|
order1.setGoodName("形象大公仔"); |
|
|
|
order1.setOrderNo("20220304112022"); |
|
|
|
order1.setOrderAmount(new BigDecimal(1)); |
|
|
|
orderBO.setOrder(order1); |
|
|
|
Order order = Optional.ofNullable(orderBO).map(o->orderBO.getOrder()).orElse(null); |
|
|
|
if(order == null) { |
|
|
|
// TODO 抛出业务异常
|
|
|
|
} |
|
|
|
return false; |
|
|
|
WxpayTradeVo wxpayTradeVo = new WxpayTradeVo(); |
|
|
|
wxpayTradeVo.setAppid(orderBO.getAppId()); |
|
|
|
wxpayTradeVo.setMchid(orderBO.getMchId()); |
|
|
|
wxpayTradeVo.setDescription(order.getGoodName()); |
|
|
|
wxpayTradeVo.setOut_trade_no(order.getOrderNo()); |
|
|
|
// FIXME 待定为商户系统||RBS系统回调接收
|
|
|
|
wxpayTradeVo.setNotify_url("https://www.weixin.qq.com/wxpay/pay.php"); |
|
|
|
WxpayTradeVo.WxTradeAmountVo wxTradeAmountVo = new WxpayTradeVo.WxTradeAmountVo(); |
|
|
|
wxTradeAmountVo.setTotal(order.getOrderAmount()); |
|
|
|
wxpayTradeVo.setAmount(wxTradeAmountVo); |
|
|
|
JSONObject objectNode = WxpayUtils.getWxpay( |
|
|
|
wxpayTradeVo, |
|
|
|
PaymentConstant.NATIVE, |
|
|
|
orderBO.getMchPrivateKey(), |
|
|
|
orderBO.getCertificate(), |
|
|
|
orderBO.getSerialNo()); |
|
|
|
System.out.println("Native支付订单 :{} " + order.getOrderNo() + " 接收响应数据 :{} "+ objectNode.toString()); |
|
|
|
System.out.println(objectNode.toString()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|