فهرست منبع

支付宝获取用户信息

jk-GitHub-coder 4 سال پیش
والد
کامیت
25de53a9a4

+ 6 - 0
YijiaRestful/pom.xml

@@ -119,6 +119,12 @@
             <version>1.2.54</version>
         </dependency>
         <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>3.3.4.ALL</version>
+        </dependency>
+
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>

+ 82 - 0
YijiaRestful/src/main/java/com/platform/yijia/controller/AppUserInfoController.java

@@ -1,6 +1,14 @@
 package com.platform.yijia.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.*;
+import com.alipay.api.internal.util.AlipayEncrypt;
+import com.alipay.api.request.AlipaySystemOauthTokenRequest;
+import com.alipay.api.request.AlipayUserInfoAuthRequest;
+import com.alipay.api.request.AlipayUserInfoShareRequest;
+import com.alipay.api.response.AlipaySystemOauthTokenResponse;
+import com.alipay.api.response.AlipayUserInfoAuthResponse;
+import com.alipay.api.response.AlipayUserInfoShareResponse;
 import com.google.gson.Gson;
 import com.platform.yijia.param.request.AppUserInfoRequest;
 import com.platform.yijia.pojo.*;
@@ -10,6 +18,7 @@ import com.platform.yijia.utils.ResultData;
 import com.platform.yijia.utils.redis.RedisCacheUtil;
 import com.platform.yijia.utils.weixinapp.AesDecryptUtil;
 import com.platform.yijia.utils.weixinapp.WeiXinUserUtil;
+import com.sun.org.apache.bcel.internal.classfile.Code;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -49,6 +58,79 @@ public class AppUserInfoController {
 //    String appId = "wxe1135cd390b38a54";        //微信小程序appID
 //    String appSecret = "0532c7d9ae876c4ad636df0b1e3b9ddb";      //微信小程序密钥
 
+    //支付宝小程序:公钥、私钥、解密钥
+    String PRIVATE_KEY ="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCBVAR3NE/UNvnpXNhmx8xX6se8euxQefbbkWLSykgA9dkP7eaNDyllMtuxjNLaQ1VB26sh2us0VrzSsNA7nmX5aPXu7ckHXH6wBzChCeCdDCHVpoHVq5doehgwMQrvh6aUEcPId+szepvoMmKaSEbFmFapZrTxrPOthI6ENR3RRgs+29vYgru+qJtg3V+tsOr1gkhocU16dX9s7zYfSQQNOmFa01aAhtwI9pDKZVYtELrqOg1dP5WY+jMyXReaDLfAP40H3X7+sVuzTCLu4oVE9CMU2rR+hxwjs6rVWbgE4z13IbM3N8FoPjwJJK0+cXYuORE3yHd4eZj3pEFKvCajAgMBAAECggEADHnAXIdtU/lhrkNIlNGdQrXhQqtQ9IpvZ8rkj5T30S/mGoVGgkD+K0b2rm/5PxjTtqCsJ33oxom/eUuZKsci6yZW4w+JHu6rQevPoxlC06OB+Awx5hzBZFCy2KNCfMzHIu17x3DZ/YNMWt/RZzSlrxX89iZ0OgQHFav9238MO02z9ejRPQEWO4tNb7YyHmi1h56fH2Y+cvLh32QWc+t16tkr5HVY6I2ktMIHYpGU4lyfYEjZ01P7QruAVol2lDNiIYVFXfyDvtwqQNWol6iCswSrDFj0LFsdTWEA1OLZUdD/mfLuBJ9nUAHoCyIh3uR+Aag87DRURcFN92hG0cex4QKBgQDwzmdUC1upAKmRTVEcKUUyDxHZxDhfjRoyhZGf6s/paPvWAVo60VGDC2lQeYqQ8sMnWbpAYWq/yFT2bGK9iPD9UoZWKwLSJuR5RAhiet5WpCfvRmEqEVHJtCaZeV0Q4Al2dPZqu/7opFsrrlY5MvdKJZuLCtL/UBdmkz4BJyFwGQKBgQCJfPoIF5EI/4iYvAQM6FNEQ/kbtb3BF9In9m5GwaMP25ho8evkdI0q5H88FI+i+PdqtdM2gKhuNCXNK/LbF8AzEAu0Qr2clwOq6wQzPU4wl0RNrmdg6H/YC1uTgoy4cr9RdTrqOwXT2UyWghP7AjrifcstZVsrdamOxQHRQ/p0GwKBgQC/uHWH8msNyRs4NkiHlUwkKN9bc+A2Iw9iffmNStQxz4YBwp3mClVNcj5s9feeo8lAgS3KqETnYEZU08JhiK/l4FhYLnJWguSQr9vFHHH8pUGuPWiKp7NoVegNdRTlpJmkGEdAf2DaNFDqHClF7Q/5lquaLgoDf+7BmiVZoZ/7sQKBgF9aw1qLZba063rqo3CETQPClOnIAYQDTmkS++as87fS2ICokK9QunuuICR+KiSgwZBL7OIXFznfhvwmZ/fWICIKFeP+id0py4xmFPKoqSsALool1GMcvVYMgoXq/EgMpW4MfUDokKEeS4TzUII9SLO/BQRGEJYys9dmAV2u5OxTAoGAb5qCQVtmmhO+A0GJG4KZ4xd3i54ZiykrRyCLralBudpI6Vr5+N6yD4R5IdqN2iJKcokt1TxtcJzrunKhUHtOXEiLK/k872iWGQhPeMV+sqWcQXQpKLtRhn4dROOP2qgeOHtdkeLoPlIcfd6TjIsGJJCksXE2hNKr6aljS/zhoKo=";
+    String PUBLIC_KEY ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsXdLLSfp79oe89Q+i1KHx7DfNQjAPWlDaBVtHnwo+jiCkVcNzkeRtz5mZsM3lBURFG6T3eY3qUu0b3FUCSUWd1Q06J4bFI1y4ID3JBCyRi0Up5pcqZzwZqa22QxK3m5/2tabd56FL9C/PPSuQj8gPgT8eUbPUZFeLcnYCLSM0VKU/ZxlXRx9G0MEOZizMxiGdKVwNCE1BxJKTybFz2X0AyakpOWlAZZNQm3JIGfJVHEsc2lgBoeEt8T8d1AJiTdlzAayRGJWpX0nymRZ+RhwQQmuKlPGPvLJDNTV87YvvMttmzlXN32lobK6203PlOoDiLmenj0lxniZfC9tPcRhgwIDAQAB";
+    String ALI_APP_ID = "2021002140684377";
+    String ENCRYPT_KEY ="K5F2BgcYsRYo8YpRnNSTsg==";
+
+    //获取支付宝用户信息
+    @ResponseBody
+    @RequestMapping(value = "/getAliUserInfo")
+    public String getAliUserInfo(@RequestParam String code){
+        Gson gson =new Gson();
+        //返回结果集
+        ResultData resultData = null;
+        logger.info("获取用户信息所需code:"+code);
+        if(StringUtils.isNotBlank(code)){
+            try {
+                AlipayClient alipayClient = new DefaultAlipayClient(
+                        "https://openapi.alipay.com/gateway.do",
+                        ALI_APP_ID,
+                        PRIVATE_KEY,
+                        "json",
+                        "UTF-8",
+                        PUBLIC_KEY,
+                        "RSA2");
+                AlipaySystemOauthTokenRequest alipaySystemOauthTokenRequest = new AlipaySystemOauthTokenRequest();
+                alipaySystemOauthTokenRequest.setGrantType("authorization_code");
+                alipaySystemOauthTokenRequest.setCode(code);
+                AlipaySystemOauthTokenResponse alipaySystemOauthTokenResponse = alipayClient.execute(alipaySystemOauthTokenRequest);
+                if (alipaySystemOauthTokenResponse.isSuccess()){
+                    logger.info("支付宝小程序获取access_token:"+ alipaySystemOauthTokenResponse.getAccessToken());
+                    //获取用户信息
+                    AlipayUserInfoShareRequest alipayUserInfoShareRequest = new AlipayUserInfoShareRequest();
+                    AlipayUserInfoShareResponse alipayUserInfoShareResponse = alipayClient.execute(alipayUserInfoShareRequest, alipaySystemOauthTokenResponse.getAccessToken());
+                    resultData = ResultData.success(alipayUserInfoShareResponse);
+                }else {
+                    resultData = ResultData.success(alipaySystemOauthTokenResponse);
+                }
+            } catch (AlipayApiException e) {
+                e.printStackTrace();
+                resultData =ResultData.error(CodeMsg.REQUEST_FAIL);
+            }
+        }else {
+            resultData =ResultData.error(CodeMsg.PARAMS_NUll);
+        }
+        return gson.toJson(resultData);
+    }
+
+    //支付宝小程序用户手机号解密 encryptedData
+    @ResponseBody
+    @RequestMapping(value = "/alipayEncryptUserPhone", method = RequestMethod.POST, consumes = "application/json")
+    public String alipayEncryptUserPhone(@RequestBody JSONObject jsonObject){
+        Gson gson =new Gson();
+        //返回结果集
+        ResultData resultData = null;
+        if(StringUtils.isNotBlank(jsonObject.get("encryptedData").toString())){
+            try {
+                //解密用户手机号数据
+                String encryptedData = jsonObject.get("encryptedData").toString();
+                logger.info("支付宝获取手机号要解密数据: " +encryptedData);
+                String aes = AlipayEncrypt.decryptContent(encryptedData, "AES", ENCRYPT_KEY, "UTF-8");
+                logger.info("支付宝获取手机号解密后的数据:" +aes);
+                resultData = ResultData.success(aes);
+            } catch (AlipayApiException e) {
+                e.printStackTrace();
+                resultData = ResultData.error(CodeMsg.REQUEST_FAIL);
+            }
+        }else {
+            resultData = ResultData.error(CodeMsg.PARAMS_NUll);
+        }
+        return gson.toJson(resultData);
+    }
+
+
     /*
      * 微信小程序根据code获取用户openId和sessionKey
      * @param code

+ 1 - 4
YijiaRestful/src/main/java/com/platform/yijia/controller/ElectronicMembershipCardController.java

@@ -243,10 +243,7 @@ public class ElectronicMembershipCardController {
                 CustomerElectronicCard electronicCardInfoByUnionId = electronicMembershipCardService.getElectronicCardInfoByUnionId(c);
                 if(electronicCardInfoByUnionId !=null && electronicCardInfoByUnionId.getCustomerNo() !=null){
                     customerCardUseRecord.setCustomerNo(electronicCardInfoByUnionId.getCustomerNo());
-                    customerCardUseRecord.setAmt(electronicCardInfoByUnionId.getAmt());
-//                    BigDecimal amt1 = electronicCardInfoByUnionId.getAmt(); //客户原有金额
-//                    BigDecimal amt2 = amt.add(customerCardUseRecord.getPresentAmt());   //客户本次共充值金额:充值金额+赠送金额
-//                    customerCardUseRecord.setBalance(amt1.add(amt2));
+                    customerCardUseRecord.setBalance(electronicCardInfoByUnionId.getAmt());
                 }
                 //订单规则 时间+6位随机数
                 Random random = new Random();

+ 28 - 9
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -193,7 +193,7 @@ public class PayOrderController {
     //查询用户电子会员卡余额
     public Map<String, String>  selectCardBalance(Integer stationId, String oilName, String unionId) {
         String cardOilsType ="";
-        switch (oilName){                               //根据油品名称存储电子卡油品类型 1.柴油 2 汽油
+        switch (oilName){
             case "92#":
                 cardOilsType ="1";
                 break;
@@ -504,8 +504,12 @@ public class PayOrderController {
                     if(customerGradeInfo != null && customerGradeInfo.size() >0){   //已存在客户等级信息
                         //使用客户已存在的等级计算优惠
                         oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);
-                        discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
-                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
+                            discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }else {
+                            discountAmt =new BigDecimal("0.00");
+                        }
                         amt = receivableAmt_b.subtract(discountAmt);
                         discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                         //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
@@ -520,8 +524,15 @@ public class PayOrderController {
                         if(customerGradeList !=null && customerGradeList.size() >0){
                             //用户第一次购买 取等级最低初始会员的优惠条件计算
                             oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);   //加油升数
-                            discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
-                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+
+                            if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
+                                discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
+                                discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                            }else {
+                                discountAmt =new BigDecimal("0.00");
+                            }
+//                            discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
+//                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
                             amt = receivableAmt_b.subtract(discountAmt);
                             discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                             //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
@@ -767,8 +778,12 @@ public class PayOrderController {
         if(customerGradeInfo != null && customerGradeInfo.size() >0){   //已存在客户等级信息
             //使用客户已存在的等级计算优惠
             oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);
-            discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
-            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+            if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
+                discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
+                discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+            }else {
+                discountAmt =new BigDecimal("0.00");
+            }
             amt = receivableAmt_b.subtract(discountAmt);
             discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
             //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
@@ -783,8 +798,12 @@ public class PayOrderController {
             if(customerGradeList !=null && customerGradeList.size() >0){
                 //用户第一次购买 取等级最低初始会员的优惠条件计算
                 oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP);   //加油升数
-                discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
-                discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
+                    discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
+                    discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                }else {
+                    discountAmt =new BigDecimal("0.00");
+                }
                 amt = receivableAmt_b.subtract(discountAmt);
                 discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                 //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);