Commit 58e80715 authored by shangying's avatar shangying

授信成功流程

parent 3eb842e1
......@@ -19,7 +19,6 @@
</properties>
<dependencies>
<dependency>
......@@ -163,7 +162,39 @@
<artifactId>ant</artifactId>
<version>1.7.0</version>
</dependency>
<!-- 测试类-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<!-- 测试类-->
<!-- testng-->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.21</version>
</dependency>
<!--<dependency>-->
<!--<groupId>tmf</groupId>-->
<!--<artifactId>autotmf</artifactId>-->
<!--<version>1.0-SNAPSHOT</version>-->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.slf4j</groupId>-->
<!--<artifactId>slf4j-jdk14</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
</dependencies>
......
package cn.quantgroup.cashloanflowboss;
import com.ctrip.framework.apollo.spring.config.ApolloPropertySourceInitializer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Bootstrap.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(initializers = ApolloPropertySourceInitializer.class)
public class BootstrapNew {
@Value("${NAMESPACE}")
private String nameSpace;
@Value("${passportapi.http}")
private String passportapiHttp;
@Test
public void testStart() {
String nameSpace1=nameSpace;
System.out.println("Hello,World!!!"+nameSpace1);
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.controller;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.TypeEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.OneClickDataOperateService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.utils.RandomlyGeneratedParameters;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.logging.Logger;
/**
* Created by shang on 2019/12/3.
*/
@Slf4j
@RestController
@RequestMapping("/oneclickdate")
public class OneClickDataController {
@Autowired
private OneClickDataOperateService oneClickDataOperateService;
OneClickModel oneClickModelNew;
@PostMapping("/v1/type")
public Result OneClickDataOperate(@RequestBody @Valid OneClickModel oneClickModel) throws Exception {
log.info("实体类oneClickModel={}",oneClickModel);
if (oneClickModel.getType().isEmpty()) {
log.info("打印一下oneClickModel.getType()={}",oneClickModel.getType());
return Result.buildFail("操作类型必填");
} else {
oneClickModelNew=setDefaultValue(oneClickModel);
log.info("打印最新的oneClickModelNew={}", oneClickModelNew);
if (oneClickModel.getType().equals(String.valueOf(TypeEnum.APPLY.getCode()))) {
return OnekeyApply(oneClickModelNew);
} else if (oneClickModel.getType().equals(String.valueOf(TypeEnum.CASHWITHDRAWAL.getCode()))) {
return OneKeyCashWithdrawal(oneClickModelNew);
} else if (oneClickModel.getType().equals(String.valueOf(TypeEnum.CREDITSUCCESS.getCode())) || oneClickModel.getType().equals(String.valueOf(TypeEnum.CREDITFAIL.getCode()))) {
return OneKeyCreditSuccessOrFail(oneClickModelNew);
} else if (oneClickModel.getType().equals(String.valueOf(TypeEnum.LOANSUCCESS.getCode())) || oneClickModel.getType().equals(String.valueOf(TypeEnum.LOANFAIL.getCode()))) {
return OneKeyLoanSuccessOrFail(oneClickModelNew);
} else {
return Result.buildFail("没有匹配到操作类型Type");
}
}
}
public Result OnekeyApply(OneClickModel oneClickModel) {
return oneClickDataOperateService.OnekeyApply(oneClickModel);
}
public Result OneKeyCashWithdrawal(OneClickModel oneClickModel) {
oneClickDataOperateService.OneKeyCashWithdrawal(oneClickModel);
return null;
}
public Result OneKeyCreditSuccessOrFail(OneClickModel oneClickModel) throws Exception {
return oneClickDataOperateService.OneKeyCreditSuccessOrFail(oneClickModel);
}
public Result OneKeyLoanSuccessOrFail(OneClickModel oneClickModel) {
// oneClickDataOperateService.OneKeyLoanSuccessOrFail(oneClickModel);
return null;
}
public OneClickModel setDefaultValue(OneClickModel oneClickModel){
if (StringUtils.isBlank(oneClickModel.getPhone())){
String randPhone;
randPhone = RandomlyGeneratedParameters.getTel();
oneClickModel.setPhone(randPhone.toString());
}
if(StringUtils.isBlank(oneClickModel.getChannel())){
oneClickModel.setChannel("1");
}
if(StringUtils.isBlank(oneClickModel.getAmount()) ){
oneClickModel.setAmount("10000");
}
if(StringUtils.isBlank(oneClickModel.getFundID())){
oneClickModel.setFundID("710");
}
if(StringUtils.isBlank(oneClickModel.getProductId())){
oneClickModel.setProductId("1");
}
if(StringUtils.isBlank(oneClickModel.getTermNo())){
oneClickModel.setTermNo("12");
}
log.info("打印重新设置的oneClickModel={}",oneClickModel);
return oneClickModel;
}
public static void main(String[] arg) throws Exception {
OneClickDataController oneclick=new OneClickDataController();
OneClickModel oneClickModel2 = new OneClickModel();
oneClickModel2.setType("1");
oneClickModel2.setChannel("159858");
oneclick.OneClickDataOperate(oneClickModel2);
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.entity;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.LoanStatusEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.TypeEnum;
import cn.quantgroup.cashloanflowboss.core.persistence.Primary;
import lombok.Data;
import javax.persistence.*;
/**
* Created by shang on 2019/12/16.
*/
@Entity
@Table(name = "one_click_data")
@Data
public class OneClickData extends Primary {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "phone")
private String phone;
@Column(name = "token")
private String token;
@Column(name = "user_id")
private String userId;
@Column(name = "suserId")
private String suserId;
@Column(name = "ocr_token")
private String ocrToken;
@Column(name = "quota_record_order_no")
private String quotaRecordOrderNo;
@Column(name = "account_id")
private String accountId;
@Column(name = "pay_token")
private String payToken;
@Column(name = "channel")
private String channel;
@Column(name = "audit_result")
private String auditResult;
@Column(name = "fund_corp_id")
private String fundCorpId;
@Column(name = "product_id")
private String productId;
@Column(name = "uuid")
private String uuid;
@Column(name = "order_no")
private String orderNo;
@Column(name = "channel_code")
private String channelcode;
@Column(name = "card_id")
private String cardId;
@Column(name = "card_bind_info_id")
private String cardBindInfoId;
@Column(name = "loan_id")
private String loanId;
@Column(name = "assign_people_num")
private String assignPeopleNum;
@Column(name = "gyxd_token")
private String gyxdToken;
@Column(name = "op_token")
private String opToken;
@Column(name = "repayment_token")
private String repaymentToken;
@Column(name = "pay_approach")
private String payApproach;
@Column(name = "preserve_phone_no")
private String preservePhoneNo;
@Column(name = "credit_status")
private CreditStatusEnum creditStatus;
@Column(name = "loan_status")
private LoanStatusEnum loanStatus;
@Column(name = "type")
private Integer type;
@Column(name = "channel_order_no")
private String channelOrderNo;
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.entity;
//
//import lombok.Data;
//
//import javax.persistence.*;
//import java.sql.Timestamp;
//
///**
// * Created by shang on 2019/12/12.
// */
//@Entity
//@Table(name = "one_click_job_config")
//@Data
//public class OneClickJobConfig {
// @Id
// @Column(name = "id")
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// private Long id;
//
// @Column(name = "job_name")
// private String jobName;
//
// @Column(name = "cron")
// private String cron;
//
// @Column(name = "sharding_total_count")
// private Integer shardingTotalCount;
//
// @Column(name = "sharding_item_parameters")
// private String shardingItemParameters;
//
// @Column(name = "description")
// private String description;
// //private String failover;
//
// @Column(name = "job_parameter")
// private String jobParameter;
//
// @Column(name = "job_class")
// private String jobClass;
//
// @Column(name = "is_active")
// private Boolean isActive;
//
// @Column(name = "created_at")
// private Timestamp createdAt;
//}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import lombok.Getter;
/**
* Created by shang on 2019/12/11.
*/
@Getter
public enum ChannelEnum {
ZHANGHZONG("159858","掌众"),
SHIGUANGFQ("159865","时光分期"),
XIAOJUMAO("159869","时光分期"),
GUOMEI("159865","时光分期"),
WEIDIAN("159865","时光分期");
private String code;
private String desc;
ChannelEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import lombok.Getter;
/**
* 申请状态
* 0-发起申请风控审核中 1-风控审核拒绝 2-风控审核通过
* Created by shang on 2019/12/9.
*/
@Getter
public enum CreditStatusEnum {
DEFAULT(0, "等待授信"),
CREDIT_FAIL(1, "失败"),
CREDIT_SUCC(2, "成功"),
CREDIT_Not_Yet_Crediting(3, "尚未授信"),
CREDIT_Waiting(4, "授信中");
private int code;
private String desc;
CreditStatusEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import lombok.Getter;
/**
* 放款状态
* 放款状态:50已申请提现、20等待马上金融放款、21已发送给马上金融, 等待放款、15查看还款计划、16借款完成、28放开失败
* @author shang
*/
@Getter
public enum LoanStatusEnum {
DEFAULT(0, "未付款,未核销"),
LOAN_UNCONFIRM(1, "资金方放款状态未知(未核销)"),
LOAN_SUCC(15, "放款成功(已核销)"),
LOAN_FAIL(28, "放款失败(等待退款)"),
APPLY_WITHDRAWDEPOSIT(50, "已申请提现"),
WAIT_JRLOAN(20, "等待马上金融放款"),
TO_JRWAITLOAN(21, "已发送给马上金融, 等待放款"),
AREADY_REPALYMENT(16, "等待马上金融放款");
private int code;
private String desc;
LoanStatusEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import cn.quantgroup.cashloanflowboss.component.validator.constraints.NotEmpty;
import lombok.Data;
/**
* Created by shang on 2019/12/9.
*/
@Data
public class OneClickModel {
private String phone;
private String channel;
private String termNo;
private String amount;
private String fundID;
@NotEmpty(message = "type不能空")
private String type;
private String productId;
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import lombok.Data;
/**
* Created by shang on 2019/12/17.
*/
@Data
public class OneClickOV {
private String loanId;
private String loanMessage;
private String creditMessage;
public OneClickOV(){}
public OneClickOV(String loanId, String loanMessage,String creditMessage){
this.loanId=loanId;
this.loanMessage=loanMessage;
this.creditMessage=creditMessage;
}
public OneClickOV(String creditMessage){
this.creditMessage=creditMessage;
}
public OneClickOV(String loanId,String creditMessage){
this.loanId=loanId;
this.creditMessage=creditMessage;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import lombok.Data;
/**
* Created by shang on 2019/12/17.
*/
@Data
public class OneClickReslut {
private OneClickOV oneClickOV;
private String message;
private Integer code;
public OneClickReslut(){}
public OneClickReslut(OneClickOV oneClickOV,String message,Integer code){
this.oneClickOV=oneClickOV;
this.message=message;
this.code=code;
}
public OneClickReslut(String message,Integer code){
this.message=message;
this.code=code;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.model;
import lombok.Getter;
/**
*
* Created by shang on 2019/12/9.
*/
@Getter
public enum TypeEnum {
APPLY(1,"申请进件"),
CREDITSUCCESS(2,"授信成功"),
CREDITFAIL(3,"授信失败"),
LOANSUCCESS(4,"放款成功"),
LOANFAIL(5,"放款失败"),
LIQUIDATION(6,"清算"),
CASHWITHDRAWAL(7,"申请提现");
private int code;
private String desc;
TypeEnum() {
}
TypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
TypeEnum(int code) {
this.code = code;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.repository;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData;
import cn.quantgroup.cashloanflowboss.core.persistence.CashLoanFlowBossDataSource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
* Created by shang on 2019/12/11.
*/
@CashLoanFlowBossDataSource
@Repository
public interface OneClickDataRespository extends JpaRepository<OneClickData, Long> {
// 通过手机号、渠道订单号、授信状态、放款状态查询
@Query(value = "select * from one_click_data where user_id=?1 and credit_status = ?2 and loan_status=?3 order by id desc limit 1", nativeQuery = true)
OneClickData findByPhoneAndCreditStatusAndLoanStatus(String userId,Integer creditStatus,Integer loanStatus);
// 通过id修改 添加订单号 产品id token信息
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update one_click_data set quota_record_order_no=?1,order_no=?2,product_id=?3,token=?4 where id=?5", nativeQuery = true)
int updateById(String quotaRecordOrderNo,String orderNo,String productId,String token,Long id);
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.repository;
//
//import cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickJobConfig;
//import cn.quantgroup.cashloanflowboss.core.persistence.CashLoanFlowBossDataSource;
//import org.springframework.data.jpa.repository.JpaRepository;
//import org.springframework.stereotype.Repository;
//
///**
// * Created by shang on 2019/12/12.
// */
//@CashLoanFlowBossDataSource
//@Repository
//public interface OneClickJobConfigRepository extends JpaRepository<OneClickJobConfig, Long> {
//
//// @Query(value = "select * from one_click_job_config where is_active = 1", nativeQuery = true)
//// List<OneClickJobConfig> findAllIsActive();
//}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import com.alibaba.fastjson.JSONObject;
/**
* Created by shang on 2019/12/3.
*/
public interface ApplyLoanService {
public static boolean reslut=true;
Result applyLoan(OneClickModel oneClickModel);
JSONObject zhangZhongApply(OneClickModel oneClickModel);
JSONObject shiGuangFenQiApply();
JSONObject xiaoJMApply();
JSONObject guoMeiApply();
JSONObject weiDianApply();
JSONObject defautApply();
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.core.base.Result;
/**
* Created by shang on 2019/12/9.
*/
public interface CashWithdrawalService {
Result applyLoan(OneClickModel oneClickModel);
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.core.base.Result;
/**
* Created by shang on 2019/12/3.
*/
public interface CreditGrantingService {
/**
* 风控授信回调
*/
Result authAmountAuditNotify(OneClickModel oneClickModel) throws Exception;
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public interface FundsAllocationplanService {
//}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public interface GDXDService {
//}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/3.
// */
//public interface H5BindingCardAndWithdrawDeposit {
// /**
// * 前往提现页
// */
// void accountPro();
//
// /**
// * 查询用户额度表(获取 accountId)
// */
// void getXYQBAccountId();
//
// /**
// * 进入支付绑卡
// */
// void bindCard();
//
// /**
// * 绑卡发送短信
// */
// void cardAuthSms();
//
// /**
// * 绑卡确认
// */
// void cardAuthSmsConfirm();
//
// /**
// * 查询用户可用卡列表
// */
// void bindCardList();
//
// /**
// * 查询分配资金方
// */
// void accountTrial();
//
// /**
// * 绑卡后提现
// */
// void cashAfterBindingCard();
//
// /**
// * 查询loanID
// */
// void testSelectLoanId();
//
//
//}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl;
import bsh.StringUtil;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.*;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickDataRespository;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.ApplyLoanService;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterServiceImpl;
import cn.quantgroup.cashloanflowboss.utils.AESUtil;
import cn.quantgroup.cashloanflowboss.utils.ChineseIDCardNumberGenerator;
import cn.quantgroup.cashloanflowboss.utils.GetEncryptContentAndMd5;
import cn.quantgroup.cashloanflowboss.utils.http.HttpRequest;
import cn.quantgroup.user.retbean.XUser;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public class ApplyLoanServiceImpl implements ApplyLoanService {
String idNo = ChineseIDCardNumberGenerator.generate();
String orderNo="testOrderNo_0001";
@Value("${qapi.http.net}")
private String qapiHttp;
@Autowired
OneClickDataRespository oneClickDataRespository;
@Autowired
CLFCenterServiceImpl clfCenterService;
@Autowired
PhoneInfoService phoneInfoService;
OneClickOV oneClickOV;
ClfChannelConfiguration clfChannelConfiguration;
public static String md5Keywy = "qEAxMJBv";
public static String aesKeywy = "sxD8KO79EDK0N0AJ";
Result oneClickReslut=null;
@Override
public Result applyLoan(OneClickModel oneClickModel){
JSONObject result;
oneClickReslut=new Result();
oneClickOV=new OneClickOV();
if(oneClickModel.getChannel().equals(ChannelEnum.ZHANGHZONG.getCode())){
result= zhangZhongApply(oneClickModel);
}else if(oneClickModel.getChannel().equals(ChannelEnum.SHIGUANGFQ.getCode())){
result= shiGuangFenQiApply();
}else if(oneClickModel.getChannel().equals(ChannelEnum.XIAOJUMAO.getCode())){
result= xiaoJMApply();
}else if(oneClickModel.getChannel().equals(ChannelEnum.GUOMEI.getCode())){
result= guoMeiApply();
}else if(oneClickModel.getChannel().equals(ChannelEnum.WEIDIAN.getCode())){
result= weiDianApply();
}else{
result= defautApply();
}
String getDecryption = AESUtil.decryptAfterBase64Decode(result.get("context").toString(), aesKeywy);
log.info("解密的getDecryption的结果={}" + getDecryption);
JSONObject getDecryptionResult = (JSONObject) JSONObject.parse(getDecryption);
log.info("打印一下getDecryptionResult={}",getDecryptionResult.get("bizData"));
JSONObject bizData= (JSONObject) JSONObject.parse(getDecryptionResult.get("bizData").toString());
log.info("bizData={}",bizData);
String code=bizData.get("code").toString();
String businessCode=bizData.get("businessCode").toString();
String msg=bizData.get("msg").toString();
log.info("msg={}",msg);
if(code.equals("0") && businessCode.equals("0000")){
//申请的数据插入数据库 one_click_data
OneClickData oneClickData=new OneClickData();
oneClickData.setPhone(oneClickModel.getPhone());
oneClickData.setChannel(GetEncryptContentAndMd5.getChannelName(oneClickModel.getChannel()));
oneClickData.setChannelcode(oneClickModel.getChannel());
oneClickData.setChannelOrderNo(orderNo);
//通过手机号获取用户信息
XUser xUser=phoneInfoService.selectUserID(oneClickModel.getPhone());
oneClickData.setUserId(xUser.getId().toString());
oneClickData.setUuid(xUser.getUuid());
oneClickData.setType(Integer.parseInt(oneClickModel.getType()));
oneClickData.setCreditStatus(CreditStatusEnum.DEFAULT);
oneClickData.setLoanStatus(LoanStatusEnum.DEFAULT);
oneClickData.setFundCorpId(oneClickModel.getFundID());
// 把提现的数据存放到表one_click_data中
oneClickDataRespository.save(oneClickData);
oneClickOV.setCreditMessage(CreditStatusEnum.DEFAULT.getDesc());
oneClickOV.setLoanMessage(LoanStatusEnum.DEFAULT.getDesc());
oneClickReslut.setData(oneClickOV);
oneClickReslut.setCode(ApplicationStatus.SUCCESS.getCode());
oneClickReslut.setMessage(msg);
return oneClickReslut;
}else{
oneClickReslut.setMessage(msg);
oneClickReslut.setData(oneClickOV);
oneClickReslut.setCode(ApplicationStatus.FAILURE.getCode());
return oneClickReslut;
}
}
@Override
public JSONObject zhangZhongApply(OneClickModel oneClickModel) {
String url = qapiHttp+"/ex/api/v2/applyLoan/ZHANGZHONG";
//测试
// String url = "http://qapi-arch.liangkebang.net"+"/ex/api/v2/applyLoan/ZHANGZHONG";
//获取当前的渠道秘钥
clfChannelConfiguration=clfCenterService.findChannelConfigurationByChannelId(Long.parseLong(oneClickModel.getChannel().toString()));
md5Keywy=clfChannelConfiguration.getMd5Key();
aesKeywy=clfChannelConfiguration.getAesKey();
orderNo="zhangzhong_userid1_"+oneClickModel.getPhone()+"_"+System.currentTimeMillis();
String name = "简介";
String channelUserId = "zhangzhong_userid1_"+ oneClickModel.getPhone();
Map<String, Object> paras =new HashMap<String, Object>();
paras.put("address", "湖北省恩施州利川团堡");
paras.put("applyAmount", oneClickModel.getAmount());
paras.put("applyTerm", oneClickModel.getTermNo());
paras.put("districtCode","123456");
paras.put("education","MASTER");
paras.put("email","22@qq.com");
paras.put("emergencyContactNameA","孙打她");
paras.put("emergencyContactNameB","斯柯达");
paras.put("emergencyContactPhoneA","13099992222");
paras.put("emergencyContactPhoneB","13577771111");
paras.put("emergencyContactRelationA","FRIEND");
paras.put("emergencyContactRelationB","CHILDREN");
paras.put("hasCar","false");
paras.put("hasCreditCard","false");
paras.put("hasHouse","false");
paras.put("hasSocialSecurity","false");
paras.put("idCardNo",idNo);
paras.put("income","CASH");
paras.put("incomeRange","BELOW_20000");
paras.put("kaTest","false");
paras.put("loanDemandPurpose", "FAMILY_DECORATION");
paras.put("marryStatus","MARRIED");
paras.put("occupation","EMPLOYEE");
paras.put("orderNo",orderNo);
paras.put("phone", oneClickModel.getPhone());
paras.put("qq","233223222");
Map<String,String> para2 = new HashMap<String, String>();
para2.put("amount","11110.00");
para2.put("period","6");
paras.put("scenarioData", para2);
paras.put("userName",name);
Map<String,Object> para3 = new HashMap<String, Object>();
Map<String,Object> para4 = new HashMap<String, Object>();
Map<String,Object> para5 = new HashMap<String, Object>();
para4.put("name",name);
para4.put("citizen_id",idNo);
para4.put("valid_date_begin","2013-07-26");
para4.put( "valid_date_end", "2023-07-26");
para4.put( "address","广州市天河区五山路433号大院华农嵩山区26102房");
para4.put("gender", "男");
para4.put("nation", "汉");
para4.put("agency", "广州市公安局夭河分局");
para4.put( "picModel","1");
para4.put( "liveType","face");
para4.put("idCardBaseContentAUrl", "http://img.tuanzidai.cn/loan_database/1541984565253.jpeg");
para4.put( "idCardBaseContentBUrl","http://img.tuanzidai.cn/loan_database/1541501121557.jpeg");
para4.put("livePhotoContentUrl","http://img.tuanzidai.cn/loan_database/1543170265119.jpeg");
Map<String,Object> para6 = new HashMap<String, Object>();
para6.put( "confidence","82.584");
para5.put("1e-3","62.169");
para5.put("1e-5","74.399");
para5.put("1e-4","69.315");
para5.put("1e-6","78.038");
para6.put("thresholds",para5);
para4.put("result_idcard_photo",para6);
para3.put("ocr",para4);
paras.put("authInfo",para3);
paras.put("channelUserId",channelUserId);
Map<String,String> para7= new HashMap<String,String>();
para7.put("name", "OCR");
para7.put( "organization","1");
ArrayList listPara1 = new ArrayList();
listPara1.add(0,para7);
paras.put("creditList", listPara1);
String encryptContent = GetEncryptContentAndMd5.getEncryptContent(paras, aesKeywy, md5Keywy);
Map<String,String> content_map = new HashMap<String, String>();
content_map.put("content", encryptContent);
log.info("查看结果content={}", content_map);
JSONObject result = HttpRequest.doPostReturnResponseJson(url, content_map);
return result;
}
@Override
public JSONObject shiGuangFenQiApply() {
return null;
}
@Override
public JSONObject xiaoJMApply() {
return null;
}
@Override
public JSONObject guoMeiApply() {
return null;
}
@Override
public JSONObject weiDianApply() {
return null;
}
@Override
public JSONObject defautApply() {
return null;
}
public static void main(String[] arg){
// OneClickModel oneClickModel2 = new OneClickModel();
// oneClickModel2.setType("1");
// oneClickModel2.setChannel("159858");
// oneClickModel2.setTermNo("12");
// oneClickModel2.setPhone("17800000009");
// oneClickModel2.setAmount("10000");
// oneClickModel2.setFundID("710");
// ApplyLoanServiceImpl applyLoanService=new ApplyLoanServiceImpl();
// applyLoanService.applyLoan(oneClickModel2);
System.out.print("打印时间"+System.currentTimeMillis());
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.ChannelEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.LoanStatusEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickDataRespository;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.CashWithdrawalService;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterServiceImpl;
import cn.quantgroup.cashloanflowboss.utils.BankCardNumberGenerator;
import cn.quantgroup.cashloanflowboss.utils.BankCardTypeEnum;
import cn.quantgroup.cashloanflowboss.utils.BankNameEnum;
import cn.quantgroup.cashloanflowboss.utils.GetEncryptContentAndMd5;
import cn.quantgroup.cashloanflowboss.utils.http.HttpRequest;
import cn.quantgroup.user.retbean.XUser;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/12/18.
*/
@Slf4j
@Service
public class CashWithdrawalServiceImpl implements CashWithdrawalService{
@Value("${qapi.http.net}")
private String qapiHttp;
@Autowired
OneClickDataRespository oneClickDataRespository;
@Autowired
CLFCenterServiceImpl clfCenterService;
@Autowired
PhoneInfoService phoneInfoService;
ClfChannelConfiguration clfChannelConfiguration;
public static String md5Keywy = "qEAxMJBv";
public static String aesKeywy = "sxD8KO79EDK0N0AJ";
/*
*申请提现请求
* */
@Override
public Result applyLoan(OneClickModel oneClickModel) {
JSONObject result;
if(oneClickModel.getChannel().equals(ChannelEnum.ZHANGHZONG.getCode())){
result= applyZhangZhongLoan(oneClickModel);
}else if(oneClickModel.getChannel().equals(ChannelEnum.SHIGUANGFQ.getCode())){
result= null;
}else if(oneClickModel.getChannel().equals(ChannelEnum.XIAOJUMAO.getCode())){
result= null;
}else if(oneClickModel.getChannel().equals(ChannelEnum.GUOMEI.getCode())){
result= null;
}else if(oneClickModel.getChannel().equals(ChannelEnum.WEIDIAN.getCode())){
result= null;
}else{
result= null;
}
return null;
}
/*
* 掌众的申请提现
* */
public JSONObject applyZhangZhongLoan(OneClickModel oneClickModel){
String url = qapiHttp+"/ex/api/v2/withdraw/ZHANGZHONG";
//通过手机号获取用户信息
String bankCardNumber= BankCardNumberGenerator.generate(BankNameEnum.CCB, BankCardTypeEnum.DEBIT);
String bankCode="CCB";
String bankName="建设银行";
Map<String,String> paras = new HashMap<String, String>();
//通过手机号获取用户信息
XUser xUser=phoneInfoService.selectUserID(oneClickModel.getPhone());
Long userId=xUser.getId();
//从数据库中获取当前的订单
log.info("getPhone={},CreditStatusEnum={},LoanStatusEnum={}", userId, CreditStatusEnum.DEFAULT.getCode(), LoanStatusEnum.DEFAULT.getCode());
OneClickData oneClickData=oneClickDataRespository.findByPhoneAndCreditStatusAndLoanStatus(userId.toString().trim(), CreditStatusEnum.CREDIT_SUCC.getCode(), LoanStatusEnum.DEFAULT.getCode());
paras.put("channelOrderNumber",oneClickData.getChannelOrderNo());
paras.put("bankCardNumber",bankCardNumber);
paras.put("bankCode",bankCode);
paras.put("bankName",bankName);
paras.put("reservePhoneNumber",oneClickModel.getPhone());
//获取当前的渠道秘钥
clfChannelConfiguration=clfCenterService.findChannelConfigurationByChannelId(Long.parseLong(oneClickModel.getChannel().toString()));
md5Keywy=clfChannelConfiguration.getMd5Key();
aesKeywy=clfChannelConfiguration.getAesKey();
String encryptContent = GetEncryptContentAndMd5.getEncryptContent(paras, aesKeywy, md5Keywy);
Map<String,String> content_map = new HashMap<String, String>();
content_map.put("content",encryptContent);
JSONObject result = HttpRequest.doPostReturnResponseJson(url, content_map);
return null;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.LoanStatusEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickOV;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickDataRespository;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.ApplyLoanService;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.CreditGrantingService;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit;
import cn.quantgroup.cashloanflowboss.utils.GetBiNoAndFinanceProducts;
import cn.quantgroup.cashloanflowboss.utils.http.HttpRequest;
import cn.quantgroup.user.retbean.XUser;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.testng.Assert;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public class CreditGrantingServiceImpl implements CreditGrantingService{
@Autowired
ApplyLoanService applyLoanService;
@Autowired
PhoneInfoService phoneInfoService;
@Autowired
OneClickDataRespository oneClickDataRespository;
public static String txAmount = "2000";
public static String rate = "0";
@Value("${clotho.http.net}")
private String clothoHttp;
@Override
public Result authAmountAuditNotify(OneClickModel oneClickModel) throws Exception {
String auditResult="true";
if(oneClickModel.getType().equals("2") ){
auditResult="true";
}else if(oneClickModel.getType().equals("3")){
auditResult="false";
}else {
log.info("非授信需要的状态,打印一下oneClickModel.getType()={}",oneClickModel.getType());
}
return applyCreditNotify(oneClickModel,auditResult);
}
public Result applyCreditNotify(OneClickModel oneClickModel,String auditResult) throws Exception {
String url = clothoHttp + "/external/quota/auth_amount_audit/notify";
Map<String, String> paras = new HashMap<String, String>();
ArrayList listPara1 =getPublicInfo(oneClickModel);
paras.put("code", "0");
paras.put("msg", "success");
paras.put("bizChannel", "1");
//通过手机号获取用户信息
XUser xUser=phoneInfoService.selectUserID(oneClickModel.getPhone());
String uuid=xUser.getUuid();
Long userId=xUser.getId();
paras.put("uuid", uuid);
//通过用户id获取产品信息
QuotaCredit quotaCredit=phoneInfoService.selectUserAuditRecords(userId);
log.info("打印quotaCredit={}",quotaCredit);
int productId= Integer.parseInt(quotaCredit.getProductId().toString().trim()) ;
String biNo = String.valueOf(quotaCredit.getProductType());
String quotaRecordOrderNo=quotaCredit.getOrderNo();
//获取产品分配基础信息,默认rate都是0
HashMap<Object, Object> getBiNoAndFinanceProduct = GetBiNoAndFinanceProducts.getBiNoAndFinanceProduct(productId, listPara1);
paras.put("bizNo", quotaRecordOrderNo);
paras.put("bizType", biNo);
paras.put("auditResult", auditResult);
paras.put("amount", oneClickModel.getAmount());
paras.put("deadLine", "1607746332000");
paras.put("extData", "null");
paras.put("otherInformation", "");
paras.put("financeProducts", getBiNoAndFinanceProduct.get("financeProducts").toString().trim());
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Type", "application/x-www-form-urlencoded");
// 通过手机号和渠道code获取token
String getToken=phoneInfoService.getToken(oneClickModel.getPhone(), oneClickModel.getChannel());
header.put("x-auth-token", getToken);
log.info("获取paras={},获取header={}",paras,header);
JSONObject result = HttpRequest.doPostReturnResponseJson(url, paras, header);
if(result.get("statusCode").toString().trim().equals("200") && result.get("context").toString().trim().equals("success")){
//从数据库中获取当前的订单
log.info("getPhone={},CreditStatusEnum={},LoanStatusEnum={}", userId, CreditStatusEnum.DEFAULT.getCode(), LoanStatusEnum.DEFAULT.getCode());
OneClickData oneClickData=oneClickDataRespository.findByPhoneAndCreditStatusAndLoanStatus(userId.toString().trim(), CreditStatusEnum.DEFAULT.getCode(), LoanStatusEnum.DEFAULT.getCode());
log.info("获取的实体oneClickData={}",oneClickData);
//把授信请求通知的数据存放到表one_click_data中
int update= oneClickDataRespository.updateById(quotaRecordOrderNo, quotaRecordOrderNo, String.valueOf(productId), getToken, oneClickData.getId());
if (update>0){
log.info("修改成功update={}",update);
}else{
log.info("修改失败 !!!!!");
}
return new Result(ApplicationStatus.SUCCESS,new OneClickOV(CreditStatusEnum.DEFAULT.getDesc()),"风控授信回调通知成功");
}else{
return Result.buildFail("风控授信回调通知成功失败!!!,请检查数据") ;
}
}
public ArrayList getPublicInfo(OneClickModel oneClickModel){
ArrayList listPara1 = new ArrayList();
listPara1.add(0, oneClickModel.getAmount());
listPara1.add(1, oneClickModel.getTermNo());
listPara1.add(2, oneClickModel.getFundID());
listPara1.add(3, rate);
listPara1.add(4, txAmount);
return listPara1;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.LoanOperationService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public class LoanOperationServiceImpl implements LoanOperationService{
@Override
public Result applyLoanNotify(OneClickModel oneClickModel) {
return null;
}
/**
* 二次风控
* */
@Override
public void orderAuditNotify() {
}
@Override
public void updatContractStatus() {
}
@Override
public void payNotify() {
}
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl; // // //import cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickJobConfigRepository; //import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.OneClickDataOperateJobService; //import lombok.extern.slf4j.Slf4j; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.stereotype.Service; // ///** // * Created by shang on 2019/12/12. // */ //@Slf4j //@Service //public class OneClickDataOperateJobServiceImpl implements OneClickDataOperateJobService { //@Autowired //private OneClickJobConfigRepository oneClickJobConfigRepository; // @Override // public void excuteCreditSuccessJob() { // // } // // @Override // public void excuteCreditFailJob() { // // } // // @Override // public void excuteSelectCreditStatusJob() { // // // // //查找请求类型:2授信成功、4放款成功、5放款失败、6清算的单,并且当前的授信状态是0授信中 // // 当前授信中的单在apply_quota_record 查看状态是apply_status=2 时间倒序 //// List<OneClickJobConfig> oneClickDataList= oneClickJobConfigRepository.findAllActive(); // // // 所有的list查询用户审核记录:查出来的userid在表quota_credit 的is_active=0 可用状态 并且通过order_no // // 符合条件的状态授信修改成功 // //并且查询需要进行放款操作:查询 4放款成功、6清算的单 // // 执行提现操作 // //查看当前提现表是否状态正确 // // // // // } // // @Override // public void excuteFundSucessJob() { // // } // // @Override // public void excuteFundFailJob() { // // } // // @Override // public void excuteSelectFundStatusJob() { // // } //}
\ No newline at end of file
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.ChannelEnum;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.ApplyLoanService;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.CreditGrantingService;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.OneClickDataOperateService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Created by shang on 2019/12/9.
*/
@Slf4j
@Service
public class OneClickDataOperateServiceImpl implements OneClickDataOperateService {
@Autowired
private ApplyLoanService applyLoanService;
@Autowired
private CreditGrantingService creditGrantingService;
@Override
public Result OnekeyApply(OneClickModel oneClickModel) {
return applyLoanService.applyLoan(oneClickModel);
}
@Override
public Result OneKeyCashWithdrawal(OneClickModel oneClickModel) {
return null;
}
@Override
public Result OneKeyCreditSuccessOrFail(OneClickModel oneClickModel) throws Exception {
Result creditResult=applyLoanService.applyLoan(oneClickModel);
if(creditResult.getCode()==200000){
return creditGrantingService.authAmountAuditNotify(oneClickModel);
}else {
log.info("当前进行进件申请失败oneClickModel={},creditResult={}",oneClickModel,creditResult);
return creditResult;
}
}
@Override
public OneClickReslut OneKeyLoanSuccessOrFail(OneClickModel oneClickModel) {
return null;
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService;
import cn.quantgroup.cashloanflowboss.spi.user.service.XyqbUserService;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit;
import cn.quantgroup.cashloanflowboss.spi.xyqb.repository.QuotaCreditRepository;
import cn.quantgroup.cashloanflowboss.utils.GetAuthorization;
import cn.quantgroup.cashloanflowboss.utils.http.HttpRequest;
import cn.quantgroup.user.retbean.XUser;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public class PhoneInfoServiceImpl implements PhoneInfoService {
public static String token = "";
@Value("${NAMESPACE}")
private String nameSpace;
@Value("${passportapi.http}")
private String passportapiHttp;
@Value("${api.http.net}")
private String apiHttp;
@Autowired
QuotaCreditRepository quotaCreditRepository;
@Autowired
XyqbUserService xyqbUserService;
public String getToken(String phone,String createdFrom) throws Exception {
String url = passportapiHttp + "/user/login/fastV1";
Map<String, String> paras = new HashMap<String, String>();
paras.put("channelId", "1");
paras.put("createdFrom", createdFrom);
paras.put("key", "xyqb");
paras.put("btRegisterChannelId", "");
paras.put("dimension", "");
paras.put("click_id", "");
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Type", "application/x-www-form-urlencoded");
String verification = GetAuthorization.getAuthorizationEncryption(phone);
header.put("Authorization", verification);
JSONObject result = HttpRequest.doPostReturnResponseJson(url, paras, header);
JSONObject resultDate = (JSONObject) result.get("data");
if(result.get("code").toString().trim().equals("0000") && result.get("businessCode").toString().trim().equals("0000")){
token = resultDate.get("token").toString().trim();
}else{
log.info("获取token失败,返回失败原因:{}",result);
}
return token;
}
/**
* 同步session到xyqb
* 返回空
*/
@Test(description = "同步session到xyqb")
@Override
public void sySessionToXYQB() {
String url = apiHttp + "/ex/login/receive_token?token=" + token;
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Type", "application/json");
JSONObject reslut = HttpRequest.doGetReturnResponseJson(url, null, header);
log.info("获取返回结果,{}", reslut);
Assert.assertEquals(reslut.get("statusCode").toString().trim(), "0");
}
@Override
public XUser selectUserID(String phone) {
return xyqbUserService.findUserByPhoneNo(phone);
}
@Override
public void authIdNo() {
}
@Override
public void creditSession() {
}
@Override
public void authBasic2() {
}
@Override
public void authOcrUrl() {
}
@Override
public void ocrAtuhUp() {
}
@Override
public void ocrAtuhDown() {
}
@Override
public void ocrSubmit() {
}
@Override
public void getSpiderCenter() {
}
@Override
public void spiderC() {
}
@Override
public void submitAuth() {
}
@Override
public QuotaCredit selectUserAuditRecords(Long qgUserId) {
return quotaCreditRepository.findByUserId(qgUserId);
}
@Override
public void spiderFinishNotic() {
}
@Override
public void spiderReportFinishNotic() {
}
@Override
public void updat800QouteProductType() {
}
public static void main(String[] args) throws Exception {
PhoneInfoServiceImpl phon = new PhoneInfoServiceImpl();
phon.nameSpace = "arch";
phon.passportapiHttp = "http://passportapi-arch.liangkebang.net";
log.info("打印,token={}", phon.getToken("13067912192",""));
// phon.sySessionToXYQB();
// String a="222";
// log.info("[getParamsFromEOS],result={}",a);
}
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.core.base.Result;
/**
* Created by shang on 2019/12/3.
*/
public interface LoanOperationService {
/*
* 放款通知请求
* */
Result applyLoanNotify(OneClickModel oneClickModel);
/**
* 二次风控
* */
void orderAuditNotify();
/**
* 修改合同状态
* */
void updatContractStatus();
/**
* 放款结果通知
* */
void payNotify();
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/12.
// */
//public interface OneClickDataOperateJobService {
// /*
// * 执行授信成功请求
// * */
// void excuteCreditSuccessJob();
//
// /*
// * 执行授信失败请求
// * */
// void excuteCreditFailJob();
//
// /*
// * 执行查询授信状态
// * */
// void excuteSelectCreditStatusJob();
//
// /*
// * 执行放款成功请求
// * */
// void excuteFundSucessJob();
//
// /*
// * 执行放款失败请求
// * */
// void excuteFundFailJob();
//
// /*
// * 执行查询放款状态
// * */
// void excuteSelectFundStatusJob();
//
//}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut;
import cn.quantgroup.cashloanflowboss.core.base.Result;
/**
* Created by shang on 2019/12/5.
*/
public interface OneClickDataOperateService {
Result OnekeyApply(OneClickModel oneClickModel);
Result OneKeyCashWithdrawal(OneClickModel oneClickModel);
Result OneKeyCreditSuccessOrFail(OneClickModel oneClickModel) throws Exception;
OneClickReslut OneKeyLoanSuccessOrFail(OneClickModel oneClickModel);
}
package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit;
import cn.quantgroup.user.retbean.XUser;
/**
* Created by shang on 2019/12/3.
*/
public interface PhoneInfoService {
/**
* 获取token
* phone 入参手机号
* 返回token
*/
String getToken(String phone,String createdFrom) throws Exception ;
/**
* 同步session到xyqb
* 返回空
*/
void sySessionToXYQB();
/**
* 同步session到xyqb
* 返回空
*/
XUser selectUserID(String phone);
/**
* 实名认证
*/
void authIdNo();
/**
* 授信session同步
*/
void creditSession();
/**
* 基础信息
*/
void authBasic2();
/**
* 进入上传身份证页
*/
void authOcrUrl();
/**
* 上传正面
*/
void ocrAtuhUp();
/**
* 上传负面
*/
void ocrAtuhDown();
/**
* 提交拍照认证
*/
void ocrSubmit();
/**
* 查询授信中心ID
*/
void getSpiderCenter();
/**
* 授信
*/
void spiderC();
/**
* 提交审核
*/
void submitAuth();
/**
* 查询用户审核记录
*/
QuotaCredit selectUserAuditRecords(Long qgUserId);
/**
* 授信完成通知xyqb
*/
void spiderFinishNotic();
/**
* 爬虫授权完成通知 xyqb
*/
void spiderReportFinishNotic();
/**
* 800 修改配额产品类型
*/
void updat800QouteProductType();
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/5.
// */
//public interface RepaymentPlatService {
//}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public class ScheduleService {
//}
package cn.quantgroup.cashloanflowboss.spi.xyqb.entity;
import cn.quantgroup.cashloanflowboss.utils.CommonConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.persistence.*;
import java.sql.Timestamp;
/**
* Created by shang on 2019/12/18.
* 配额授信
*/
@Data
@Entity
@Table(name = "quota_credit")
public class QuotaCredit {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 用户ID
*/
@Column(name = "user_id")
private Long userId;
/**
* 预留字段, 客户ID
*/
@Column(name = "customer_id")
private String customerId;
/**
* 渠道
*/
@Column(name = "channel")
private Long channel;
/**
* 和授信中心关联字段
*/
@Column(name = "order_no")
private String orderNo;
/**
* 授信状态
*
*/
@Column(name = "credit_status")
private int creditStatus;
/**
* 授信信息来源
*
*/
@Column(name = "credit_source")
private int creditSource;
/**
* 产品id,关联产品表
* KA 渠道来的数据,会提前把这个值传过来,需要存下来之后用
*/
@Column(name = "product_id")
private Long productId;
/**
* 产品类型; 0:现金分期;1:白条循环;2:现金循环额度
*
*
*/
@Column(name = "product_type")
private int productType;
/**
* 授信状态
*/
@Column(name = "remark")
private String remark = "";
/**
* 接收到风控回调时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name = "receive_at")
private Timestamp receiveAt;
@Column(name = "created_at")
private Timestamp createdAt;
@Column(name = "updated_at")
private Timestamp updatedAt;
/**
* 马甲包数据
*/
@Column(name = "loan_vest_info")
private String loanVestInfo = "";
/**
* app 渠道
*/
@Column(name = "app_channel")
private String appChannel = "";
/**
* 可用状态
*/
@Column(name = "is_active")
private Boolean isActive = true;
@PrePersist
public void prePersist() {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
createdAt = timestamp;
updatedAt = timestamp;
receiveAt = CommonConstant.DEFAULT_TIME;
}
@PreUpdate
public void preUpdate() {
updatedAt = new Timestamp(System.currentTimeMillis());
}
}
package cn.quantgroup.cashloanflowboss.spi.xyqb.repository;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.Contract;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit;
import cn.quantgroup.cashloanflowboss.spi.xyqb.source.XYQBDataSource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
* Created by shang on 2019/12/18.
*/
@XYQBDataSource
@Repository
public interface QuotaCreditRepository extends JpaRepository<QuotaCredit,Long> {
@Query(value = "select * from quota_credit where user_id = ?1 and is_active = 1 and credit_status=1 order by id desc limit 1", nativeQuery = true)
QuotaCredit findByUserId(Long qgUserId);
}
package cn.quantgroup.cashloanflowboss.utils;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* AES编码器工具
* 使用AES加密解密 AES-128-ECB加密
* @version 1.0
*/
public class AESUtil {
/**
* KEY算法
*/
private static final String KEY_ALGORITHM = "AES";
/**
* 加密算法
* "/算法/模式/补码方式"
*/
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
/**
* 编码格式
*/
private static final String data_encoding = "utf-8";
/**
* 数据加密
* @param data 待加密的数据
* @param key 加密使用的KEY
* @return 加密之后的数据
*/
public static String encryptAndBase64Encode(String data, String key) {
try {
return encryptAndBase64Encode(data.getBytes(data_encoding), key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 对字节数组加密
* @param data
* @param key
* @return
*/
public static String encryptAndBase64Encode(byte[] data, String key) {
try {
if (key == null || "".equals(key.trim().length())) {
return null;
}
byte[] raw = key.getBytes(data_encoding);
SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(data);
return new Base64().encodeToString(encrypted);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 数据解密,返回字符串
* @param data 待解密的数据
* @param key 解密使用的KEY
* @return 解密之后的数据
*/
public static String decryptAfterBase64Decode(String data, String key) {
try {
byte[] bytes = decryptAfterBase64DecodeToByte(data, key);
if (bytes != null && bytes.length > 0){
return new String(bytes, data_encoding);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 数据解密,返回字节数据
* @param data
* @param key
* @return
*/
public static byte[] decryptAfterBase64DecodeToByte(String data, String key) {
try {
if (key == null || "".equals(key.trim().length())) {
return null;
}
byte[] raw = key.getBytes(data_encoding);
SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = new Base64().decode(data);
byte[] original = cipher.doFinal(encrypted1);
return original;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
package cn.quantgroup.cashloanflowboss.utils;
import org.apache.commons.lang3.StringUtils;
import java.util.Random;
/**
* <pre>
* 生成随机银行卡号:
*
* 参考:效验是否为银行卡,用于验证:
* 现行 16 位银联卡现行卡号开头 6 位是 622126~622925 之间的,7 到 15 位是银行自定义的,
* 可能是发卡分行,发卡网点,发卡序号,第 16 位是校验码。
* 16 位卡号校验位采用 Luhm 校验方法计算:
* 1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
* 2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
* 3,将加法和加上校验位能被 10 整除。
* </pre>
*/
public class BankCardNumberGenerator {
public static String generate() {
Random random = new Random(System.currentTimeMillis());
Integer prev = 622126 + random.nextInt(925 + 1 - 126);
return generateByPrefix(prev);
}
/**
* <pre>
* 根据给定前六位生成卡号
* </pre>
*/
public static String generateByPrefix(Integer prefix) {
Random random = new Random(System.currentTimeMillis());
String bardNo = prefix
+ StringUtils.leftPad(random.nextInt(999999999) + "", 12, "0");
char[] chs = bardNo.trim().toCharArray();
int luhnSum = LuhnUtils.getLuhnSum(chs);
char checkCode = luhnSum % 10 == 0 ? '0' : (char) (10 - luhnSum % 10 + '0');
return bardNo + checkCode;
}
/**
* 根据银行名称 及银行卡类型生成对应卡号
*
* @param bankName 银行名称
* @param cardType 银行卡类型
* @return 银行卡号
*/
public static String generate(BankNameEnum bankName, BankCardTypeEnum cardType) {
Integer[] candidatePrefixes = null;
if (cardType == null) {
candidatePrefixes = bankName.getAllCardPrefixes();
} else {
switch (cardType) {
case DEBIT:
candidatePrefixes = bankName.getDebitCardPrefixes();
break;
case CREDIT:
candidatePrefixes = bankName.getCreditCardPrefixes();
break;
default:
}
}
if (candidatePrefixes == null || candidatePrefixes.length == 0) {
throw new RuntimeException("没有该银行的相关卡号信息");
}
Integer prefix = candidatePrefixes[new Random().nextInt(candidatePrefixes.length)];
return generateByPrefix(prefix);
}
public static void main(String[] args) {
System.out.println(generate(BankNameEnum.CCB, BankCardTypeEnum.DEBIT));
System.out.println(generate());
}
}
package cn.quantgroup.cashloanflowboss.utils;
/**
* <pre>
* 银行卡类型枚举类
* Created by Binary Wang on 2017-3-31.
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
* </pre>
*/
public enum BankCardTypeEnum {
/**
* 借记卡/储蓄卡
*/
DEBIT("借记卡/储蓄卡"),
/**
* 信用卡/贷记卡
*/
CREDIT("信用卡/贷记卡");
private final String name;
BankCardTypeEnum(String name) {
this.name = name;
}
}
package cn.quantgroup.cashloanflowboss.utils;
import org.apache.commons.lang3.ArrayUtils;
/**
* <pre>
* 常见银行名称枚举类
* Created by Binary Wang on 2017-3-31.
*
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
* </pre>
*/
public enum BankNameEnum {
/**
* <pre>
* 中国工商银行
* 中国工商银行VISA学生国际信用卡:427020
* 中国工商银行VISA国际信用卡金卡:427030
* 中国工商银行MC国际信用卡普通卡:530990
* 中国工商银行新版人民币贷记卡普卡:622230
* 中国工商银行新版人民币贷记卡金卡:622235
* 中国工商银行新版信用卡(准贷)普卡:622210
* 中国工商银行新版信用卡(准贷)金卡:622215
* 中国工商银行牡丹灵通卡借记卡:622200
* 中国工商银行原牡丹灵通卡借记卡:955880
* </pre>
*/
ICBC("102", "中国工商银行", "工行", new Integer[]{622200, 955880},
new Integer[]{427020, 427030, 530990, 622230, 622235, 622210, 622215}),
/**
* <pre>
* 中国农业银行
* 中国农业银行人民币贷记卡 香港旅游卡贷记卡金卡:622836
* 中国农业银行人民币贷记卡 香港旅游卡贷记卡普卡:622837
* 中国农业银行世纪通宝借记卡:622848
* 农业银行:552599、404119、404121、519412、403361、558730、520083、520082、519413、49102、404120、404118、53591、404117
* </pre>
*/
ABC("103", "中国农业银行", "农行"),
/**
* <pre>
* 中国银行
* 中国银行中银都市卡:622760
* 中国银行BOC系列VISA标准卡普通卡/VISA高校认同卡:409666
* 中国银行国航知音信用卡:438088
* 中国银行上海市分行长城人民币贷记卡普通卡:622752
* </pre>
*/
BOC("104", "中国银行", "中行"),
/**
* <pre>
* 中国建设银行
* 中国建设银行VISA龙卡借记卡:436742
* 中国建设银行VISA龙卡贷记卡:436745
* 中国建设银行支付宝龙卡借记卡:622280
* </pre>
*/
CCB("105", "中国建设银行", "建行", new Integer[]{622280}, new Integer[]{436745}),
/**
* <pre>
* 交通银行
* 交通银行VISA普通卡:458123
* 交通银行MC信用卡普通卡:521899
* 交通银行太平洋卡借记卡:622260
* </pre>
*/
BCOM("301", "交通银行", "交行"),
/**
* <pre>
* 中信银行
* 中信银行国航知音信用卡/万事达卡普通卡:518212
* 中信银行理财宝卡借记卡:622690
* 中信银行万事达卡金卡:520108
* 中信银行蓝卡/I卡信用卡:622680
* 中信银行:376968、376966、622918、622916、376969、622919、556617、403391、558916、514906、400360、433669、433667、433666、404173、404172、404159、404158、403393、403392、622689、622688、433668、404157、404171、404174、628209、628208、628206
* </pre>
*/
CITIC("302", "中信银行"),
/**
* <pre>
* 中国光大银行
* 光大银行卡号开头:406254、622655、622650、622658、356839、486497、481699、543159、425862、406252、356837、356838、356840、622161、628201、628202
* </pre>
*/
CEB("303", "中国光大银行"),
/**
* <pre>
* 华夏银行
* 华夏银行:539867,528709
* 华夏银行MC钛金卡:523959
* 华夏银行人民币卡金卡:622637
* 华夏银行人民币卡普卡:622636
* 华夏银行MC金卡:528708
* 华夏银行MC普卡:539868
* </pre>
*/
HXB("304", "华夏银行"),
/**
* <pre>
* 中国民生银行
* 民生银行:407405,517636
* 中国民生银行MC金卡:512466
* 中国民生银行星座卡借记卡:415599
* 中国民生银行VISA信用卡金卡:421870
* 中国民生银行蝶卡银卡借记卡:622622
* 民生银行:528948,552288,556610,622600,622601,622602,622603,421869,421871,628258
* </pre>
*/
CMBC("305", "中国民生银行"),
/**
* <pre>
* 广东发展银行
* 广东发展银行新理财通借记卡:622568
* 广东发展银行南航明珠卡MC金卡:520152
* 广东发展银行南航明珠卡MC普卡:520382
* 广东发展银行理财通借记卡:911121
* 广发真情卡:548844
* </pre>
*/
CGB("306", "广东发展银行"),
/**
* <pre>
* 平安银行
* 深圳平安银行:622155,622156
* 深圳平安银行万事达卡普卡:528020
* 深圳平安银行万事达卡金卡:526855
* 深发展联名普卡:435744
* 深发展卡普通卡:622526
* 深发展联名金卡:435745
* 深圳发展银行:998801,998802
* 深发展卡金卡:622525
* 深圳发展银行发展卡借记卡:622538
* </pre>
*/
PAB("307", "平安银行", new Integer[]{622155, 622156}, new Integer[]{}),
/**
* <pre>
* 招商银行
* 招商银行哆啦A梦粉丝信用卡:518710
* 招商银行哆啦A梦粉丝信用卡珍藏版卡面/MC贝塔斯曼金卡/MC车主卡:518718
* 招商银行QQ一卡通借记卡:622588
* 招商银行HELLO KITTY单币卡:622575
* 招商银行:545947、521302、439229、552534、622577、622579、439227、479229、356890、356885、545948、545623、552580、552581、552582、552583、552584、552585、552586、552588、552589、645621、545619、356886、622578、622576、622581、439228、628262、628362、628362、628262
* 招商银行JCB信用卡普通卡:356889
* 招商银行VISA白金卡:439188
* 招商银行VISA信用卡普通卡:439225招商银行VISA信用卡金卡:439226
* </pre>
*/
CMB("308", "招商银行", "招行", new Integer[]{622588, 545947, 521302, 439229, 552534, 622577, 622579, 439227, 479229, 356890, 356885, 545948, 545623, 552580, 552581, 552582, 552583, 552584, 552585, 552586, 552588, 552589, 645621, 545619, 356886, 622578, 622576, 622581, 439228, 628262, 628362, 628362, 628262}, new Integer[]{}),
/**
* <pre>
* 兴业银行
* 兴业银行:451289、622902、622901、527414、524070、486493、486494、451290、523036、486861、622922
* </pre>
*/
CIB("309", "兴业银行"),
/**
* <pre>
* 上海浦东发展银行
* 上海浦东发展银行奥运WOW卡美元单币:418152
* 上海浦东发展银行WOW卡/奥运WOW卡:456418
* 上海浦东发展银行东方卡借记卡:622521
* 上海浦东发展银行VISA普通卡:404738
* 上海浦东发展银行VISA金卡:404739
* 浦东发展银行:498451,622517,622518,515672,517650,525998,356850,356851,356852
* </pre>
*/
SPDB("310", "上海浦东发展银行"),
/**
* <pre>
* 华润银行
* </pre>
*/
CR("999999", "华润银行", new Integer[]{622363}),
/**
* <pre>
* 渤海银行
* </pre>
*/
BHB("318", "渤海银行"),
/**
* <pre>
* 徽商银行
* </pre>
*/
HSB("319", "徽商银行"),
/**
* <pre>
* 江苏银行
* </pre>
*/
JSB_1("03133010", "江苏银行"),
/**
* <pre>
* 江苏银行
* </pre>
*/
JSB("03133120", "江苏银行"),
/**
* <pre>
* 上海银行
* 上海银行VISA金卡:402674
* 上海银行借记卡:622892
* </pre>
*/
SHB("04012900", "上海银行"),
/**
* <pre>
* 中国邮政储蓄银行
* 中国邮政储蓄绿卡借记卡:622188
* </pre>
*/
POST("403", "中国邮政储蓄银行"),
/**
* <pre>
* 北京银行
* 北京银行京卡借记卡:602969
* </pre>
*/
BOB("", "北京银行"),
/**
* <pre>
* 宁波银行
* 宁波银行:512431,520194,622318,622778
* 宁波银行汇通卡人民币金卡/钻石联名卡:622282
* </pre>
*/
BON("", "宁波银行");
/**
* 银行代码
*/
private final String code;
/**
* 银行名称
*/
private final String name;
/**
* 银行简称
*/
private String abbrName;
/**
* 信用卡卡号前缀数组
*/
private Integer[] creditCardPrefixes;
/**
* 借记卡卡号前缀数组
*/
private Integer[] debitCardPrefixes;
/**
* 所有卡号前缀数组
*/
private Integer[] allCardPrefixes;
BankNameEnum(String code, String name) {
this.code = code;
this.name = name;
}
BankNameEnum(String code, String name, String abbrName) {
this.code = code;
this.name = name;
this.abbrName = abbrName;
}
BankNameEnum(String code, String name, String abbrName, Integer[] debitCardPrefixes, Integer[] creditCardPrefixes) {
this.code = code;
this.name = name;
this.abbrName = abbrName;
this.creditCardPrefixes = creditCardPrefixes;
this.debitCardPrefixes = debitCardPrefixes;
this.allCardPrefixes = ArrayUtils.addAll(this.creditCardPrefixes, this.debitCardPrefixes);
}
BankNameEnum(String code, String name, Integer[] debitCardPrefixes) {
this.code = code;
this.name = name;
this.debitCardPrefixes = debitCardPrefixes;
this.allCardPrefixes = debitCardPrefixes;
}
BankNameEnum(String code, String name, Integer[] debitCardPrefixes, Integer[] creditCardPrefixes) {
this.code = code;
this.name = name;
this.creditCardPrefixes = creditCardPrefixes;
this.debitCardPrefixes = debitCardPrefixes;
this.allCardPrefixes = ArrayUtils.addAll(this.creditCardPrefixes, this.debitCardPrefixes);
}
public String getName() {
return this.name;
}
public String getAbbrName() {
return this.abbrName;
}
public Integer[] getCreditCardPrefixes() {
return this.creditCardPrefixes;
}
public Integer[] getDebitCardPrefixes() {
return this.debitCardPrefixes;
}
public Integer[] getAllCardPrefixes() {
return this.allCardPrefixes;
}
public String getCode() {
return this.code;
}
}
package cn.quantgroup.cashloanflowboss.utils;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/7/22.
*/
public class ChineseIDCardNumberGenerator {
public static String generate() {
Map<String, String> code = getAreaCode();
String areaCode = code.keySet().toArray(new String[0])[RandomUtils
.nextInt(0, code.size())]
+ StringUtils.leftPad((RandomUtils.nextInt(0, 9998) + 1) + "", 4,
"0");
String birthday = new SimpleDateFormat("yyyyMMdd").format(randomDate());
String randomCode = String.valueOf(1000 + RandomUtils.nextInt(0, 999))
.substring(1);
String pre = areaCode + birthday + randomCode;
String verifyCode = getVerifyCode(pre);
String result = pre + verifyCode;
return result;
}
private static Date randomDate() {
Calendar calendar = Calendar.getInstance();
calendar.set(1970, 1, 1);
long earlierDate = calendar.getTime().getTime();
calendar.set(2000, 1, 1);
long laterDate = calendar.getTime().getTime();
long chosenDate = RandomUtils.nextLong(earlierDate, laterDate);
return new Date(chosenDate);
}
private static String getVerifyCode(String cardId) {
String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4",
"3", "2" };
String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7",
"9", "10", "5", "8", "4", "2" };
int tmp = 0;
for (int i = 0; i < Wi.length; i++) {
tmp += Integer.parseInt(String.valueOf(cardId.charAt(i)))
* Integer.parseInt(Wi[i]);
}
int modValue = tmp % 11;
String strVerifyCode = ValCodeArr[modValue];
return strVerifyCode;
}
private static Map<String, String> getAreaCode() {
final Map<String, String> map = new HashMap<String,String>();
map.put("11", "����");
map.put("12", "���");
map.put("13", "�ӱ�");
map.put("14", "ɽ��");
map.put("15", "���ɹ�");
map.put("21", "����");
map.put("22", "����");
map.put("23", "������");
map.put("31", "�Ϻ�");
map.put("32", "����");
map.put("33", "�㽭");
map.put("34", "����");
map.put("35", "����");
map.put("36", "����");
map.put("37", "ɽ��");
map.put("41", "����");
map.put("42", "����");
map.put("43", "����");
map.put("44", "�㶫");
map.put("45", "����");
map.put("46", "����");
map.put("50", "����");
map.put("51", "�Ĵ�");
map.put("52", "����");
map.put("53", "����");
map.put("54", "����");
map.put("61", "����");
map.put("62", "����");
map.put("63", "�ຣ");
map.put("64", "����");
map.put("65", "�½�");
map.put("71", "̨��");
map.put("81", "���");
map.put("82", "����");
map.put("91", "����");
return map;
}
}
package cn.quantgroup.cashloanflowboss.utils;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
/**
* @Description: TODO
* @author xh
* @date 2017年2月28日 下午1:45:08
*/
public class CommonConstant {
//http连接池最大数量
public static final int HTTPCLIENT_CONNECTION_COUNT=400;
//单个路由最大连接数量
public static final int HTTPCLIENT_MAXPERROUTE_COUNT=10000;
//http连接最大重试次数
public static final int HTTPCLIENT_MAXRETRY_COUNT=5;
//连接超时时间
public static final int HTTPCLIENT_CONNECT_TIMEOUT=10000;
//socket超时时间
public static final int HTTPCLIENT_SOCKET_TIMEOUT=10000;
public static final String UTF8 = "UTF-8";
// 真名字
public static final String REAL_NAME="刘志国";
// 身份证号 id_card_no
public static final String ID_CARD_NO="6222800007700762652";
// eosips 获取当前zk的地址ip 端口号
public static final String EOS_IPS = "172.17.1.7";
public static final String GETZK = "http://"+EOS_IPS+"/api/apollo/env_vars?namespace=";
// postman转化项目域名
public static final String JOLYNE="http://jolyne.liangkebang.com";
// CERTIMAG_UP 身份证上
public static final String CERTIMAG_UP=LongStringParamer.getLongStringOfCERTIMAG_UP();
// 身份证下
public static final String CERTIMAG_DWON=LongStringParamer.getLongStringOfCERTIMAG_DWON();
public static final Timestamp DEFAULT_TIME = Timestamp.from(LocalDateTime.of(2000, 1, 1, 0, 0, 0).atZone(ZoneId.systemDefault()).toInstant());
}
package cn.quantgroup.cashloanflowboss.utils;
import sun.misc.BASE64Decoder;
import java.nio.charset.Charset;
import java.util.Base64;
/**
* Created by shang on 2019/7/19.
*
*/
public class GetAuthorization {
/**
* 返回加密结果
*
*
* @return authorizationEncryption 加密结果
**/
public static String getAuthorizationEncryption() throws Exception {
String phone="18201128392";
System.out.println("打印phone: "+phone);
String phoneNoBase64=GetAuthorization.encryptBASE64(phone);
String authorizationEncryption="Verification"+" "+phoneNoBase64;
return authorizationEncryption;
}
/**
* 返回加密结果
*phone 手机号
*
* @return authorizationEncryption 加密结果
**/
public static String getAuthorizationEncryption(String phone) throws Exception {
String phoneNoBase64=GetAuthorization.encryptBASE64(phone);
String authorizationEncryption="Verification"+" "+phoneNoBase64;
return authorizationEncryption;
}
/**
* 返回加密结果
*phone 手机号
*code 验证码
* @return authorizationEncryption 加密结果
**/
public static String getAuthorizationEncryption(String phone,String code) throws Exception {
String phoneNoBase64=GetAuthorization.encryptBASE64(phone,code);
String authorizationEncryption="Verification"+" "+phoneNoBase64;
return authorizationEncryption;
}
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public static String decryptBASE64(String key) throws Exception {
return new String((new BASE64Decoder()).decodeBuffer(key),"UTF-8");
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
* key手机号
code是短信验证码
整个算完是编码后的字符串,拼到Verification后,空格间隔开
*/
public static String encryptBASE64(String key) throws Exception {
return new String(Base64.getEncoder().encodeToString((key + ":0000").getBytes(Charset.forName("UTF-8"))));
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
* key手机号
* code 验证码
code是短信验证码
整个算完是编码后的字符串,拼到Verification后,空格间隔开
*/
public static String encryptBASE64(String key,String code) throws Exception {
return new String(Base64.getEncoder().encodeToString((key + ":"+"code").getBytes(Charset.forName("UTF-8"))));
}
}
package cn.quantgroup.cashloanflowboss.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Created by shang on 2019/7/23.
*/
public class GetBiNoAndFinanceProducts {
public static HashMap<Object, Object> getBiNoAndFinanceProduct(int productId, ArrayList listPara1){
HashMap<Object,Object> getResult=new HashMap<Object, Object>();
JSONArray financeProducts=new JSONArray();
JSONArray terms=new JSONArray();
JSONObject para1=new JSONObject();
if (productId == 1 || productId==4 ||productId==900 ||productId==910 || productId == 920){
if(productId == 900){
getResult.put("biNo", "9");
}else if(productId == 910){
getResult.put("biNo", "9");
}else if(productId == 920){
getResult.put("biNo", "9");
}
else{
getResult.put("biNo", "0");
}
JSONObject jsonterm=new JSONObject();
jsonterm.put("term",listPara1.get(1).toString().trim());
JSONArray fundInfo=new JSONArray();
JSONObject jsonFundInfo=new JSONObject();
jsonFundInfo.put("fundId",listPara1.get(2).toString().trim());
jsonFundInfo.put("rate",listPara1.get(3).toString().trim());
jsonFundInfo.put("rateType","1");
jsonFundInfo.put("priority","1");
jsonFundInfo.put("feeType","1");
fundInfo.add(jsonFundInfo);
jsonterm.put("fundInfo",fundInfo);
terms.add(jsonterm);
para1.put("min", listPara1.get(0).toString().trim());
para1.put("max",listPara1.get(0).toString().trim());
para1.put("terms",terms);
financeProducts.add(para1);
getResult.put("financeProducts",financeProducts);
}else if(productId == 2){
getResult.put("biNo", "2");
para1.put("min", listPara1.get(4).toString().trim());
para1.put("max",listPara1.get(0).toString().trim());
for(int i=3;i<=12;i=i+3){
JSONObject jsonterm=new JSONObject();
jsonterm.put("term",i);
JSONArray fundInfo=new JSONArray();
JSONObject jsonFundInfo=new JSONObject();
jsonFundInfo.put("fundId",listPara1.get(2).toString().trim());
jsonFundInfo.put("rate",listPara1.get(3).toString().trim());
jsonFundInfo.put("rateType","1");
jsonFundInfo.put("priority","1");
jsonFundInfo.put("feeType","1");
fundInfo.add(jsonFundInfo);
jsonterm.put("fundInfo",fundInfo);
terms.add(jsonterm);
}
para1.put("terms",terms);
financeProducts.add(para1);
getResult.put("financeProducts",financeProducts);
}
return getResult;
}
public static String getBiNo(int productId){
String biNo="0";
if (productId == 1 || productId==4){
biNo="0";
}else if(productId == 2){
biNo="2";
}else if(productId == 900 || productId == 910 || productId == 920){
biNo="9";
}
return biNo;
}
}
package cn.quantgroup.cashloanflowboss.utils;
import cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum;
import cn.quantgroup.cashloanflowboss.utils.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/12/18.
*/
@Slf4j
public class GetEncryptContentAndMd5 {
/**
* 加密加签
* @param paras
* @param aesKeywy
* @param md5Keywy
* @return
*/
public static String getEncryptContent(Object paras, String aesKeywy, String md5Keywy) {
String acs_url = "http://acs.liangkebang.com/encryptAndBase64Encode";
Map<String,String> para8 = new HashMap<String, String>();
final String bizData = JSONObject.toJSONString(paras);
Map<String,String> contentMap= new HashMap<String, String>();
contentMap.put("bizData", bizData);
contentMap.put("sign", md5(bizData.concat(md5Keywy)));
para8.put("content", JSONObject.toJSONString(contentMap));
para8.put("key",aesKeywy);
Map<String,String> header = new HashMap<String, String>();
header.put("Content-Type", "application/x-www-form-urlencoded");
JSONObject content = HttpRequest.doPostReturnResponseJson(acs_url, para8, header);
String contentStr = content.get("context").toString();
log.info("查看结果={}", contentStr);
return contentStr;
}
public static String md5(String content) {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance("md5");
} catch (NoSuchAlgorithmException e) {
log.info(e.getMessage(), e);
return null;
}
messageDigest.update(content.getBytes());
byte[] domain = messageDigest.digest();
StringBuilder md5StrBuff = new StringBuilder();
// converting domain to String
for (int i = 0; i < domain.length; i++) {
if (Integer.toHexString(0xFF & domain[i]).length() == 1) {
md5StrBuff.append("0").append(
Integer.toHexString(0xFF & domain[i]));
} else
md5StrBuff.append(Integer.toHexString(0xFF & domain[i]));
}
return md5StrBuff.toString();
}
public static String getChannelName(String channel){
for(CreditStatusEnum creditStatusEnum:CreditStatusEnum.values()){
if(channel.equals(creditStatusEnum.getCode())){
return creditStatusEnum.getDesc();
}
}
return "";
}
}
package cn.quantgroup.cashloanflowboss.utils;
import cn.quantgroup.cashloanflowboss.utils.ci.EnvUtil;
import cn.quantgroup.cashloanflowboss.utils.http.HttpRequestTester;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;
/**
*
* @author eqianyu
*
*/
@Slf4j
public class HttpUtils {
/**
* 连接接口,并生成一个通用的调用接口的agent
*
* @param
* @param
*
* @return
*/
public static final <T> T getAgent(Class<T> agent, String site, String protocol) {
String env = EnvUtil.getHttpEnvBySite(site);
boolean isOffline = System.getProperty("isOffline", "true").equalsIgnoreCase("true") ? true : false;
Assert.assertTrue(StringUtils.isNotEmpty(env), String.format("无法获取测试环境分组,请确保配置文件存在%s分组", "Http.ENV"));
log.info("开始初始化{},所属集群:{},环境分组:{}", protocol, site, env);
// 判断是否为线上环境
isOffline = env.equalsIgnoreCase("alprod") || env.equalsIgnoreCase("online") ? false : true;
System.setProperty("isOffline", String.valueOf(isOffline));
// 获取测试机ip
String ip = System.getProperty(String.format("Http.%s.%s.ip", site, env));
Assert.assertTrue(StringUtils.isNotEmpty(ip),
String.format("无法获取测试Server IP,请在配置文件中配置%s值", String.format("Http.%s.%s.ip", site, env)));
// 获取服务端口
String port = System.getProperty(String.format("Http.%s.%s.port", site, env),"");
String url=String.format("%s://%s:%s/",protocol,ip,port);
if(StringUtils.isEmpty(port)){
url=String.format("%s://%s/",protocol,ip);
}
log.info("集群:{},调用地址:{}", site, url);
return (T) new HttpRequestTester(protocol, ip, port);
}
public static final <T> T getAgent(Class<T> agent, String site) {
return getAgent(agent, site, "http");
}
public static void main(String[] args) {
String url = "https://exmail.qq.com:8080/cgi-bin/frame_html?sid=bWx62muUTpBvoBNL,2&r=7a7dd488d4b9d2f87edd43a295e33785";
url = "https://exmail.qq.com/cgi-bin/frame_html?sid=bWx62muUTpBvoBNL,2&r=7a7dd488d4b9d2f87edd43a295e33785";
}
public static String replaceProtocolIpPort(String url, String protocol, String ip, String port) {
url=url.trim();
protocol=protocol.trim();
ip=ip.trim();
port=port.trim();
if(StringUtils.isNotEmpty(port)){
port=":"+port;
}
if(url.startsWith("http:")||url.startsWith("https:")){
Assert.fail("url 格式不正确,请参考:/api/getNameById," + url);
}
if(!url.startsWith("/")){
url="/"+url;
}
return protocol+"://"+ip+port+url;
}
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
package cn.quantgroup.cashloanflowboss.utils;
/**
* <pre>
* Luhn算法工具类
* Created by Binary Wang on 2018/3/22.
* </pre>
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public class LuhnUtils {
/**
* 从不含校验位的银行卡卡号采用 Luhn 校验算法获得校验位
* 该校验的过程:
* 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
* 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
* 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
*/
public static int getLuhnSum(char[] chs) {
int luhnSum = 0;
for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
int k = chs[i] - '0';
if (j % 2 == 0) {
k *= 2;
k = k / 10 + k % 10;
}
luhnSum += k;
}
return luhnSum;
}
}
package cn.quantgroup.cashloanflowboss.utils;
import java.util.HashMap;
import java.util.Map;
/**
* Created by shang on 2019/12/11.
*/
public class RandomlyGeneratedParameters {
public static String base = "abcdefghijklmnopqrstuvwxyz0123456789";
private static String firstName="赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庚终暨居衡步都耿满弘匡国文寇广禄阙东殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后江红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于仲孙太叔申屠公孙乐正轩辕令狐钟离闾丘长孙慕容鲜于宇文司徒司空亓官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓拔夹谷宰父谷粱晋楚阎法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况后有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福百家姓续";
private static String girl="秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽 ";
private static String boy="伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";
private static String[] road="重庆大厦,黑龙江路,十梅庵街,遵义路,湘潭街,瑞金广场,仙山街,仙山东路,仙山西大厦,白沙河路,赵红广场,机场路,民航街,长城南路,流亭立交桥,虹桥广场,长城大厦,礼阳路,风岗街,中川路,白塔广场,兴阳路,文阳街,绣城路,河城大厦,锦城广场,崇阳街,华城路,康城街,正阳路,和阳广场,中城路,江城大厦,顺城路,安城街,山城广场,春城街,国城路,泰城街,德阳路,明阳大厦,春阳路,艳阳街,秋阳路,硕阳街,青威高速,瑞阳街,丰海路,双元大厦,惜福镇街道,夏庄街道,古庙工业园,中山街,太平路,广西街,潍县广场,博山大厦,湖南路,济宁街,芝罘路,易州广场,荷泽四路,荷泽二街,荷泽一路,荷泽三大厦,观海二广场,广西支街,观海一路,济宁支街,莒县路,平度广场,明水路,蒙阴大厦,青岛路,湖北街,江宁广场,郯城街,天津路,保定街,安徽路,河北大厦,黄岛路,北京街,莘县路,济南街,宁阳广场,日照街,德县路,新泰大厦,荷泽路,山西广场,沂水路,肥城街,兰山路,四方街,平原广场,泗水大厦,浙江路,曲阜街,寿康路,河南广场,泰安路,大沽街,红山峡支路,西陵峡一大厦,台西纬一广场,台西纬四街,台西纬二路,西陵峡二街,西陵峡三路,台西纬三广场,台西纬五路,明月峡大厦,青铜峡路,台西二街,观音峡广场,瞿塘峡街,团岛二路,团岛一街,台西三路,台西一大厦,郓城南路,团岛三街,刘家峡路,西藏二街,西藏一广场,台西四街,三门峡路,城武支大厦,红山峡路,郓城北广场,龙羊峡路,西陵峡街,台西五路,团岛四街,石村广场,巫峡大厦,四川路,寿张街,嘉祥路,南村广场,范县路,西康街,云南路,巨野大厦,西江广场,鱼台街,单县路,定陶街,滕县路,钜野广场,观城路,汶上大厦,朝城路,滋阳街,邹县广场,濮县街,磁山路,汶水街,西藏路,城武大厦,团岛路,南阳街,广州路,东平街,枣庄广场,贵州街,费县路,南海大厦,登州路,文登广场,信号山支路,延安一街,信号山路,兴安支街,福山支广场,红岛支大厦,莱芜二路,吴县一街,金口三路,金口一广场,伏龙山路,鱼山支街,观象二路,吴县二大厦,莱芜一广场,金口二街,海阳路,龙口街,恒山路,鱼山广场,掖县路,福山大厦,红岛路,常州街,大学广场,龙华街,齐河路,莱阳街,黄县路,张店大厦,祚山路,苏州街,华山路,伏龙街,江苏广场,龙江街,王村路,琴屿大厦,齐东路,京山广场,龙山路,牟平街,延安三路,延吉街,南京广场,东海东大厦,银川西路,海口街,山东路,绍兴广场,芝泉路,东海中街,宁夏路,香港西大厦,隆德广场,扬州街,郧阳路,太平角一街,宁国二支路,太平角二广场,天台东一路,太平角三大厦,漳州路一路,漳州街二街,宁国一支广场,太平角六街,太平角四路,天台东二街,太平角五路,宁国三大厦,澳门三路,江西支街,澳门二路,宁国四街,大尧一广场,咸阳支街,洪泽湖路,吴兴二大厦,澄海三路,天台一广场,新湛二路,三明北街,新湛支路,湛山五街,泰州三广场,湛山四大厦,闽江三路,澳门四街,南海支路,吴兴三广场,三明南路,湛山二街,二轻新村镇,江南大厦,吴兴一广场,珠海二街,嘉峪关路,高邮湖街,湛山三路,澳门六广场,泰州二路,东海一大厦,天台二路,微山湖街,洞庭湖广场,珠海支街,福州南路,澄海二街,泰州四路,香港中大厦,澳门五路,新湛三街,澳门一路,正阳关街,宁武关广场,闽江四街,新湛一路,宁国一大厦,王家麦岛,澳门七广场,泰州一路,泰州六街,大尧二路,青大一街,闽江二广场,闽江一大厦,屏东支路,湛山一街,东海西路,徐家麦岛函谷关广场,大尧三路,晓望支街,秀湛二路,逍遥三大厦,澳门九广场,泰州五街,澄海一路,澳门八街,福州北路,珠海一广场,宁国二路,临淮关大厦,燕儿岛路,紫荆关街,武胜关广场,逍遥一街,秀湛四路,居庸关街,山海关路,鄱阳湖大厦,新湛路,漳州街,仙游路,花莲街,乐清广场,巢湖街,台南路,吴兴大厦,新田路,福清广场,澄海路,莆田街,海游路,镇江街,石岛广场,宜兴大厦,三明路,仰口街,沛县路,漳浦广场,大麦岛,台湾街,天台路,金湖大厦,高雄广场,海江街,岳阳路,善化街,荣成路,澳门广场,武昌路,闽江大厦,台北路,龙岩街,咸阳广场,宁德街,龙泉路,丽水街,海川路,彰化大厦,金田路,泰州街,太湖路,江西街,泰兴广场,青大街,金门路,南通大厦,旌德路,汇泉广场,宁国路,泉州街,如东路,奉化街,鹊山广场,莲岛大厦,华严路,嘉义街,古田路,南平广场,秀湛路,长汀街,湛山路,徐州大厦,丰县广场,汕头街,新竹路,黄海街,安庆路,基隆广场,韶关路,云霄大厦,新安路,仙居街,屏东广场,晓望街,海门路,珠海街,上杭路,永嘉大厦,漳平路,盐城街,新浦路,新昌街,高田广场,市场三街,金乡东路,市场二大厦,上海支路,李村支广场,惠民南路,市场纬街,长安南路,陵县支街,冠县支广场,小港一大厦,市场一路,小港二街,清平路,广东广场,新疆路,博平街,港通路,小港沿,福建广场,高唐街,茌平路,港青街,高密路,阳谷广场,平阴路,夏津大厦,邱县路,渤海街,恩县广场,旅顺街,堂邑路,李村街,即墨路,港华大厦,港环路,馆陶街,普集路,朝阳街,甘肃广场,港夏街,港联路,陵县大厦,上海路,宝山广场,武定路,长清街,长安路,惠民街,武城广场,聊城大厦,海泊路,沧口街,宁波路,胶州广场,莱州路,招远街,冠县路,六码头,金乡广场,禹城街,临清路,东阿街,吴淞路,大港沿,辽宁路,棣纬二大厦,大港纬一路,贮水山支街,无棣纬一广场,大港纬三街,大港纬五路,大港纬四街,大港纬二路,无棣二大厦,吉林支路,大港四街,普集支路,无棣三街,黄台支广场,大港三街,无棣一路,贮水山大厦,泰山支路,大港一广场,无棣四路,大连支街,大港二路,锦州支街,德平广场,高苑大厦,长山路,乐陵街,临邑路,嫩江广场,合江路,大连街,博兴路,蒲台大厦,黄台广场,城阳街,临淄路,安邱街,临朐路,青城广场,商河路,热河大厦,济阳路,承德街,淄川广场,辽北街,阳信路,益都街,松江路,流亭大厦,吉林路,恒台街,包头路,无棣街,铁山广场,锦州街,桓台路,兴安大厦,邹平路,胶东广场,章丘路,丹东街,华阳路,青海街,泰山广场,周村大厦,四平路,台东西七街,台东东二路,台东东七广场,台东西二路,东五街,云门二路,芙蓉山村,延安二广场,云门一街,台东四路,台东一街,台东二路,杭州支广场,内蒙古路,台东七大厦,台东六路,广饶支街,台东八广场,台东三街,四平支路,郭口东街,青海支路,沈阳支大厦,菜市二路,菜市一街,北仲三路,瑞云街,滨县广场,庆祥街,万寿路,大成大厦,芙蓉路,历城广场,大名路,昌平街,平定路,长兴街,浦口广场,诸城大厦,和兴路,德盛街,宁海路,威海广场,东山路,清和街,姜沟路,雒口大厦,松山广场,长春街,昆明路,顺兴街,利津路,阳明广场,人和路,郭口大厦,营口路,昌邑街,孟庄广场,丰盛街,埕口路,丹阳街,汉口路,洮南大厦,桑梓路,沾化街,山口路,沈阳街,南口广场,振兴街,通化路,福寺大厦,峄县路,寿光广场,曹县路,昌乐街,道口路,南九水街,台湛广场,东光大厦,驼峰路,太平山,标山路,云溪广场,太清路".split(",");
private static final String[] email_suffix="@gmail.com,@yahoo.com,@msn.com,@hotmail.com,@aol.com,@ask.com,@live.com,@qq.com,@0355.net,@163.com,@163.net,@263.net,@3721.net,@yeah.net,@googlemail.com,@126.com,@sina.com,@sohu.com,@yahoo.com.cn".split(",");
public static int getNum(int start,int end) {
return (int)(Math.random()*(end-start+1)+start);
}
/**
* 返回Email
* @param lMin 最小长度
* @param lMax 最大长度
* @return
*/
public static String getEmail(int lMin,int lMax) {
int length=getNum(lMin,lMax);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = (int)(Math.random()*base.length());
sb.append(base.charAt(number));
}
sb.append(email_suffix[(int)(Math.random()*email_suffix.length)]);
return sb.toString();
}
/**
* 返回手机号码
*/
public static String[] telFirst="134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");
public static String getTel() {
int index=getNum(0,telFirst.length-1);
String first=telFirst[index];
String second=String.valueOf(getNum(1,888)+10000).substring(1);
String third=String.valueOf(getNum(1,9100)+10000).substring(1);
return first+second+third;
}
/**
* 返回中文姓名
*/
public static String name_sex = "";
public static String getChineseName() {
int index=getNum(0, firstName.length()-1);
String first=firstName.substring(index, index+1);
int sex=getNum(0,1);
String str=boy;
int length=boy.length();
if(sex==0){
str=girl;
length=girl.length();
name_sex = "女";
}else {
name_sex="男";
}
index=getNum(0,length-1);
String second=str.substring(index, index+1);
int hasThird=getNum(0,1);
String third="";
if(hasThird==1){
index=getNum(0,length-1);
third=str.substring(index, index+1);
}
return first+second+third;
}
/**
* 返回地址
* @return
*/
public static String getRoad() {
int index=getNum(0,road.length-1);
String first=road[index];
String second=String.valueOf(getNum(11,150))+"号";
String third="-"+getNum(1,20)+"-"+getNum(1,10);
return first+second+third;
}
/**
* 数据封装
* @return
*/
public static Map getAddress() {
Map map=new HashMap();
map.put("name", getChineseName());
map.put("sex", name_sex);
map.put("road", getRoad());
map.put("tel", getTel());
map.put("email", getEmail(6,9));
return map;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(getAddress());
// System.out.println(getEmailName(6,9));
}
}
}
package cn.quantgroup.cashloanflowboss.utils.ci;
import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
/**
* Created by shang on 2019/7/26.
*/
@SuppressWarnings("unused")
public class EnvUtil {
public static final String DSF_CONFIG = System.getProperty("user.dir") + File.separatorChar + "resources"
+ File.separatorChar + "config" + File.separatorChar + "dsf.config";
private static File DSF_CONFIG_TMP =null;
private static Map<String,String> sitesMap=new HashMap<String,String>();
/**
* �������ò��Ի���
*/
@SuppressWarnings("unchecked")
public static void resetEnv() {
EnvUtil envUtil = new EnvUtil();
// if (JenkinsUtil.IS_ON_JENKINS) {// Jenkins��ִ��
// JenkinsUtil jenkinsUtil = new JenkinsUtil();
// Map<String, String> paraMap = jenkinsUtil.getBuildParameters();
// if (paraMap != null && paraMap.size() > 0) {
// String configType = paraMap.get("Config_Type");
// String server = paraMap.get("Server");
// String siteMap = paraMap.get("siteMap");
// if(StringUtils.isNotEmpty(siteMap)){
// try{
// sitesMap = (Map<String, String>) JSONObject.parse(siteMap);
// }catch(Exception e){
// System.out.println(siteMap+" ��json��ʽ��ֵ��,ת��map�쳣");
// e.printStackTrace();
// }
// }
// envUtil.resetDsfEnv(sitesMap,configType);
// if (StringUtils.isNotEmpty(configType)) {
// if (!configType.equalsIgnoreCase("mirror")&&!configType.equalsIgnoreCase("prod")
// &&!configType.equalsIgnoreCase("alprod")) {
// envUtil.resetDubboEnv(configType);
// envUtil.resetHttpEnv(configType);
// Logger.log("�����滻����ɹ���configType��%s,server:%s", configType, server);
// }
// }
// }
// }else{
// envUtil.resetDsfEnv(sitesMap,"");
// }
}
private void resetHttpEnv(String configType) {
configType = configType.toLowerCase();
Properties propertys = System.getProperties();
Set<Map.Entry<Object, Object>> propertySet = propertys.entrySet();
for (Map.Entry<Object, Object> property : propertySet) {
String propertyKey = property.getKey().toString();
if (propertyKey.toLowerCase().contains("http.")
&& propertyKey.toLowerCase().contains("." + configType + ".")) {
String group = propertyKey.split("\\.")[2];
// �������÷���
System.setProperty("Http.ENV", group);
break;
}
}
}
/**
* ��������dubbo���Է���
*
* @param configType
*/
private void resetDubboEnv(String configType) {
configType = configType.toLowerCase();
Properties propertys = System.getProperties();
Set<Map.Entry<Object, Object>> propertySet = propertys.entrySet();
for (Map.Entry<Object, Object> property : propertySet) {
String propertyKey = property.getKey().toString();
if (propertyKey.toLowerCase().contains("dubbo.")
&& propertyKey.toLowerCase().contains("." + configType + ".")) {
String group = propertyKey.split("\\.")[2];
// �������÷���
System.setProperty("Dubbo.ENV", group);
break;
}
}
}
public static String getDsfPath(){
if(DSF_CONFIG_TMP==null){
Assert.fail("����dsf��ʱ�����ļ�ʧ�ܣ�");
}
return DSF_CONFIG_TMP.getAbsolutePath();
}
//
public static String getDubboEnvBySite(String siteName){
String env = System.getProperty("Dubbo.ENV");
//JenkinsUtil.IS_ON_JENKINS&&
if(StringUtils.isNotEmpty(siteName)){
String ciEnv= getEnvBySite(siteName);
if(StringUtils.isNotEmpty(ciEnv)){
Properties propertys = System.getProperties();
Set<Map.Entry<Object, Object>> propertySet = propertys.entrySet();
for (Map.Entry<Object, Object> property : propertySet) {
String propertyKey = property.getKey().toString();
if (propertyKey.toLowerCase().contains(String.format("dubbo.%s.%s.",siteName.toLowerCase(),ciEnv.toLowerCase()))) {
// �������÷���
env = propertyKey.split("\\.")[2];
break;
}
}
}
}
return env;
}
public static String getHttpEnvBySite(String siteName){
String env = System.getProperty("Http.ENV");
if(StringUtils.isNotEmpty(siteName)){
String ciEnv= getEnvBySite(siteName);
if(StringUtils.isNotEmpty(ciEnv)){
Properties propertys = System.getProperties();
Set<Map.Entry<Object, Object>> propertySet = propertys.entrySet();
for (Map.Entry<Object, Object> property : propertySet) {
String propertyKey = property.getKey().toString();
if (propertyKey.toLowerCase().contains(String.format("http.%s.%s.",siteName.toLowerCase(),ciEnv.toLowerCase()))) {
// �������÷���,�����ַ�������Сд
env = propertyKey.split("\\.")[2];
break;
}
}
}
}
return env;
}
private static String getEnvBySite(String siteName){
String env=null;
if(StringUtils.isNotEmpty(siteName)){
siteName=siteName.trim();
for (Map.Entry<String,String> entry : sitesMap.entrySet()) {
if(entry.getKey().equalsIgnoreCase(siteName)//�����ּ�Ⱥ����Сд
&& StringUtils.isNotEmpty(entry.getValue())){
env=entry.getValue().toLowerCase();
break;
}
}
}
return env;
}
public static void main(String[] args){
String a = "{\"��Ŀ����\": \"��������\"}";
EnvUtil env = new EnvUtil();
//
}
}
package cn.quantgroup.cashloanflowboss.utils.http;
import cn.quantgroup.cashloanflowboss.utils.CommonConstant;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.Consts;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @Description: TODO
* @author xh
* @date 2017年2月28日 下午2:43:45
*/
public class HttpRequest {
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @return
*/
public static JSONObject doPostReturnResponseJson(String url) {
return doPostReturnResponseJson(url, null, null, CommonConstant.UTF8);
}
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public static JSONObject doPostReturnResponseJson(String url, Map<String, String> params) {
return doPostReturnResponseJson(url, params, null, CommonConstant.UTF8);
}
/**
* 通过raw body方式发送参数
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public static JSONObject doPostReturnResponseJson(String url, String params) {
return doPostReturnResponseJson(url, params, null, null, null);
}
/**
* 通过raw body方式发送参数
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public static JSONObject doPostReturnResponseJson(String url, String params,Map<String, String> header) {
return doPostReturnResponseJson(url, params, header, null, null);
}
/**
* 通过raw body方式发送参数
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public static JSONObject doPostReturnResponseJson1(String url, String params,Map<String, String> header) {
return doPostReturnResponseJson(url, params, header, null, null);
}
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @param params 请求参数
* @param header 请求头
* @return
*/
public static JSONObject doPostReturnResponseJson(String url, Map<String, String> params, Map<String, String> header) {
return doPostReturnResponseJson(url, params, header, CommonConstant.UTF8);
}
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @param params 请求参数
* @param header 请求头
* @param charset 字符编码
* @return
*/
public static JSONObject doPostReturnResponseJson(String url, Map<String, String> params, Map<String, String> header,
String charset) {
return doPostReturnResponseJson(url, params, header, null, null);
}
public static JSONObject doPostReturnResponseJson(String url, Map<String, String> params, Map<String, String> header,
String filePath,String pwd) {
HttpResultEntity resultEntity=HttpService.getInstance().doPost(url, params, header, null, null, CommonConstant.UTF8);
JSONObject jsonObject=new JSONObject();
try{
Object o=null;
try{
if(resultEntity.getResponseString().isEmpty()){
jsonObject.put("context", resultEntity.getResponseString());
}else {
o = JSONObject.parse(resultEntity.getResponseString());
if (o instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) o;
Iterator it = jsonArray.iterator();
int flag = 0;
while (it.hasNext()) {
jsonObject.put(flag++ + "", it.next());
}
} else if (o instanceof JSONObject) {
jsonObject = (JSONObject) o;
} else {
jsonObject.put("context", resultEntity.getResponseString());
}
}
}catch(JSONException e){
jsonObject.put("context", resultEntity.getResponseString());
}
jsonObject.put("cookies", JSONArray.toJSON(resultEntity.getCookies()));
jsonObject.put("statusCode", resultEntity.getStatusCode());
}catch(Exception e){
e.printStackTrace();
}
// Logger.log("打印结果111:"+jsonObject);
return jsonObject;
}
public static JSONObject doPostReturnResponseJson(String url, String params, Map<String, String> header,
String filePath,String pwd) {
HttpResultEntity resultEntity=HttpService.getInstance().doPost(url, params, header, null, null,CommonConstant.UTF8);
JSONObject jsonObject=new JSONObject();
try{
Object o=null;
try{
o= JSONObject.parse(resultEntity.getResponseString());
if(o instanceof JSONArray){
JSONArray jsonArray=(JSONArray)o;
Iterator it=jsonArray.iterator();
int flag=0;
while(it.hasNext()){
jsonObject.put(flag+++"", it.next());
}
}else if(o instanceof JSONObject){
jsonObject=(JSONObject)o;
}else{
jsonObject.put("context", resultEntity.getResponseString());
}
}catch(JSONException e){
jsonObject.put("context", resultEntity.getResponseString());
}
jsonObject.put("cookies", JSONArray.toJSON(resultEntity.getCookies()));
}catch(Exception e){
e.printStackTrace();
System.out.println("结果转传json失败,结果为:" + resultEntity.getResponseString());
}
return jsonObject;
}
/**
* 通过POST发送请求
* @param url 请求的URL地址
* @return
*/
public static String doPostReturnResponse(String url) {
return doPostReturnResponse(url, null, null);
}
/**
* 通过POST发送请求
* @param url 请求的URL地址
* @param params 请求的查询参数,可以为null
* @return
*/
public static String doPostReturnResponse(String url, Map<String, String> params) {
return doPostReturnResponse(url, params, null);
}
/**
* 通过POST发送请求
*
* @param url 请求的URL地址
* @param params 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public static String doPostReturnResponse(String url, Map<String, String> params, Map<String, String> header) {
return doPostReturnResponse(url, params, header, null, null);
}
/**
* @Description: 通过POST发送请求
* @param url
* @param params
* @param header
* @param filePath
* @param pwd
* @param
* @return String
* @throws
*/
public static String doPostReturnResponse(String url, Map<String, String> params, Map<String, String> header,
String filePath,String pwd) {
JSONObject jsonObject=doPostReturnResponseJson(url, params, header, filePath, pwd);
System.out.println(jsonObject.toJSONString());
return jsonObject.toJSONString();
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @return
*/
public static JSONObject doGetReturnResponseJson(String url) {
return doGetReturnResponseJson(url, null);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param queryString 请求参数
* @return
*/
public static JSONObject doGetReturnResponseJson(String url, String queryString) {
return doGetReturnResponseJson(url, queryString, null);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param list 请求参数
* @param header 请求头
* @return
*/
public static JSONObject doGetReturnResponseJson1 (String url, List<BasicNameValuePair> list, Map<String, String> header) throws ClientProtocolException, IOException {
String queryString = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8));
return doGetReturnResponseJson(url, queryString, header,null,null);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param queryString 请求参数
* @param header 请求头
* @return
*/
public static JSONObject doGetReturnResponseJson(String url, String queryString, Map<String, String> header) {
return doGetReturnResponseJson(url, queryString, header,null,null);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param queryString 请求参数
* @param header 请求头
* @return
*/
public static JSONObject doGetReturnResponseJson(String url, String queryString, Map<String, String> header,String file,String pwd) {
HttpResultEntity resultEntity=HttpService.getInstance().doGet(queryString==null?url:url+"?"+queryString, header, file, pwd);
JSONObject jsonObject=new JSONObject();
try{
Object o=null;
try{
o= JSONObject.parse(resultEntity.getResponseString());
if(o instanceof JSONArray){
JSONArray jsonArray=(JSONArray)o;
Iterator it=jsonArray.iterator();
int flag=0;
while(it.hasNext()){
jsonObject.put(flag+++"", it.next());
}
}else if(o instanceof JSONObject){
jsonObject=(JSONObject)o;
}else{
jsonObject.put("context", resultEntity.getResponseString());
}
}catch(JSONException e){
jsonObject.put("context", resultEntity.getResponseString());
}
jsonObject.put("cookies", JSONArray.toJSON(resultEntity.getCookies()));
jsonObject.put("statusCode", resultEntity.getStatusCode());
}catch(Exception e){
e.printStackTrace();
System.out.println("结果转传json失败,结果为:"+resultEntity.getResponseString());
}
return jsonObject;
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
* @param url 请求的URL地址
* @return 返回请求响应的HTML
*/
public static String doGetReturnResponse(String url) {
return doGetReturnResponse(url, "", null);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
* @param url 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public static String doGetReturnResponse(String url, String queryString) {
return doGetReturnResponse(url, queryString, null);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @param header header信息
* @return 返回请求响应的HTML
*/
public static String doGetReturnResponse(String url, String queryString, Map<String, String> header) {
return doGetReturnResponse(url, queryString,header, null, null);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
* @param url 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @param header header信息
* @param filePath https的key文件路径
* @param pwd 秘钥key
* @return 返回请求响应的HTML
*/
public static String doGetReturnResponse(String url, String queryString,Map<String, String> header,String filePath,String pwd) {
JSONObject jsonObject=doGetReturnResponseJson(url, queryString, header, filePath, pwd);
return jsonObject.toString();
}
public static void main(String[] args) {
System.out.println(HttpRequest.doGetReturnResponseJson("http://djoy.daojia-inc.com/tmp/getModuleList"));
}
}
package cn.quantgroup.cashloanflowboss.utils.http;
import cn.quantgroup.cashloanflowboss.utils.HttpUtils;
import com.alibaba.fastjson.JSONObject;
import java.util.Map;
public class HttpRequestTester {
private String PROTOCOL = null;
private String IP = null;
private String PORT = null;
public static final String UTF8 = "UTF-8";
public HttpRequestTester(String protocol, String ip, String port) {
super();
PROTOCOL = protocol;
IP = ip;
PORT = port;
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @return
*/
public JSONObject doPostReturnResponseJson(String url) {
return doPostReturnResponseJson(url, null, null, HttpRequestTester.UTF8);
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @return
*/
public JSONObject doPostReturnResponseJson(String url, Map<String, String> params) {
return doPostReturnResponseJson(url, params, null, HttpRequestTester.UTF8);
}
/**
* 通过raw body方式发送参数
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @return
*/
public JSONObject doPostReturnResponseJson(String url, String params) {
return doPostReturnResponseJson(url, params, null, null, null);
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @param header
* 请求头
* @return
*/
public JSONObject doPostReturnResponseJson(String url, Map<String, String> params, Map<String, String> header) {
return doPostReturnResponseJson(url, params, header, HttpRequestTester.UTF8);
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @param header
* 请求头
* @param charset
* 字符编码
* @return
*/
public JSONObject doPostReturnResponseJson(String url, Map<String, String> params, Map<String, String> header,
String charset) {
return doPostReturnResponseJson(url, params, header, null, null);
}
// TODO
public JSONObject doPostReturnResponseJson(String url, Map<String, String> params, Map<String, String> header,
String filePath, String pwd) {
url = HttpUtils.replaceProtocolIpPort(url, PROTOCOL, IP, PORT);
return HttpRequest.doPostReturnResponseJson(url, params, header, filePath, pwd);
}
// TODO
public JSONObject doPostReturnResponseJson(String url, String params, Map<String, String> header, String filePath,
String pwd) {
url = HttpUtils.replaceProtocolIpPort(url, PROTOCOL, IP, PORT);
return HttpRequest.doPostReturnResponseJson(url, params, header, filePath, pwd);
}
/**
* 通过POST发送请求
*
* @param url
* 请求的URL地址
* @return
*/
public String doPostReturnResponse(String url) {
return doPostReturnResponse(url, null, null);
}
/**
* 通过POST发送请求
*
* @param url
* 请求的URL地址
* @param params
* 请求的查询参数,可以为null
* @return
*/
public String doPostReturnResponse(String url, Map<String, String> params) {
return doPostReturnResponse(url, params, null);
}
/**
* 通过POST发送请求
*
* @param url
* 请求的URL地址
* @param params
* 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public String doPostReturnResponse(String url, Map<String, String> params, Map<String, String> header) {
return doPostReturnResponse(url, params, header, null, null);
}
/**
* @Description: 通过POST发送请求 @param url @param params @param header @param
* filePath @param pwd @param charset @return String @throws
*/
public String doPostReturnResponse(String url, Map<String, String> params, Map<String, String> header,
String filePath, String pwd) {
JSONObject jsonObject = doPostReturnResponseJson(url, params, header, filePath, pwd);
return jsonObject.toJSONString();
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @return
*/
public JSONObject doGetReturnResponseJson(String url) {
return doGetReturnResponseJson(url, null);
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @param queryString
* 请求参数
* @return
*/
public JSONObject doGetReturnResponseJson(String url, String queryString) {
return doGetReturnResponseJson(url, queryString, null);
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @param queryString
* 请求参数
* @param header
* 请求头
* @return
*/
public JSONObject doGetReturnResponseJson(String url, String queryString, Map<String, String> header) {
return doGetReturnResponseJson(url, queryString, header, null, null);
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @param queryString
* 请求参数
* @param header
* 请求头
* @return
*/
public JSONObject doGetReturnResponseJson(String url, String queryString, Map<String, String> header, String file,
String pwd) {
url = HttpUtils.replaceProtocolIpPort(url, PROTOCOL, IP, PORT);
return HttpRequest.doGetReturnResponseJson(url, queryString, header, file, pwd);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @return 返回请求响应的HTML
*/
public String doGetReturnResponse(String url) {
return doGetReturnResponse(url, "", null);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @param queryString
* 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public String doGetReturnResponse(String url, String queryString) {
return doGetReturnResponse(url, queryString, null);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @param queryString
* 请求的查询参数,可以为null
* @param header
* header信息
* @return 返回请求响应的HTML
*/
public String doGetReturnResponse(String url, String queryString, Map<String, String> header) {
return doGetReturnResponse(url, queryString, header, null, null);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @param queryString
* 请求的查询参数,可以为null
* @param header
* header信息
* @param filePath
* https的key文件路径
* @param pwd
* 秘钥key
* @return 返回请求响应的HTML
*/
public String doGetReturnResponse(String url, String queryString, Map<String, String> header, String filePath,
String pwd) {
JSONObject jsonObject = doGetReturnResponseJson(url, queryString, header, filePath, pwd);
return jsonObject.toString();
}
public void main(String[] args) {
System.out.println(HttpRequest.doGetReturnResponseJson("http://djoy.daojia-inc.com/tmp/getModuleList"));
}
}
package cn.quantgroup.cashloanflowboss.utils.http;
import org.apache.http.cookie.Cookie;
import java.util.List;
/**
* @Description: TODO
* @author xh
* @date 2017年3月3日 下午3:19:12
*/
public class HttpResultEntity {
private String responseString;
private int statusCode;
private List<Cookie> cookies;
public String getResponseString() {
return responseString;
}
public void setResponseString(String responseString) {
this.responseString = responseString;
}
public List<Cookie> getCookies() {
return cookies;
}
public void setCookies(List<Cookie> cookies) {
this.cookies = cookies;
}
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
}
package cn.quantgroup.cashloanflowboss.utils.http;
import cn.quantgroup.cashloanflowboss.utils.CommonConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.*;
import org.apache.http.HttpRequest;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.ByteArrayBuffer;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import java.io.*;
import java.net.*;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.*;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;
/**
* @Description: http测试
* @author xh
* @date 2017年2月28日 下午1:37:51
*/
@Slf4j
public class HttpService {
private PoolingHttpClientConnectionManager httpClientConnectionManager = null;
private static final HttpService httpService = new HttpService();
public static HttpService getInstance() {
return httpService;
}
private HttpService() {
initHttpClient();
}
public void initHttpClient() {
httpClientConnectionManager = new PoolingHttpClientConnectionManager();
httpClientConnectionManager
.setMaxTotal(CommonConstant.HTTPCLIENT_CONNECTION_COUNT);
httpClientConnectionManager
.setDefaultMaxPerRoute(CommonConstant.HTTPCLIENT_MAXPERROUTE_COUNT);
}
HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount,
HttpContext context) {
if (executionCount >= CommonConstant.HTTPCLIENT_MAXRETRY_COUNT) {
return false;
}
if (exception instanceof InterruptedIOException) {
return false;
}
if (exception instanceof UnknownHostException) {
return false;
}
if (exception instanceof ConnectTimeoutException) {
return false;
}
if (exception instanceof SSLException) {
return false;
}
HttpClientContext clientContext = HttpClientContext.adapt(context);
HttpRequest request = clientContext.getRequest();
boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
if (idempotent) {
return true;
}
return false;
}
};
public CloseableHttpClient getHttpClient() {
String socketTimeout = System.getProperty("httpRequestTimeout");
int httpclientSocketTimeout= CommonConstant.HTTPCLIENT_SOCKET_TIMEOUT;
if(StringUtils.isNotEmpty(socketTimeout)&& StringUtils.isNumeric(socketTimeout)){
httpclientSocketTimeout=Integer.parseInt(socketTimeout);
}
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(CommonConstant.HTTPCLIENT_CONNECT_TIMEOUT)
.setSocketTimeout(httpclientSocketTimeout)
.setCookieSpec(CookieSpecs.BEST_MATCH).build();
LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy();
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(httpClientConnectionManager)
.setDefaultRequestConfig(requestConfig)
.setRedirectStrategy(redirectStrategy)
.setRetryHandler(myRetryHandler).build();
return httpClient;
}
public HttpResultEntity doGet(String urlString, Map<String, String> headerInfo,
String filePath, String pwd) {
HttpResultEntity resultEntity=new HttpResultEntity();
String result = "";
if (null == urlString || urlString.isEmpty()
|| !urlString.startsWith("http")) {// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return null;
}
CloseableHttpResponse response = null;
HttpGet httpGet = null;
urlString = urlString.trim();
try {
URL url = new URL(urlString);
//System.out.println(url.getProtocol());
//System.out.println(url.getAuthority());
//System.out.println(url.getPath());
//System.out.println(url.getQuery());
URI uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(),
url.getQuery(), null);
httpGet = new HttpGet(uri);
System.out.println("请求的uri是:"+uri);
if(headerInfo!=null)
setHttpHeaderInfo(httpGet, headerInfo);
CookieStore cookieStore=new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
// 执行请求
try {
if (urlString.startsWith("https")) {
System.setProperty("jsse.enableSNIExtension", "false");
if (filePath == null)
response = createSSLClientDefault().execute(httpGet,localContext);
else
response = createSSLClient(filePath, pwd).execute(
httpGet,localContext);
} else {
response = httpService.getHttpClient().execute(httpGet,localContext);
}
} catch (Exception e) {
e.printStackTrace();
}
result = doResponse(response, urlString);
// 得到响应状态码
int statuCode = response.getStatusLine().getStatusCode();
resultEntity.setStatusCode(statuCode);
resultEntity.setResponseString(result);
resultEntity.setCookies(cookieStore.getCookies());
resultEntity.setStatusCode(response.getStatusLine().getStatusCode());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
} finally {
if (response != null) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
httpGet.abort();
}
return resultEntity;
}
public HttpResultEntity doPost(String url, Map<String, String> paras,
Map<String, String> headerInfo, String filePath, String pwd,String charset) {
HttpResultEntity resultEntity=new HttpResultEntity();
String result = "";
if (null == url || url.isEmpty() || !url.startsWith("http")) {// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return null;
}
CloseableHttpResponse response = null;
HttpPost httpPost = null;
try {
httpPost = new HttpPost(url);
// 设置参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
if(paras!=null){
Iterator iterator = paras.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> elem = (Entry<String, String>) iterator
.next();
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
}
if (list.size() > 0) {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,
charset);
log.info("打印一下entity:{} ", entity);
httpPost.setEntity(entity);
}
}
setHttpHeaderInfo(httpPost, headerInfo);
CookieStore cookieStore=new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
// 执行请求
try {
if (url.startsWith("https")) {
System.setProperty("jsse.enableSNIExtension", "false");
if (filePath == null)
response = createSSLClientDefault().execute(httpPost,localContext);
else
response = createSSLClient(filePath, pwd).execute(
httpPost,localContext);
} else {
response = httpService.getHttpClient().execute(httpPost,localContext);
System.out.println("打印响应码》》》》: " + response.getStatusLine());
System.out.println("打印结果》》》》: " + response.getEntity());
}
} catch (Exception e) {
e.printStackTrace();
}
log.info("进入doResponse方法之前: ");
result = doResponse(response, url);
resultEntity.setResponseString(result);
resultEntity.setCookies(cookieStore.getCookies());
resultEntity.setStatusCode(response.getStatusLine().getStatusCode());
} catch (Exception ex) {
ex.printStackTrace();
}
return resultEntity;
}
public HttpResultEntity doPost1(String url, Map<String, String> paras,
Map<String, String> headerInfo, String filePath, String pwd,String charset) {
HttpResultEntity resultEntity=new HttpResultEntity();
String result = "";
if (null == url || url.isEmpty() || !url.startsWith("http")) {// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return null;
}
CloseableHttpResponse response = null;
HttpPost httpPost = null;
try {
httpPost = new HttpPost(url);
// 设置参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
if(paras!=null){
Iterator iterator = paras.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> elem = (Entry<String, String>) iterator
.next();
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
}
if (list.size() > 0) {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,
charset);
httpPost.setEntity(entity);
}
}
setHttpHeaderInfo(httpPost, headerInfo);
CookieStore cookieStore=new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
// 执行请求
try {
if (url.startsWith("https")) {
System.setProperty("jsse.enableSNIExtension", "false");
if (filePath == null)
response = createSSLClientDefault().execute(httpPost,localContext);
else
response = createSSLClient(filePath, pwd).execute(
httpPost,localContext);
} else {
response = httpService.getHttpClient().execute(httpPost,localContext);
System.out.println("打印响应码》》》》: " + response.getStatusLine());
System.out.println("打印结果》》》》: " + response.getEntity());
}
} catch (Exception e) {
e.printStackTrace();
}
result = doResponse(response, url);
if(!url.isEmpty()&&!response.toString().isEmpty()){
if(response==null){
log.info("请求超时,最大超时时间:{},url:{}", CommonConstant.HTTPCLIENT_CONNECT_TIMEOUT, url);
result="";
}
// 得到响应状态码
int statuCode = response.getStatusLine().getStatusCode();
// 根据状态码进行逻辑处理
switch (statuCode) {
case 200:
// 获得响应实体
HttpEntity entity = response.getEntity();
// Logger.log("获取entity: "+entity);
String charset1 = getCharset(entity);
// Logger.log("获取charset1: "+charset1);
Header header = entity.getContentEncoding();
// Logger.log("entity.getContentEncoding(): "+header);
boolean isGzip = isGzip(header);
InputStream inputStream = entity.getContent();
// Logger.log("获取实体的文本entity.getContent(): "+inputStream);
ByteArrayBuffer buffer = new ByteArrayBuffer(2048);
byte[] tmp = new byte[2048];
int count;
// System.out.println("isGzip的值有问题: " + isGzip);
if (isGzip) {
GZIPInputStream gzipInputStream = new GZIPInputStream(
inputStream);
while ((count = gzipInputStream.read(tmp)) != -1) {
buffer.append(tmp, 0, count);
}
} else {
while ((count = inputStream.read(tmp)) != -1) {
buffer.append(tmp, 0, count);
}
}
log.info("获取实体的文本buffer:{} ",buffer);
if (null == charset1 || "".equals(charset1) || "null".equals(charset1)
|| "zh-cn".equalsIgnoreCase(charset1)) {
System.out.println("charset1的值有问题: "+charset1);
charset1 = getCharsetFromMetaTag(buffer, url);
}else{
System.out.println("打印charset1的值: "+charset1);
}
result = new String(buffer.toByteArray(), charset1);
break;
case 400:
System.out.println("下载400错误代码,请求出现语法错误,url:" + url);
break;
case 401:
System.out.println("未授权: 由于凭据无效,访问被拒绝:" + url);
break;
case 403:
System.out.println("下载403错误代码,资源不可用,url:" + url);
break;
case 404:
System.out.println("下载404错误代码,无法找到指定资源地址,url:" + url);
break;
case 503:
System.out.println("下载503错误代码,服务不可用,url:" + url);
break;
case 504:
System.out.println("下载504错误代码,网关超时,url:" + url);
break;
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>");
System.out.println("打印获取的result: "+result);
}
resultEntity.setResponseString(result);
resultEntity.setCookies(cookieStore.getCookies());
resultEntity.setStatusCode(response.getStatusLine().getStatusCode());
} catch (Exception ex) {
ex.printStackTrace();
}
return resultEntity;
}
public HttpResultEntity doPost(String url, String paras,
Map<String, String> headerInfo, String filePath, String pwd,String charset) {
HttpResultEntity resultEntity=new HttpResultEntity();
String result = "";
if (null == url || url.isEmpty() || !url.startsWith("http")) {// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return null;
}
CloseableHttpResponse response = null;
HttpPost httpPost = null;
try {
httpPost = new HttpPost(url);
// 设置参数
httpPost.setEntity(new StringEntity(paras, charset));
httpPost.setHeader("Content-Type", "application/json; charset=UTF-8");
httpPost.setHeader("Accept", "application/json; charset=UTF-8");
setHttpHeaderInfo(httpPost, headerInfo);
CookieStore cookieStore=new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
// 执行请求
try {
if (url.startsWith("https")) {
System.setProperty("jsse.enableSNIExtension", "false");
if (filePath == null)
response = createSSLClientDefault().execute(httpPost,localContext);
else
response = createSSLClient(filePath, pwd).execute(
httpPost,localContext);
} else {
response = httpService.getHttpClient().execute(httpPost,localContext);
}
} catch (Exception e) {
e.printStackTrace();
}
result = doResponse(response, url);
resultEntity.setResponseString(result);
resultEntity.setCookies(cookieStore.getCookies());
} catch (Exception ex) {
ex.printStackTrace();
}
return resultEntity;
}
// 指定证书,信任自己的CA和所有自签名
public static CloseableHttpClient createSSLClient(String filePath,
String pwd) {
FileInputStream instream = null;
KeyStore trustStore = null;
try {
trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
instream = new FileInputStream(new File(filePath));
trustStore.load(instream, pwd.toCharArray());
} catch (CertificateException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
instream.close();
} catch (Exception ignore) {
}
}
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(
trustStore, (TrustStrategy) new TrustSelfSignedStrategy()).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}
// 信任所有
private static CloseableHttpClient createSSLClientDefault() {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(
null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
return true;
}
}).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}
private static String getCharsetFromMetaTag(ByteArrayBuffer buffer,
String url) {
String charset = null;
String regEx = ".*charset=([^;]*).*";
// String regEx = ".*charset=*";
Pattern p = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(new String(buffer.toByteArray()));
boolean result = m.find();
if (result) {
if (m.groupCount() == 1) {
charset = m.group(1);
}
System.err.println("网页 中的编码:" + charset + "\t url:" + url);
} else {
charset = "UTF-8";
System.out.println("字符编码未匹配到 : " + url);
}
return charset;
}
private void setHttpHeaderInfo(HttpRequestBase method,
Map<String, String> header) {
if (header == null)
header = defaultHeaderInfo;
// 设置Header 信息
if (header != null && header.size() > 0) {
Set<String> key = header.keySet();
for (Iterator<?> it = key.iterator(); it.hasNext();) {
String s = (String) it.next();
method.addHeader(s, header.get(s));
}
}
}
private static String getCharset(HttpEntity entity) {
String charset = null;
ContentType contentType = null;
contentType = ContentType.getOrDefault(entity);
Charset charsets = contentType.getCharset();
if (null != charsets) {
charset = charsets.toString();
}
return charset;
}
private static boolean isGzip(Header header) {
boolean isGzip = false;
if (null != header) {
for (HeaderElement headerElement : header.getElements()) {
if (headerElement.getName().equalsIgnoreCase("gzip")) {
isGzip = true;
}
}
}
return isGzip;
}
public static String doResponse(HttpResponse response, String urlString)
throws IOException {
String result = "";
if(response==null){
log.info("请求超时,最大超时时间:{},url:{}", CommonConstant.HTTPCLIENT_CONNECT_TIMEOUT, urlString);
return result;
}
// 得到响应状态码
int statuCode = response.getStatusLine().getStatusCode();
// 根据状态码进行逻辑处理
switch (statuCode) {
case 200:
// 获得响应实体
HttpEntity entity = response.getEntity();
// Logger.log("获取entity: "+entity);
String charset = getCharset(entity);
// Logger.log("获取charset: "+charset);
Header header = entity.getContentEncoding();
// Logger.log("entity.getContentEncoding(): "+header);
boolean isGzip = isGzip(header);
InputStream inputStream = entity.getContent();
// Logger.log("获取实体的文本entity.getContent(): "+inputStream);
ByteArrayBuffer buffer = new ByteArrayBuffer(2048);
byte[] tmp = new byte[2048];
int count;
// System.out.println("isGzip的值有问题: " + isGzip);
if (isGzip) {
GZIPInputStream gzipInputStream = new GZIPInputStream(
inputStream);
while ((count = gzipInputStream.read(tmp)) != -1) {
buffer.append(tmp, 0, count);
}
} else {
while ((count = inputStream.read(tmp)) != -1) {
buffer.append(tmp, 0, count);
}
}
if (null == charset || "".equals(charset) || "null".equals(charset)
|| "zh-cn".equalsIgnoreCase(charset)) {
System.out.println("charset的值有问题: "+charset);
charset = getCharsetFromMetaTag(buffer, urlString);
}else{
System.out.println("打印charset的值: "+charset);
}
result = new String(buffer.toByteArray(), charset);
result=result.replace("%","%%");
break;
case 400:
System.out.println("下载400错误代码,请求出现语法错误,url:" + urlString);
break;
case 401:
System.out.println("未授权: 由于凭据无效,访问被拒绝:" + urlString);
break;
case 403:
System.out.println("下载403错误代码,资源不可用,url:" + urlString);
break;
case 404:
System.out.println("下载404错误代码,无法找到指定资源地址,url:" + urlString);
break;
case 503:
System.out.println("下载503错误代码,服务不可用,url:" + urlString);
break;
case 504:
System.out.println("下载504错误代码,网关超时,url:" + urlString);
break;
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>");
System.out.println("打印获取的result: "+result);
return result;
}
private Map<String, String> defaultHeaderInfo = new HashMap<String, String>() {
{
put("Accept", "*/*");
put("Connection", "keep-alive");
put("Accept-Encoding", "gzip, deflate");
}
};
public static void setCookieStore(HttpResponse httpResponse) {
System.out.println("----setCookieStore");
CookieStore cookieStore = new BasicCookieStore();
// JSESSIONID
String setCookie = httpResponse.getFirstHeader("Set-Cookie")
.getValue();
String JSESSIONID = setCookie.substring("JSESSIONID=".length(),
setCookie.indexOf(";"));
System.out.println("JSESSIONID:" + JSESSIONID);
// 新建一个Cookie
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID",
JSESSIONID);
cookie.setVersion(0);
cookie.setDomain("127.0.0.1");
cookie.setPath("/CwlProClient");
// cookie.setAttribute(ClientCookie.VERSION_ATTR, "0");
// cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "127.0.0.1");
// cookie.setAttribute(ClientCookie.PORT_ATTR, "8080");
// cookie.setAttribute(ClientCookie.PATH_ATTR, "/CwlProWeb");
cookieStore.addCookie(cookie);
}
public static void main(String[] args) {
HttpService
.getInstance()
.doGet("https://www.alipay.com/",
null, null, null);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment