drew преди 6 години
родител
ревизия
fa3aab446e
променени са 2 файла, в които са добавени 166 реда и са изтрити 38 реда
  1. 50 38
      src/main/java/com/thmodel/servlet/PayServlet.java
  2. 116 0
      src/main/java/com/thmodel/util/IosVerifyUtil.java

+ 50 - 38
src/main/java/com/thmodel/servlet/PayServlet.java

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.thmodel.util.IosVerifyUtil;
 import net.sf.json.JSONObject;
 
 import com.thmodel.alipay.AliPay;
@@ -41,8 +42,8 @@ public class PayServlet extends HttpServlet {
 
     private static final long serialVersionUID = 1L;
 
-    private static PayService    payService    = new PayServiceImpl();
-    private static AliPay        alipay        = new AliPay();
+    private static PayService payService = new PayServiceImpl();
+    private static AliPay alipay = new AliPay();
     private static MemberinfoDao memberinfoDao = new MemberinfoDaoImpl();
     private static CashRecordDao cashRecordDao = new CashRecordDaoImpl();
 
@@ -65,15 +66,15 @@ public class PayServlet extends HttpServlet {
             if (action.equals("alipay")) {
 
                 System.out.println("================== ali pay action begin ==================");
-                int    memberpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("memberpk")));//会员pk
-                String abs      = CommentUtils.myToString(request.getParameter("abs"));//摘要
-                String intro    = CommentUtils.myToString(request.getParameter("intro"));//说明
+                int memberpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("memberpk")));//会员pk
+                String abs = CommentUtils.myToString(request.getParameter("abs"));//摘要
+                String intro = CommentUtils.myToString(request.getParameter("intro"));//说明
 
                 //支付宝参数
-                String body           = CommentUtils.myToString(request.getParameter("body"));
-                String subject        = CommentUtils.myToString(request.getParameter("subject"));
+                String body = CommentUtils.myToString(request.getParameter("body"));
+                String subject = CommentUtils.myToString(request.getParameter("subject"));
                 String timeoutExpress = CommentUtils.myToString(request.getParameter("timeoutexpress"));
-                String totalAmount    = CommentUtils.myToString(request.getParameter("totalamount"));
+                String totalAmount = CommentUtils.myToString(request.getParameter("totalamount"));
 
                 String outTradeNo = alipay.getAliPayOrderId();//订单号
 
@@ -97,9 +98,9 @@ public class PayServlet extends HttpServlet {
             //支付宝支付成功回调(修改状态为支付成功)
             else if (action.equals("alipaycallback")) {
 
-                int    pk      = Integer.parseInt(CommentUtils.myToString(request.getParameter("pk")));//充值记录pk
+                int pk = Integer.parseInt(CommentUtils.myToString(request.getParameter("pk")));//充值记录pk
                 String orderno = CommentUtils.myToString(request.getParameter("outtradeno"));//订单号wid
-                String result  = CommentUtils.myToString(request.getParameter("result"));//支付结果
+                String result = CommentUtils.myToString(request.getParameter("result"));//支付结果
 
                 String source = CommentUtils.myToString(request.getParameter("source"));//来源
 
@@ -110,7 +111,7 @@ public class PayServlet extends HttpServlet {
 
                 //查询
                 CashRecord cashRecord = cashRecordDao.findCashRecordOne(pk);
-                MemberInfo member     = memberinfoDao.findMemberinfoByPK(cashRecord.getMemberpk());
+                MemberInfo member = memberinfoDao.findMemberinfoByPK(cashRecord.getMemberpk());
                 resultJson.put("coin_a", member.getCoin_a());
 
                 if (flag) {
@@ -123,17 +124,17 @@ public class PayServlet extends HttpServlet {
 
             // 微信冲值
             else if (action.equals("doincash")) {
-                String PK       = CommentUtils.myToString(request.getParameter("PK"));
-                String Fee      = CommentUtils.myToString(request.getParameter("Fee"));
+                String PK = CommentUtils.myToString(request.getParameter("PK"));
+                String Fee = CommentUtils.myToString(request.getParameter("Fee"));
                 String Abstract = CommentUtils.myToString(request.getParameter("Abstract"));
-                String Intro    = CommentUtils.myToString(request.getParameter("Intro"));
-                String OpenID   = CommentUtils.myToString(request.getParameter("OpenID"));
+                String Intro = CommentUtils.myToString(request.getParameter("Intro"));
+                String OpenID = CommentUtils.myToString(request.getParameter("OpenID"));
             }
 
             //提现加载
             else if (action.equals("alipayoutcashload")) {
-                int                 modelpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("modelpk")));
-                Map<String, Object> map     = payService.aliPayOutCashLoad(modelpk);
+                int modelpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("modelpk")));
+                Map<String, Object> map = payService.aliPayOutCashLoad(modelpk);
 
                 if (map != null) {
                     resultJson.put("msg", Constants.success);
@@ -145,8 +146,8 @@ public class PayServlet extends HttpServlet {
 
             //支付宝提现信息修改
             else if (action.equals("alipayoutcashmodify")) {
-                int    modelpk  = Integer.parseInt(CommentUtils.myToString(request.getParameter("modelpk")));
-                String name     = CommentUtils.myToString(request.getParameter("name"));
+                int modelpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("modelpk")));
+                String name = CommentUtils.myToString(request.getParameter("name"));
                 String alipayid = CommentUtils.myToString(request.getParameter("alipayid"));
 
                 boolean flag = payService.aliPayOutCashModify(modelpk, name, alipayid);
@@ -161,14 +162,14 @@ public class PayServlet extends HttpServlet {
             //支付宝提现  提交申请
             else if (action.equals("alipayoutcash")) {
 
-                String modelpk  = CommentUtils.myToString(request.getParameter("modelpk"));
+                String modelpk = CommentUtils.myToString(request.getParameter("modelpk"));
                 String memberpk = CommentUtils.myToString(request.getParameter("memberpk"));
 
-                double fee     = Double.parseDouble(CommentUtils.myToString(request.getParameter("fee")));//提现金额
-                String abs     = CommentUtils.myToString(request.getParameter("abs"));//摘要
-                String intro   = CommentUtils.myToString(request.getParameter("intro"));//说明
+                double fee = Double.parseDouble(CommentUtils.myToString(request.getParameter("fee")));//提现金额
+                String abs = CommentUtils.myToString(request.getParameter("abs"));//摘要
+                String intro = CommentUtils.myToString(request.getParameter("intro"));//说明
                 String account = CommentUtils.myToString(request.getParameter("account"));//支付宝账号
-                String name    = CommentUtils.myToString(request.getParameter("name"));//支付宝姓名
+                String name = CommentUtils.myToString(request.getParameter("name"));//支付宝姓名
 
                 int code;
                 //0:参数错误 1:提交成功 2:余额不足 3:提交失败(参数错误)
@@ -201,9 +202,9 @@ public class PayServlet extends HttpServlet {
 
             // 取现记录
             else if (action.equals("dogetoutcash")) {
-                int    memberpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("memberpk")));//会员pk
-                String type     = CommentUtils.myToString(request.getParameter("type"));
-                String state    = CommentUtils.myToString(request.getParameter("state"));
+                int memberpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("memberpk")));//会员pk
+                String type = CommentUtils.myToString(request.getParameter("type"));
+                String state = CommentUtils.myToString(request.getParameter("state"));
                 if (type.equals("1") || type.equals("2")) {
                     if (type.equals("1")) {
                         type = PayConstants.TYPE_ALIPAY;
@@ -224,8 +225,8 @@ public class PayServlet extends HttpServlet {
 
             //获取发送的红包列表
             else if (action.equals("getgiveredorderlist")) {
-                int             modelPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("ModelPk")));//人才pk
-                List<RedPacket> list    = payService.getGiveRedList(modelPk);
+                int modelPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("ModelPk")));//人才pk
+                List<RedPacket> list = payService.getGiveRedList(modelPk);
                 if (list != null) {
                     resultJson.put("msg", Constants.success);
                     resultJson.put("data", JsonUtils.tofastjson(list));
@@ -236,8 +237,8 @@ public class PayServlet extends HttpServlet {
 
             //获取我收到的红包列表
             else if (action.equals("getreceiveredlist")) {
-                int             memberPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("MemberPk")));//会员PK
-                List<RedPacket> list     = payService.getReceiveRedList(memberPk);
+                int memberPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("MemberPk")));//会员PK
+                List<RedPacket> list = payService.getReceiveRedList(memberPk);
                 if (list != null) {
                     resultJson.put("msg", Constants.success);
                     resultJson.put("data", JsonUtils.tofastjson(list));
@@ -247,9 +248,9 @@ public class PayServlet extends HttpServlet {
             }
             //发红包
             else if (action.equals("givered")) {
-                int    modelPk  = Integer.parseInt(CommentUtils.myToString(request.getParameter("ModelPk")));//人才pk
-                int    memberPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("MemberPk")));//会员PK
-                double coin     = Double.parseDouble(CommentUtils.myToString(request.getParameter("coin")));// 红包
+                int modelPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("ModelPk")));//人才pk
+                int memberPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("MemberPk")));//会员PK
+                double coin = Double.parseDouble(CommentUtils.myToString(request.getParameter("coin")));// 红包
 
                 int code = payService.giveRed(modelPk, memberPk, coin);
 
@@ -268,9 +269,9 @@ public class PayServlet extends HttpServlet {
 
             // 接收红包
             else if (action.equals("receivered")) {
-                int     redPacketPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("RedPacketPk"))); // 红包PK
-                int     modelPk     = Integer.parseInt(CommentUtils.myToString(request.getParameter("ModelPk"))); // 会员PK
-                boolean flag        = payService.receiveRed(redPacketPk, modelPk);
+                int redPacketPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("RedPacketPk"))); // 红包PK
+                int modelPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("ModelPk"))); // 会员PK
+                boolean flag = payService.receiveRed(redPacketPk, modelPk);
                 if (flag) {
                     resultJson.put("msg", Constants.success);
                 } else {
@@ -279,7 +280,7 @@ public class PayServlet extends HttpServlet {
             }
 
             //送礼物
-            else if (action.equals("sendgift")){
+            else if (action.equals("sendgift")) {
                 double coin = Double.parseDouble(CommentUtils.myToString(request.getParameter("coin")));
                 int modelPk = Integer.parseInt(CommentUtils.myToString(request.getParameter("modelpk")));
                 int memberPk = CommentUtils.myToInt(request.getParameter("memberpk"));
@@ -290,6 +291,17 @@ public class PayServlet extends HttpServlet {
                 resultJson.put("msg", msg);
             }
 
+            //
+            else if (action.equalsIgnoreCase("applepay")) {
+                int memberpk = Integer.parseInt(CommentUtils.myToString(request.getParameter("memberpk")));
+                double amount = Double.parseDouble(CommentUtils.myToString(request.getParameter("amount")));
+                String receiptData = CommentUtils.myToString(request.getParameter("receipt-data"));
+                if (IosVerifyUtil.buyAppVerify(receiptData, 1)) {
+                    resultJson.put("msg", Constants.success);
+                } else {
+                    resultJson.put("msg", Constants.fail);
+                }
+            }
         } catch (Exception e) {
             e.printStackTrace();
             resultJson.put("msg", Constants.error);

+ 116 - 0
src/main/java/com/thmodel/util/IosVerifyUtil.java

@@ -0,0 +1,116 @@
+package com.thmodel.util;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+import javax.net.ssl.*;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Locale;
+
+/**
+ * 苹果IAP内购验证工具类
+ * Created by wangqichang on 2019/2/26.
+ */
+public class IosVerifyUtil {
+    private static class TrustAnyTrustManager implements X509TrustManager {
+
+        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+
+        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[]{};
+        }
+    }
+
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
+        public boolean verify(String hostname, SSLSession session) {
+            return true;
+        }
+    }
+
+    private static final String url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
+    private static final String url_verify = "https://buy.itunes.apple.com/verifyReceipt";
+
+    /**
+     * 苹果服务器验证
+     *
+     * @param receipt 账单
+     * @return null 或返回结果 沙盒 https://sandbox.itunes.apple.com/verifyReceipt
+     * @url 要验证的地址
+     */
+    public static boolean buyAppVerify(String receipt, int type) {
+        //环境判断 线上/开发环境用不同的请求链接
+        String url = "";
+        if (type == 0) {
+            url = url_sandbox; //沙盒测试
+        } else {
+            url = url_verify; //线上测试
+        }
+        //String url = EnvUtils.isOnline() ?url_verify : url_sandbox;
+
+        try {
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
+            URL console = new URL(url);
+            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            conn.setRequestMethod("POST");
+            conn.setRequestProperty("content-type", "text/json");
+            conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
+            conn.setDoInput(true);
+            conn.setDoOutput(true);
+            BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
+
+            String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt + "\"}");//拼成固定的格式传给平台
+            hurlBufOus.write(str.getBytes());
+            hurlBufOus.flush();
+
+            InputStream is = conn.getInputStream();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+            String line = null;
+            StringBuffer sb = new StringBuffer();
+            while ((line = reader.readLine()) != null) {
+                sb.append(line);
+            }
+            String verifyResult = sb.toString();
+            JSONObject appleReturn = JSONObject.parseObject(verifyResult);
+            String states = appleReturn.getString("status");
+            //无数据则沙箱环境验证
+            if ("21007".equals(states)) {
+                return IosVerifyUtil.buyAppVerify(receipt, 0);
+            }
+            System.out.println("苹果平台返回值:appleReturn" + appleReturn);
+            return states.equals("0");
+        } catch (Exception ex) {
+            System.out.println("苹果服务器异常");
+            ex.printStackTrace();
+        }
+        return false;
+    }
+
+    /**
+     * 用BASE64加密
+     *
+     * @param str
+     * @return
+     */
+    public static String getBASE64(String str) {
+        byte[] b = str.getBytes();
+        String s = null;
+        if (b != null) {
+            s = new sun.misc.BASE64Encoder().encode(b);
+        }
+        return s;
+    }
+
+}