xiongzhu 3 жил өмнө
parent
commit
6568477ff4

+ 5 - 3
install-jar.sh

@@ -1,8 +1,10 @@
 
 
-mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.libjpegturbo -DartifactId=mozjpeg4j -Dpackaging=jar -Dversion=1.1 -Dfile=lib/mozjpeg4j-1.1.jar -DlocalRepositoryPath=libs
+mvn install:install-file -DgroupId=org.libjpegturbo -DartifactId=mozjpeg4j -Dpackaging=jar -Dversion=1.1 -Dfile=lib/mozjpeg4j-1.1.jar -DlocalRepositoryPath=libs
 
 
-mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.pngquant -DartifactId=pngquant4j -Dpackaging=jar -Dversion=1.0.1 -Dfile=lib/pngquant4j-1.0.1.jar -DlocalRepositoryPath=libs
+mvn install:install-file -DgroupId=org.pngquant -DartifactId=pngquant4j -Dpackaging=jar -Dversion=1.0.1 -Dfile=lib/pngquant4j-1.0.1.jar -DlocalRepositoryPath=libs
 
 
 mvn install:install-file -DgroupId=com.antfinancial.baas -DartifactId=mychain-rest-lib -Dpackaging=jar -Dversion=0.10.2.11 -Dfile=lib/mychain-rest-client-0.10.2.11-with-dependencies.jar
 mvn install:install-file -DgroupId=com.antfinancial.baas -DartifactId=mychain-rest-lib -Dpackaging=jar -Dversion=0.10.2.11 -Dfile=lib/mychain-rest-client-0.10.2.11-with-dependencies.jar
 
 
-mvn install:install-file -DgroupId=com.alipay.mychainx -DartifactId=mychainx-sdk -Dpackaging=jar -Dversion=0.10.2.9 -Dfile=lib/mychainx-java-sdk-0.10.2.9-with-dependencies.jar
+mvn install:install-file -DgroupId=com.alipay.mychainx -DartifactId=mychainx-sdk -Dpackaging=jar -Dversion=0.10.2.9 -Dfile=lib/mychainx-java-sdk-0.10.2.9-with-dependencies.jar
+
+mvn install:install-file -DgroupId=com.upay -DartifactId=sdk -Dpackaging=jar -Dversion=1.0.0 -Dfile=lib/5upay-sdk-core-1.0.0.jar

BIN
lib/5upay-sdk-core-1.0.0.jar


+ 19 - 7
pom.xml

@@ -147,10 +147,16 @@
             <version>1.9.4</version>
             <version>1.9.4</version>
         </dependency>
         </dependency>
 
 
+        <dependency>
+            <groupId>commons-configuration</groupId>
+            <artifactId>commons-configuration</artifactId>
+            <version>1.10</version>
+        </dependency>
+
         <dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <groupId>org.apache.commons</groupId>
-            <artifactId>commons-text</artifactId>
-            <version>1.3</version>
+            <artifactId>commons-configuration2</artifactId>
+            <version>2.7</version>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>
@@ -287,11 +293,11 @@
         </dependency>
         </dependency>
         <!-- 钉钉 -->
         <!-- 钉钉 -->
 
 
-<!--        <dependency>-->
-<!--            <groupId>com.github.whvcse</groupId>-->
-<!--            <artifactId>easy-captcha</artifactId>-->
-<!--            <version>1.6.2</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.github.whvcse</groupId>-->
+        <!--            <artifactId>easy-captcha</artifactId>-->
+        <!--            <version>1.6.2</version>-->
+        <!--        </dependency>-->
 
 
         <dependency>
         <dependency>
             <groupId>org.libjpegturbo</groupId>
             <groupId>org.libjpegturbo</groupId>
@@ -457,6 +463,12 @@
             <artifactId>aliyun-java-sdk-green</artifactId>
             <artifactId>aliyun-java-sdk-green</artifactId>
             <version>3.6.5</version>
             <version>3.6.5</version>
         </dependency>
         </dependency>
+
+        <dependency>
+            <groupId>com.upay</groupId>
+            <artifactId>sdk</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
 </project>
 </project>

+ 2 - 0
src/main/java/com/izouma/nineth/config/RedisKeys.java

@@ -36,4 +36,6 @@ public class RedisKeys {
     public static final String VIP_COLLECTION_LIST = "vipCollectionList";
     public static final String VIP_COLLECTION_LIST = "vipCollectionList";
 
 
     public static final String JWT_TOKEN = "jwtToken::";
     public static final String JWT_TOKEN = "jwtToken::";
+
+    public static final String BIND_CARD = "bindCard::";
 }
 }

+ 17 - 0
src/main/java/com/izouma/nineth/dto/BindCardRequest.java

@@ -0,0 +1,17 @@
+package com.izouma.nineth.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BindCardRequest {
+    private String userId;
+    private String bankNo;
+    private String phone;
+    private String name;
+    private String idNo;
+    private String bindCardId;
+}

+ 2 - 0
src/main/java/com/izouma/nineth/dto/UserBankCard.java

@@ -41,4 +41,6 @@ public class UserBankCard extends UserBaseEntity {
 
 
     @Convert(converter = EncryptConverter.class)
     @Convert(converter = EncryptConverter.class)
     private String idNo;
     private String idNo;
+
+    private String bindCardId;
 }
 }

+ 104 - 0
src/main/java/com/izouma/nineth/service/PayEaseService.java

@@ -0,0 +1,104 @@
+package com.izouma.nineth.service;
+
+import com.alibaba.fastjson15.JSON;
+import com.alibaba.fastjson15.JSONObject;
+import com.alibaba.fastjson15.parser.Feature;
+import com.izouma.nineth.config.RedisKeys;
+import com.izouma.nineth.dto.BindCardRequest;
+import com.izouma.nineth.exception.BusinessException;
+import com.upay.sdk.CipherWrapper;
+import com.upay.sdk.ConfigurationUtils;
+import com.upay.sdk.HttpClientUtils;
+import com.upay.sdk.cashier.bindcard.builder.BindCardBuilder;
+import com.upay.sdk.cashier.bindcard.builder.BindCardConfirmBuilder;
+import com.upay.sdk.cashier.bindcard.builder.BindCardKaptchaBuilder;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.time.Duration;
+import java.util.Objects;
+
+@Service
+@Slf4j
+@AllArgsConstructor
+public class PayEaseService {
+
+    public static final String merchantId = "896593123";
+
+    private RedisTemplate<String, Object> redisTemplate;
+
+    public JSONObject request(String url, JSONObject requestData) {
+        log.info("requestData: {}", JSON.toJSONString(requestData, true));
+        String responseStr = HttpClientUtils.post3(url, requestData);
+        log.info("responseStr: \n{}", responseStr);
+        JSONObject responseData = JSONObject.parseObject(responseStr, Feature.SortFeidFastMatch);
+        responseData = CipherWrapper.bothDecryptWrap(responseData);
+        log.info("responseStr: {}", JSON.toJSONString(responseData, true));
+        return responseData;
+    }
+
+    public String bindCard(BindCardRequest bindCardRequest) {
+        BindCardBuilder builder = new BindCardBuilder(merchantId);
+        builder.setMerchantUserId(bindCardRequest.getUserId())
+                .setBankCardNumber(bindCardRequest.getBankNo())
+                .setPhoneNumber(bindCardRequest.getPhone())
+                .setName(bindCardRequest.getName())
+                .setIdCardNum(bindCardRequest.getIdNo());
+        JSONObject requestData = builder.bothEncryptBuild();
+        JSONObject responseData = request(ConfigurationUtils.getCashierBindCardUrl(), requestData);
+
+        if (!"SUCCESS".equals(responseData.getString("status"))) {
+            String error = responseData.getString("error");
+            String cause = responseData.getString("cause");
+            throw new BusinessException(error);
+        } else {
+            String bindStatus = responseData.getString("bindStatus");
+            String bindCardId = responseData.getString("bindCardId");
+            String bankCardNumber = responseData.getString("bankCardNumber");
+            bindCardRequest.setBindCardId(bindCardId);
+            redisTemplate.opsForValue().set(RedisKeys.BIND_CARD + bindCardId,
+                    bindCardRequest, Duration.ofMinutes(30));
+            return bindCardId;
+        }
+    }
+
+    public BindCardRequest bindCardConfirm(String bindCardId, String code) {
+        Object obj = redisTemplate.opsForValue().get(RedisKeys.BIND_CARD + bindCardId);
+        Objects.requireNonNull(obj, "绑卡信息不存在");
+        BindCardRequest bindCardRequest = (BindCardRequest) obj;
+
+
+        BindCardConfirmBuilder builder = new BindCardConfirmBuilder(merchantId);
+        builder.setBindCardId(bindCardId)
+                .setMerchantUserId(bindCardRequest.getUserId())
+                .setKaptchaCode(code);
+
+        JSONObject requestData = builder.bothEncryptBuild();
+        JSONObject responseData = request(ConfigurationUtils.getCashierBindCardConfirmUrl(), requestData);
+
+        String status = responseData.getString("status");
+        if (!"SUCCESS".equals(status)) {
+            String error = responseData.getString("error");
+            String cause = responseData.getString("cause");
+            throw new BusinessException(error);
+        }
+        String bindStatus = responseData.getString("bindStatus");
+        if (!"SUCCESS".equals(bindStatus)) {
+            String errorMsg = responseData.getString("errorMsg");
+            throw new BusinessException(errorMsg);
+        }
+        return bindCardRequest;
+    }
+
+    public void bindCardCaptcha(String bindCardId) {
+        BindCardKaptchaBuilder builder = new BindCardKaptchaBuilder(merchantId);
+        builder.setBindCardId(bindCardId);
+        JSONObject response = request(ConfigurationUtils.getCashierBindCardKaptchaUrl(), builder.bothEncryptBuild());
+        if (!"SUCCESS".equals(response.getString("status"))) {
+            String error = response.getString("error");
+            throw new BusinessException(error);
+        }
+    }
+}

+ 4 - 0
src/main/java/com/izouma/nineth/utils/RegexpUtils.java

@@ -0,0 +1,4 @@
+package com.izouma.nineth.utils;
+
+public class RegexpUtils {
+}

+ 23 - 0
src/main/resources/5upay-config.properties

@@ -0,0 +1,23 @@
+
+onlinepay.order.url=https://apis.5upay.com/onlinePay/order
+onlinepay.query.url=https://apis.5upay.com/onlinePay/query
+onlinepay.refund.url=https://apis.5upay.com/onlinePay/refund
+onlinepay.refund.query.url=https://apis.5upay.com/onlinePay/refundQuery
+cashier.bindcard.query.url=https://apis.5upay.com/cashier/bindcard/query
+cashier.bindcard.kaptcha.url=https://apis.5upay.com/cashier/bindcard/getKaptcha
+cashier.bindcard.url=https://apis.5upay.com/cashier/bindcard/submit
+cashier.bindcard.confirm.url=https://apis.5upay.com/cashier/bindcard/confirm
+cashier.unbindcard.url=https://apis.5upay.com/cashier/bindcard/unbind
+cashier.receipt.payment.url=https://apis.5upay.com/cashier/receipt/payment
+
+
+
+
+http.content.type.v3=application/vnd.5upay-v3.0+json
+
+
+
+server.public.key.path=/Users/drew/Downloads/server.cer
+
+896593123.client.private.key.path=/Users/drew/Downloads/payease.pfx
+896593123.client.private.key.password=3edc#EDC

+ 86 - 0
src/test/java/com/izouma/nineth/PayEaseTest.java

@@ -0,0 +1,86 @@
+package com.izouma.nineth;
+
+import com.alibaba.fastjson15.JSON;
+import com.alibaba.fastjson15.JSONObject;
+import com.alibaba.fastjson15.parser.Feature;
+import com.upay.sdk.CipherWrapper;
+import com.upay.sdk.ConfigurationUtils;
+import com.upay.sdk.HttpClientUtils;
+import com.upay.sdk.cashier.bindcard.builder.BindCardBuilder;
+import com.upay.sdk.cashier.bindcard.builder.BindCardConfirmBuilder;
+import com.upay.sdk.cashier.bindcard.builder.BindCardKaptchaBuilder;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+
+@Slf4j
+public class PayEaseTest {
+    String merchantId = "896593123";
+
+    public JSONObject request(String url, JSONObject requestData) {
+        log.info("requestData: {}", JSON.toJSONString(requestData, true));
+        String responseStr = HttpClientUtils.post3(url, requestData);
+        log.info("responseStr: \n{}", responseStr);
+        JSONObject responseData = JSONObject.parseObject(responseStr, Feature.SortFeidFastMatch);
+        responseData = CipherWrapper.bothDecryptWrap(responseData);
+        log.info("responseStr: {}", JSON.toJSONString(responseData, true));
+        return responseData;
+    }
+
+    @Test
+    public void bindCard() {
+        //商户会员id
+        String merchantUserId = "1";
+        //	银⾏卡号
+        String bankCardNumber = "6222024301070380165";
+        //预留⼿机号
+        String phoneNumber = "15077886171";
+        //	持卡⼈姓名
+        String name = "熊竹";
+        //	身份证号
+        String idCardNum = "321002199408304614";
+
+
+        BindCardBuilder builder = new BindCardBuilder(merchantId);
+        builder.setMerchantUserId(merchantUserId)
+                .setBankCardNumber(bankCardNumber)
+                .setPhoneNumber(phoneNumber)
+                .setName(name)
+                .setIdCardNum(idCardNum);
+        JSONObject requestData = builder.bothEncryptBuild();
+        log.info("bindCard requestData: {}", JSON.toJSONString(requestData, true));
+        String responseStr = HttpClientUtils.post3(ConfigurationUtils.getCashierBindCardUrl(), requestData);
+        log.info("bindCard responseStr: \n{}", responseStr);
+        JSONObject responseData = JSONObject.parseObject(responseStr, Feature.SortFeidFastMatch);
+        responseData = CipherWrapper.bothDecryptWrap(responseData);
+        log.info("bindCard responseStr: {}", JSON.toJSONString(responseData, true));
+    }
+
+    @Test
+    public void bindCardConfirm() {
+        String bindCardId = "20220519545183711981094920404992";
+        String kaptchaCode = "045999";
+        String merchantUserId = "1";
+
+        BindCardConfirmBuilder builder = new BindCardConfirmBuilder(merchantId);
+        builder.setBindCardId(bindCardId)
+                .setMerchantUserId(merchantUserId)
+                .setKaptchaCode(kaptchaCode);
+
+        JSONObject requestData = builder.bothEncryptBuild();
+        log.info("bindCard requestData: {}", JSON.toJSONString(requestData, true));
+        String responseStr = HttpClientUtils.post3(ConfigurationUtils.getCashierBindCardConfirmUrl(), requestData);
+        log.info("bindCard responseStr: \n{}", responseStr);
+        JSONObject responseData = JSONObject.parseObject(responseStr, Feature.SortFeidFastMatch);
+        responseData = CipherWrapper.bothDecryptWrap(responseData);
+        log.info("bindCard responseStr: {}", JSON.toJSONString(responseData, true));
+    }
+
+    @Test
+    public void bindCardCaptcha() {
+        String bindCardId = "20220519545183711981094920404992";
+
+        BindCardKaptchaBuilder builder = new BindCardKaptchaBuilder(merchantId);
+        builder.setBindCardId(bindCardId);
+        JSONObject response = request(ConfigurationUtils.getCashierBindCardKaptchaUrl(), builder.bothEncryptBuild());
+    }
+}