From dc19d70d896ba42b753f1106f3d9b819fe0ebc82 Mon Sep 17 00:00:00 2001 From: grimm <1769111741@qq.com> Date: Fri, 9 Aug 2024 15:36:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=8A=E5=8D=97=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VietnamGamotaRechargeController.java | 116 ++++++++++++ .../java/com/jmfy/paramBean/PaySdkEnum.java | 3 +- src/main/java/com/jmfy/util/HttpUtils.java | 169 ++++++++++++++++++ src/main/java/com/jmfy/util/JsonUtil.java | 1 - 4 files changed, 287 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/jmfy/controller/VietnamGamotaRechargeController.java create mode 100644 src/main/java/com/jmfy/util/HttpUtils.java diff --git a/src/main/java/com/jmfy/controller/VietnamGamotaRechargeController.java b/src/main/java/com/jmfy/controller/VietnamGamotaRechargeController.java new file mode 100644 index 0000000..b756234 --- /dev/null +++ b/src/main/java/com/jmfy/controller/VietnamGamotaRechargeController.java @@ -0,0 +1,116 @@ +package com.jmfy.controller; + +import com.google.gson.Gson; +import com.jmfy.paramBean.PaySdkEnum; +import com.jmfy.util.HttpUtils; +import com.jmfy.util.JsonUtil; +import com.jmfy.util.MD5Util; +import net.sf.json.JSON; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.xml.sax.InputSource; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.StringReader; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@RestController +public class VietnamGamotaRechargeController { + private static final Logger LOGGER = LoggerFactory.getLogger(VietnamGamotaRechargeController.class); + private static final String apikey = "GMA202401-4B0C8B6C-C3B7290DEC0B"; + private static final String secretkey = "XAhRvf9ycmv6BJGTUJci"; + + @RequestMapping(value = "/GamotaCallback") + public String GamotaCallback(HttpServletRequest request) throws Exception { + return process(request,secretkey,apikey); + } + + public static String process(HttpServletRequest request,String appsecret,String md5key) throws Exception{ + JSONObject result = new JSONObject(); + result.put("error_code",1); + result.put("messsage","Transaction fail"); + + HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); + if (parameterMap.isEmpty()) { + LOGGER.error("request data is null"); + result.put("messsage", "request data is null"); + return result.toString(); + } + + Map map = verifyOrder(parameterMap); + if (map == null || map.isEmpty()){ + LOGGER.error("verify order is error"); + result.put("messsage", "verify order is error"); + return result.toString(); + } + LOGGER.info("越南gamota支付验证结果:{}",map); + int errorCode = Integer.parseInt(map.get("error_code")); + if (errorCode != 0){ + LOGGER.error("verify order is false"); + result.put("messsage", "verify order is false"); + return result.toString(); + } + Gson gson = new Gson(); + Map data = gson.fromJson(map.get("data"), Map.class); + String inserted = insertOrder(parameterMap, data); + if ("SUCCESS".equals(inserted)) { + result.put("error_code",0); + result.put("message","success"); + } + return result.toString(); + } + + public static Map verifyOrder(Map map) { + String url = "https://paygate.gamota.com/v1/services/check_transaction"; + Map parms = new HashMap<>(); + parms.put("transaction_id",map.get("transaction_id")); + try { + Gson gson = new Gson(); + String data = HttpUtils.doPost(url, parms); + LOGGER.info("越南gamota支付验证请求结果:{}",data); + return gson.fromJson(data, Map.class); + }catch (IOException e){ + LOGGER.error("越南gamota支付验证请求报错",e); + return null; + } + } + + /** + * + * @param params + * @param data + * 角色id_物品id_ccId_平台 + * @return + */ + public static String insertOrder(Map params, Map data) { + String roleId = params.get("role_id"); + String itemId = params.get("item_id"); + String type = data.get("type"); + String ccId = "0"; + String callbackInfo = roleId + "_" + itemId + "_" +ccId + "_" + type; + String orderNo = data.get("transaction_id"); + String amount = String.valueOf(Float.parseFloat(data.get("amount")) * 100); + Date time = new Date(System.currentTimeMillis()); + String s = PayLogic.initOrder(callbackInfo, orderNo, amount, time, callbackInfo, PaySdkEnum.GAMOTA); + if ("ORDER_IS_EXIST".equals(s)) { + return "SUCCESS"; + } + return s; + } + + public static void main(String[] args) { + String a = "{\"error_code\":0,\"message\":\"Charging successfully!\",\"data\":{\"transaction_id\":\"AP20102226662769G\",\"type\":\"GOOGLE\",\"amount\":\"1.99\",\"vendor\":\"\",\"currency\":\"USD\",\"target\":\"username:XuanXuXu|userid:2618078\",\"state\":\"4_637389746321354058_9_1_1603352647\",\"sandbox\":1,\"time\":\"22\\/10\\/2020 14:44:20 GMT+7\",\"product_id\":\"com.gunx.item1.199\"}}"; + Gson gson = new Gson(); + System.out.println(gson.fromJson(a, Map.class)); + } +} diff --git a/src/main/java/com/jmfy/paramBean/PaySdkEnum.java b/src/main/java/com/jmfy/paramBean/PaySdkEnum.java index eea6b41..afd6ade 100644 --- a/src/main/java/com/jmfy/paramBean/PaySdkEnum.java +++ b/src/main/java/com/jmfy/paramBean/PaySdkEnum.java @@ -22,7 +22,8 @@ public enum PaySdkEnum { YOUGU(12,"YOUGU"), FENGTI(13,"FENGTI"), U1GAME(14, "U1GAME"), - REBATES(15, "REBATES") + REBATES(15, "REBATES"), + GAMOTA(16, "GAMOTA") ; private int id; diff --git a/src/main/java/com/jmfy/util/HttpUtils.java b/src/main/java/com/jmfy/util/HttpUtils.java new file mode 100644 index 0000000..3ffb230 --- /dev/null +++ b/src/main/java/com/jmfy/util/HttpUtils.java @@ -0,0 +1,169 @@ +package com.jmfy.util; + +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONObject; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class HttpUtils { + + public static String doPost(String url, Map parms) throws IOException { + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url); + List nvps =getFromMap(parms); + httpPost.setEntity(new UrlEncodedFormEntity(nvps)); + CloseableHttpResponse response2 = httpclient.execute(httpPost); + + try { + HttpEntity entity = response2.getEntity(); + return EntityUtils.toString(entity); + } catch (IOException e) { + e.printStackTrace(); + return null; + } finally { + response2.close(); + } + } + + public static List getFromMap(Map parms){ + List nvps = new ArrayList(parms.size()); + for(Map.Entry item : parms.entrySet()){ + nvps.add(new BasicNameValuePair(item.getKey(), item.getValue())); + } + return nvps; + } + + + public static String httpGetRequest(String httpUrl){ + HttpURLConnection connection = null; + InputStream is = null; + BufferedReader br = null; + String result = null;// 返回结果字符串 + try { + // 创建远程url连接对象 + URL url = new URL(httpUrl); + // 通过远程url连接对象打开一个连接,强转成httpURLConnection类 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接方式:get + connection.setRequestMethod("GET"); + // 设置连接主机服务器的超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取远程返回的数据时间:60000毫秒 + connection.setReadTimeout(60000); + // 发送请求 + connection.connect(); + // 通过connection连接,获取输入流 + if (connection.getResponseCode() == 200) { + is = connection.getInputStream(); + // 封装输入流is,并指定字符集 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + // 存放数据 + StringBuffer sbf = new StringBuffer(); + String temp = null; + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + connection.disconnect();// 关闭远程连接 + } + return result; + } + + + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url + * 发送请求的 URL + * @param param + * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, JSONObject param) { + PrintWriter out = null; + BufferedReader in = null; + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + // 使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } + +} diff --git a/src/main/java/com/jmfy/util/JsonUtil.java b/src/main/java/com/jmfy/util/JsonUtil.java index 8ee0f27..683fdac 100644 --- a/src/main/java/com/jmfy/util/JsonUtil.java +++ b/src/main/java/com/jmfy/util/JsonUtil.java @@ -58,7 +58,6 @@ public class JsonUtil { String key = paramName; if (!StringUtils.checkIsEmpty(paramValue)) { key = paramName + "=" + paramValue; - } map.put(key, paramValue); LOGGER.info("parameter : {} ", key);