无忧付

This commit is contained in:
GYJ 2024-12-03 18:04:18 +08:00
parent 95147c8fa4
commit 29fce0c40e
5 changed files with 159 additions and 0 deletions

View File

@ -0,0 +1,17 @@
package com.sqx.modules.pay.wuyou;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* @author GYJ
*/
@Data
public class BaseResp {
private Integer code;
private Integer status;
private String msg;
private OrderResp data;
@JSONField(name = "pay_status")
private String payStatus;
}

View File

@ -0,0 +1,15 @@
package com.sqx.modules.pay.wuyou;
/**
* @author GYJ
*/
public class Constants {
final static String APP_SECRET = "3MWSBmyKDeQDLXzoLr53tKVqiJv4Fm0KdsEhbpXW9YWvh35VgozL5S3rpUz4EjSb";
final static String MERCHANT_ID = "100360";
final static String BASE_URL = "http://47.113.117.120";
final static String PAY_URL = BASE_URL + "/api/order";
final static String QUERY_URL = BASE_URL + "/api/queryOrder";
}

View File

@ -0,0 +1,36 @@
package com.sqx.modules.pay.wuyou;
import com.alibaba.druid.util.Utils;
import java.util.HashMap;
import java.util.Map;
import static com.sqx.modules.pay.wuyou.Constants.APP_SECRET;
/**
* 无忧支付 签名加密
* @author GYJ
*/
public class Encrypt {
public static String getParamsSign(Map<String, Object> params) {
// 将参数按照key=value的格式拼接在一起 key按照字典序排序
StringBuilder sb = new StringBuilder();
params.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> {
sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
});
sb.append("key=").append(APP_SECRET);
String signStr = sb.toString();
System.out.println("signStr: " + signStr);
return Utils.md5(signStr).toUpperCase();
}
public static void main(String[] args) {
Map<String, Object> params = new HashMap<>();
params.put("a", "1");
params.put("b", "2");
String sign = getParamsSign(params);
System.out.println(sign);
}
}

View File

@ -0,0 +1,29 @@
package com.sqx.modules.pay.wuyou;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* @author GYJ
*/
@Data
public class OrderResp {
@JSONField(name = "mch_id")
private String mchId;
@JSONField(name = "out_trade_no")
private String outTradeNo;
private Double total;
private String type;
// 如果支付订单则返回订单创建时间如果是查询订单则返回订单支付时间
private long timestamp;
@JSONField(name = "qr_url")
private String qrUrl;
@JSONField(name = "h5_url")
private String h5Url;
}

View File

@ -0,0 +1,62 @@
package com.sqx.modules.pay.wuyou;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* @author GYJ
*/
public class WuyouPay {
public static BaseResp payOrder(String orderNo, String amount, String userAgent) {
Map<String, Object> params = getBaseParams();
params.put("out_trade_no", orderNo);
params.put("total", amount);
String sign = Encrypt.getParamsSign(params);
params.put("sign", sign);
String body = request(Constants.PAY_URL, params, userAgent);
return JSONObject.parseObject(body, BaseResp.class);
}
private static BaseResp queryOrder(String orderNo, String amount, String userAgent) {
Map<String, Object> params = getBaseParams();
params.put("out_trade_no", orderNo);
params.put("total", amount);
String sign = Encrypt.getParamsSign(params);
params.put("sign", sign);
String body = request(Constants.QUERY_URL, params, userAgent);
return JSONObject.parseObject(body, BaseResp.class);
}
private static Map<String, Object> getBaseParams() {
Map<String, Object> params = new HashMap<>();
params.put("mch_id", Constants.MERCHANT_ID);
params.put("timestamp", System.currentTimeMillis() / 1000);
params.put("type", "6001");
params.put("notify_url", Constants.BASE_URL + "/api/notify");
params.put("is_code", "1");
return params;
}
private static String request(String url, Map<String, Object> params, String userAgent) {
String body = HttpRequest.post(url)
.header("Content-Type", "application/x-www-form-urlencoded")
.header("User-Agent", userAgent)
.body(JSONObject.toJSONString(params))
.execute()
.body();
return body;
}
public static void main(String[] args) {
payOrder("20221118123456791", "0.1", "Mozilla/5.0");
}
}