Authored by qinchao

Merge branch 'dev_mayi' into test6.8.2

package com.yohoufo.dal.user;
import com.yohoufo.dal.user.model.StoredSeller;
public interface IStoredSellerDao {
//获取生效的信息
StoredSeller selectValidByUid(int uid);
int insert(StoredSeller storedSeller);
}
... ...
package com.yohoufo.dal.user;
import com.yohoufo.dal.user.model.ZhiMaCert;
import org.apache.ibatis.annotations.Param;
public interface IZhiMaCertDao {
//int insert(ZhiMaCert zhiMaCert);
int insertAndGetID(ZhiMaCert zhiMaCert);
int updateValidStatusByPrimaryKey(int id);
int updateBizNoByByPrimaryKey(@Param("id")int id, @Param("bizNo")String bizNo);
//获取生效的认证信息
ZhiMaCert selectByPrimaryKey(int id);
ZhiMaCert selectValidByUid(int uid);
ZhiMaCert selectValidByCertNo(String certNo);
//根据业务编号查询
//ZhiMaCert selectByBizNo(String bizNo);
}
... ...
package com.yohoufo.dal.user.model;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class StoredSeller {
//主键
private Integer id;
//uid ,索引
private Integer uid;
//生效状态:1 生效 ; 0 不生效
private Integer validStatus;
private long createTime;
private long updateTime;
}
... ...
package com.yohoufo.dal.user.model;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class ZhiMaCert {
//主键
private Integer id;
//uid ,索引
private Integer uid;
//生效状态:1 生效 ; 0 不生效
private Integer validStatus;
//证件姓名
private String certName;
//证件号码:身份证号码
private String certNo;
//芝麻业务编号,唯一索引
private String bizNo;
private long createTime;
private long updateTime;
}
... ...
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yohoufo.dal.user.IStoredSellerDao" >
<resultMap id="BaseResultMap" type="com.yohoufo.dal.user.model.StoredSeller" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="uid" property="uid" jdbcType="INTEGER" />
<result column="valid_status" property="validStatus" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="INTEGER" />
<result column="update_time" property="updateTime" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, uid, valid_status, create_time, update_time
</sql>
<select id="selectValidByUid" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from stored_seller
where uid = #{uid} and valid_status = 1
order by id desc limit 1
</select>
<insert id="insert" parameterType="com.yohoufo.dal.user.model.StoredSeller" >
insert into stored_seller (uid, valid_status, create_time, update_time)
values (#{uid},#{validStatus},
#{createTime},#{updateTime})
</insert>
</mapper>
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yohoufo.dal.user.IZhiMaCertDao" >
<resultMap id="BaseResultMap" type="com.yohoufo.dal.user.model.ZhiMaCert" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="uid" property="uid" jdbcType="INTEGER" />
<result column="valid_status" property="validStatus" jdbcType="INTEGER" />
<result column="cert_no" property="certNo" jdbcType="VARCHAR" />
<result column="cert_name" property="certName" jdbcType="VARCHAR" />
<result column="biz_no" property="bizNo" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="INTEGER" />
<result column="update_time" property="updateTime" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, uid, valid_status,cert_no, cert_name, biz_no,create_time, update_time
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from zhima_cert
where id = #{id}
</select>
<select id="selectValidByUid" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from zhima_cert
where uid = #{uid} and valid_status = 1
order by id desc limit 1
</select>
<select id="selectValidByCertNo" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from zhima_cert
where cert_no = #{certNo} and valid_status = 1
order by id desc limit 1
</select>
<select id="selectByBizNo" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from zhima_cert
where biz_no = #{bizNo}
</select>
<insert id="insert" parameterType="com.yohoufo.dal.user.model.ZhiMaCert" >
insert into zhima_cert (uid, valid_status, cert_no, cert_name, biz_no,create_time, update_time)
values (#{uid},#{validStatus},
#{certNo},#{certName},#{bizNo},
#{createTime},#{updateTime})
</insert>
<insert id="insertAndGetID" parameterType="com.yohoufo.dal.user.model.ZhiMaCert">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>
insert into zhima_cert (uid, valid_status, cert_no, cert_name, biz_no,create_time, update_time)
values (#{uid},#{validStatus},
#{certNo},#{certName},#{bizNo},
#{createTime},#{updateTime})
</insert>
<update id="updateValidStatusByPrimaryKey" parameterType="java.lang.Integer">
update zhima_cert
set valid_status = 1
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateBizNoByByPrimaryKey">
update zhima_cert
set biz_no = #{bizNo}
where id = #{id}
</update>
</mapper>
\ No newline at end of file
... ...
... ... @@ -123,5 +123,11 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.4.27.ALL</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
... ... @@ -18,6 +18,10 @@ public enum CacheKeyEnum {
AUTHORIZE_FAILED_KEY("ufo:user:authorizeFailed:", "实名认证失败次数", 30, TimeUnit.MINUTES),
AUTHORIZE_INFO_KEY("ufo:user:authorizeInfo:","实名认证信息", 2, TimeUnit.HOURS),
ZHI_MA_CERT_KEY("ufo:user:zhiMaCert:","芝麻认证信息", 2, TimeUnit.HOURS),
STORED_SELLER_KEY("ufo:user:storedSeller:","商家入驻信息", 2, TimeUnit.HOURS),
USER_PRODUCT_FAVORITE_ZSET_KEY("ufo:user:product:favorite:","用户商品收藏集合", 180, TimeUnit.DAYS),
;
... ...
... ... @@ -5,8 +5,10 @@ import com.yoho.core.redis.cluster.operations.nosync.YHRedisTemplate;
import com.yoho.core.redis.cluster.operations.nosync.YHValueOperations;
import com.yoho.core.redis.cluster.operations.nosync.YHZSetOperations;
import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
import com.yohoufo.dal.user.model.StoredSeller;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.dal.user.model.UserFavorite;
import com.yohoufo.dal.user.model.ZhiMaCert;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -47,6 +49,13 @@ public class CacheService {
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.AUTHORIZE_FAILED_KEY.getCacheKey()).appendVar(uid);
}
public static RedisKeyBuilder getZhiMaCertRedisKeyBuilder(Integer uid){
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.ZHI_MA_CERT_KEY.getCacheKey()).appendVar(uid);
}
public static RedisKeyBuilder getStoredSellerRedisKeyBuilder(Integer uid){
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.STORED_SELLER_KEY.getCacheKey()).appendVar(uid);
}
/**************************************************************************
* 商品收藏相关
*************************************************************************/
... ... @@ -182,6 +191,30 @@ public class CacheService {
return incrementWithExpire(getAuthorizeFailedNumRedisKeyBuilder(uid),1,CacheKeyEnum.AUTHORIZE_FAILED_KEY.getDefaultExpireTime(), CacheKeyEnum.AUTHORIZE_FAILED_KEY.getTimeUnit());
}
/**************************************************************************
* 芝麻认证相关
*************************************************************************/
public ZhiMaCert getZhiMaCert(Integer uid){
return get(getZhiMaCertRedisKeyBuilder(uid),ZhiMaCert.class);
}
public void setZhiMaCert(ZhiMaCert zhiMaCert){
set(getZhiMaCertRedisKeyBuilder(zhiMaCert.getUid()),zhiMaCert,CacheKeyEnum.ZHI_MA_CERT_KEY.getDefaultExpireTime(),CacheKeyEnum.ZHI_MA_CERT_KEY.getTimeUnit());
}
/**************************************************************************
* 商家入驻相关
*************************************************************************/
public StoredSeller getStoredSeller(Integer uid){
return get(getStoredSellerRedisKeyBuilder(uid),StoredSeller.class);
}
public void setStoredSeller(StoredSeller storedSeller){
set(getStoredSellerRedisKeyBuilder(storedSeller.getUid()),storedSeller,CacheKeyEnum.STORED_SELLER_KEY.getDefaultExpireTime(),CacheKeyEnum.STORED_SELLER_KEY.getTimeUnit());
}
/**************************************************************************
* 通用
*************************************************************************/
... ...
... ... @@ -6,6 +6,8 @@ import com.yohobuy.ufo.model.user.resp.AuthorizeResultRespVO;
import com.yohoufo.common.exception.GatewayException;
import com.yohoufo.common.utils.UserInfoHiddenHelper;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.dal.user.model.ZhiMaCert;
import com.yohoufo.user.common.IDCardUtils;
import com.yohoufo.user.helper.HideDataUtil;
import com.yohoufo.user.requestVO.RealNameAuthorizeReqVO;
import com.yohoufo.user.service.IRealNameAuthorizeService;
... ... @@ -106,5 +108,77 @@ public class RealNameAuthorizeController {
return apiResponse;
}
/**
* 是否已经芝麻认证
*/
@RequestMapping(params = "method=ufo.user.isRealNameCert")
public ApiResponse isRealNameCert(RealNameAuthorizeReqVO reqVO) throws GatewayException {
logger.info("enter realNameAuthorize.isRealNameCert param reqVO is {}", reqVO);
//(1) 优先校验请求的参数
if (reqVO == null || reqVO.getUid() <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
ZhiMaCert zhiMaCertInfo =realNameAuthorizeService.getValidZhiMaCert(reqVO.getUid());
boolean isZhiMaCert=false;
if(zhiMaCertInfo!=null){
isZhiMaCert=true;
}
return new ApiResponse(isZhiMaCert);
}
/**
* 芝麻认证(初始化并购置返回url)
*/
@RequestMapping(params = "method=ufo.user.zhiMaCertInit")
public ApiResponse zhiMaCertInit(RealNameAuthorizeReqVO reqVO) throws GatewayException {
logger.info("enter realNameAuthorize.zhiMaCertInit param reqVO is {}", reqVO);
//(1) 优先校验请求的参数
if (reqVO == null || StringUtils.isEmpty(reqVO.getCertNo())|| StringUtils.isEmpty(reqVO.getCertName())){
throw new GatewayException(400, "身份证号、姓名不能为空!");
}
//身份证格式校验IDCardUtils
if(!IDCardUtils.validate(reqVO.getCertNo())){
throw new GatewayException(400, "身份证号格式不正确!");
}
//调用芝麻,得到回调url
AuthorizeResultRespVO resultVo=realNameAuthorizeService.zhiMaCertInit(reqVO);
logger.info("realNameAuthorize.zhiMaCertInit result vo {} ",resultVo);
ApiResponse apiResponse=new ApiResponse();
apiResponse.setData(resultVo);
return apiResponse;
}
/**
* 芝麻认证结果查询
*/
@RequestMapping(params = "method=ufo.user.zhiMaCertResultQuery")
public ApiResponse zhiMaCertResultQuery(RealNameAuthorizeReqVO reqVO) throws GatewayException {
logger.info("enter realNameAuthorize.zhiMaCertResultQuery param reqVO is {}", reqVO);
//(1) 优先校验请求的参数
if (reqVO == null || reqVO.getUid()<=0){
throw new GatewayException(400, "参数错误,uid不能为空!");
}
//zhiMacertID
if (reqVO.getZhiMaCertId() == null || reqVO.getZhiMaCertId()<=0){
throw new GatewayException(400, "参数错误,芝麻认知记录id不能为空!");
}
//bizNO
if(StringUtils.isBlank(reqVO.getBizNO())){
throw new GatewayException(400, "参数错误,芝麻请求业务编号不能为空!");
}
ApiResponse result=realNameAuthorizeService.zhiMaCertResultQuery(reqVO);
return result;
}
}
... ...
package com.yohoufo.user.controller.passport;
import com.yoho.tools.common.beans.ApiResponse;
import com.yohoufo.common.exception.GatewayException;
import com.yohoufo.user.requestVO.RealNameAuthorizeReqVO;
import com.yohoufo.user.service.IStoredSellerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 入驻商户接口
* Created by craig.qin on 2018/9/11.
*/
@RestController
public class StoredSellerController {
private Logger logger = LoggerFactory.getLogger(StoredSellerController.class);
@Autowired
private IStoredSellerService storedSellerService;
/**
* 是否入驻商户
*/
@RequestMapping(params = "method=ufo.user.isStoredSeller")
public ApiResponse isStoredSeller(RealNameAuthorizeReqVO reqVO) throws GatewayException {
logger.info("enter StoredSellerController isStoredSeller param reqVO is {}", reqVO);
//(1) 优先校验请求的参数
if (reqVO == null || reqVO.getUid() <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
boolean isStoredSeller=storedSellerService.isStoredSeller(reqVO.getUid());
return new ApiResponse(isStoredSeller);
}
/**
* 更新商户为入驻商户
*/
@RequestMapping(params = "method=ufo.user.updateAsStoredSeller")
public ApiResponse updateAsStoredSeller(RealNameAuthorizeReqVO reqVO) throws GatewayException {
logger.info("enter StoredSellerController updateAsStoredSeller param reqVO is {}", reqVO);
//(1) 优先校验请求的参数
if (reqVO == null || reqVO.getUid() <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
storedSellerService.addUserAsStoredSeller(reqVO.getUid());
return new ApiResponse();
}
}
... ...
... ... @@ -3,8 +3,6 @@ package com.yohoufo.user.requestVO;
import com.yoho.service.model.BaseBO;
import lombok.Data;
import java.util.List;
@Data
public class RealNameAuthorizeReqVO extends BaseBO {
// uid
... ... @@ -15,4 +13,11 @@ public class RealNameAuthorizeReqVO extends BaseBO {
//证件姓名
private String certName;
//芝麻认知的记录ID
private Integer zhiMaCertId;
//证件号码:身份证号码
private String certNo;
//芝麻调用的bizNO
private String bizNO;
}
... ...
package com.yohoufo.user.service;
import com.yoho.tools.common.beans.ApiResponse;
import com.yohobuy.ufo.model.user.resp.AuthorizeResultRespVO;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.dal.user.model.ZhiMaCert;
import com.yohoufo.user.requestVO.RealNameAuthorizeReqVO;
import net.sf.json.JSONObject;
/**
* 用户身份实名认证
... ... @@ -14,5 +16,11 @@ public interface IRealNameAuthorizeService {
void saveAuthorizeInfo(RealNameAuthorizeReqVO reqVO);
ZhiMaCert getValidZhiMaCert(int uid);
AuthorizeResultRespVO zhiMaCertInit(RealNameAuthorizeReqVO reqVO);
ApiResponse zhiMaCertResultQuery(RealNameAuthorizeReqVO reqVO);
//JSONObject authorizeRealNameWithBank(RealNameAuthorizeReqVO reqVO) throws ServiceException;
}
... ...
package com.yohoufo.user.service;
public interface IStoredSellerService {
boolean isStoredSeller(Integer uid);
void addUserAsStoredSeller(Integer uid);
}
... ...
package com.yohoufo.user.service.impl;
import com.alipay.api.response.ZhimaCustomerCertificationQueryResponse;
import com.yoho.error.exception.ServiceException;
import com.yoho.tools.common.beans.ApiResponse;
import com.yohobuy.ufo.model.user.resp.AuthorizeResultRespVO;
import com.yohoufo.dal.user.IUserAuthorizeInfoDao;
import com.yohoufo.dal.user.IZhiMaCertDao;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.dal.user.model.ZhiMaCert;
import com.yohoufo.user.cache.CacheService;
import com.yohoufo.user.helper.HideDataUtil;
import com.yohoufo.user.requestVO.RealNameAuthorizeReqVO;
import com.yohoufo.user.service.IRealNameAuthorizeService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -27,6 +33,9 @@ public class RealNameAuthorizeServiceImpl implements IRealNameAuthorizeService {
@Autowired
private CacheService cacheService;
@Autowired
private IZhiMaCertDao zhiMaCertDao;
/* @Autowired
private GraphVerifyService graphVerifyService;*/
... ... @@ -91,6 +100,128 @@ public class RealNameAuthorizeServiceImpl implements IRealNameAuthorizeService {
}
@Override
public ZhiMaCert getValidZhiMaCert(int uid) {
logger.info("RealNameAuthorizeServiceImpl getZhiMaCert uid is {} ", uid);
// 从redis缓存中获取
ZhiMaCert zhiMaCert = cacheService.getZhiMaCert(uid);
logger.info("RealNameAuthorizeServiceImpl getZhiMaCert uid is {} ,redis info is {} ", uid, zhiMaCert);
if (null != zhiMaCert) {
return zhiMaCert;
}
//如果不存在,则从数据库获取
zhiMaCert = zhiMaCertDao.selectValidByUid(uid);
logger.info("RealNameAuthorizeServiceImpl getZhiMaCert uid is {} ,database info is {} ", uid, zhiMaCert);
if (zhiMaCert != null) {
//保存到redis
cacheService.setZhiMaCert(zhiMaCert);
}
return zhiMaCert;
}
@Override
public AuthorizeResultRespVO zhiMaCertInit(RealNameAuthorizeReqVO reqVO) {
logger.info("real name zhiMaCertInit reqVO {}", reqVO);
//检查是否已经认证,如果已经认证,报错
if (null != this.getValidZhiMaCert(reqVO.getUid())) {
throw new ServiceException(400, "已实名认证!");
}
//检查身份证号认证信息是否已经存在,存在则不允许再次使用
if (null != zhiMaCertDao.selectValidByCertNo(reqVO.getCertNo())) {
throw new ServiceException(400, "身份证号已被占用!");
}
//调用芝麻接口,返回biz_no
//构建唯一的 transaction_id : ufoCert+id
LocalDateTime now = getLocalDateTime();
Long nowSecond = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
//存储认证信息
ZhiMaCert zhiMaCert = new ZhiMaCert();
zhiMaCert.setUid(reqVO.getUid());
zhiMaCert.setValidStatus(0);//用户还未授权,暂时未生效
zhiMaCert.setCertName(reqVO.getCertName());
zhiMaCert.setCertNo(reqVO.getCertNo());
zhiMaCert.setCreateTime(nowSecond);
zhiMaCert.setUpdateTime(nowSecond);
zhiMaCertDao.insertAndGetID(zhiMaCert);
if(zhiMaCert.getId()==null||zhiMaCert.getId()<1){
logger.error("zhi ma cert insertAndGetID zhiMaCert error zhiMaCert {},req vo {}",zhiMaCert,reqVO);
throw new ServiceException(400, "错误:保存实名认知信息异常!");
}
String transactionId="ufoCert"+zhiMaCert.getId();
String bizNo=ZhiMaCallUtil.zhiMaCertInit(transactionId,reqVO.getCertName(),reqVO.getCertNo());
if (StringUtils.isBlank(bizNo)) {
logger.error("zhi ma cert biz no is null ,req vo {}",reqVO);
throw new ServiceException(400, "错误:支付宝接口调用出错了!");
}
//不需要更新bizNO到数据库了,不需要记录
//通过biz_no,生成returnUrl
String returnUrl = ZhiMaCallUtil.zhiMaCertUrl(bizNo);
if (StringUtils.isBlank(returnUrl)) {
logger.error("zhi ma cert url return null ,bizNo {} ",bizNo);
throw new ServiceException(400, "错误:支付宝接口调用出错了!");
}
AuthorizeResultRespVO respVO=new AuthorizeResultRespVO();
respVO.setZhiMaCertId(zhiMaCert.getId());
respVO.setZhiMaBizNo(bizNo);
respVO.setZhiMaUrl(returnUrl);
return respVO;
}
@Override
public ApiResponse zhiMaCertResultQuery(RealNameAuthorizeReqVO reqVO) {
logger.info("real name zhiMaCertResultQuery reqVO {}", reqVO);
//根据uid,获取biz_no
ZhiMaCert zhiMaCert=zhiMaCertDao.selectByPrimaryKey(reqVO.getZhiMaCertId());
if(zhiMaCert==null){
logger.error("zhiMaCertResultQuery get cert by biz no is null ",reqVO.getBizNO());
throw new ServiceException(400, "错误:未找到芝麻认证信息!");
}
logger.info("zhiMaCertResultQuery get zhiMaCert by biz no from db is {} ",zhiMaCert);
if(zhiMaCert.getUid().equals(reqVO.getUid())){
logger.error("zhiMaCertResultQuery get cert by biz no is not same req uid {} ,db uid {}",reqVO.getUid(),zhiMaCert.getUid());
throw new ServiceException(400, "错误:未找到用户芝麻认证信息!");
}
ZhimaCustomerCertificationQueryResponse zhiMaResp=ZhiMaCallUtil.zhiMaResult(reqVO.getBizNO());
if(zhiMaResp==null){
logger.error("zhiMaCertResultQuery result is null,reqVO {}",reqVO);
throw new ServiceException(400, "错误:获取用户芝麻认证信息错误!");
}
if(zhiMaResp.isSuccess()&&"true".equals(zhiMaResp.getPassed())){
//芝麻认证通过
int updateCount = zhiMaCertDao.updateValidStatusByPrimaryKey(reqVO.getZhiMaCertId());
if(updateCount <1){
logger.error("zhiMaCertResultQuery update zhi ma cert valid status error,req vo {}",reqVO);
throw new ServiceException(400, "错误:更新用户芝麻认证信息错误!");
}
return new ApiResponse(true);
}else{
logger.error("zhiMaCertResultQuery result is null,reqVO {}",reqVO);
return new ApiResponse(400,zhiMaResp==null?"用户芝麻认证不通过!":zhiMaResp.getFailedReason(),false);
}
}
private LocalDateTime getLocalDateTime(){
LocalDateTime now=LocalDateTime.now();
return now;
... ...
package com.yohoufo.user.service.impl;
import com.yoho.error.exception.ServiceException;
import com.yohoufo.dal.user.IStoredSellerDao;
import com.yohoufo.dal.user.model.StoredSeller;
import com.yohoufo.user.cache.CacheService;
import com.yohoufo.user.service.IRealNameAuthorizeService;
import com.yohoufo.user.service.IStoredSellerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@Service
public class StoredSellerServiceImpl implements IStoredSellerService {
private Logger logger = LoggerFactory.getLogger(StoredSellerServiceImpl.class);
@Autowired
private CacheService cacheService;
@Autowired
IRealNameAuthorizeService realNameAuthorizeService;
@Autowired
private IStoredSellerDao storedSellerDao;
public boolean isStoredSeller(Integer uid){
StoredSeller storedSeller = getValidStoredSeller(uid);
if(storedSeller!=null&&storedSeller.getUid()!=null){
return true;
}
return false;
}
private StoredSeller getValidStoredSeller(Integer uid){
//从缓存中获取
logger.info("StoredSellerServiceImpl isStoredSeller uid is {} ",uid);
StoredSeller storedSeller = cacheService.getStoredSeller(uid);
logger.info("StoredSellerServiceImpl valid store seller uid is {} ,redis info is {} ",uid,storedSeller);
if(null != storedSeller){
return storedSeller;
}
//如果不存在,则从数据库获取
storedSeller= storedSellerDao.selectValidByUid(uid);
logger.info("StoredSellerServiceImpl get valid store seller uid is {} ,database info is {} ",uid,storedSeller);
if(storedSeller!=null){
//保存到redis
cacheService.setStoredSeller( storedSeller);
}
return storedSeller;
}
@Override
public void addUserAsStoredSeller(Integer uid){
logger.info("StoredSellerServiceImpl addUserAsStoredSeller enter uid is {} ",uid);
//检查是否已经实名认证
if(null==realNameAuthorizeService.getValidZhiMaCert(uid)){
logger.error("StoredSellerServiceImpl get zhi ma cert info is null , uid is {} ",uid);
throw new ServiceException(400,"商户没有实名认证,不允许更新为入驻商户");
}
//@TODO 检查是否已经缴纳保证金
LocalDateTime now=LocalDateTime.now();
long ts=now.toEpochSecond(ZoneOffset.of("+8"));
StoredSeller storedSeller=new StoredSeller();
storedSeller.setUid(uid);
storedSeller.setValidStatus(1);
storedSeller.setCreateTime(ts);
storedSeller.setUpdateTime(ts);
logger.info("StoredSellerServiceImpl addUserAsStoredSeller insert uid is {} , storedSeller {} ",uid,storedSeller);
int num=storedSellerDao.insert(storedSeller);
if(num<0){
logger.error("StoredSellerServiceImpl addUserAsStoredSeller error uid is {} , storedSeller {} ,insert num {} ",uid,storedSeller,num);
throw new ServiceException(400,"更新入驻用户信息错误");
}
//保存到redis
cacheService.setStoredSeller( storedSeller);
}
}
... ...
package com.yohoufo.user.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.ZhimaCustomerCertificationCertifyRequest;
import com.alipay.api.request.ZhimaCustomerCertificationInitializeRequest;
import com.alipay.api.request.ZhimaCustomerCertificationQueryRequest;
import com.alipay.api.response.ZhimaCustomerCertificationCertifyResponse;
import com.alipay.api.response.ZhimaCustomerCertificationInitializeResponse;
import com.alipay.api.response.ZhimaCustomerCertificationQueryResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.alipay.api.AlipayConstants.CHARSET_UTF8;
public class ZhiMaCallUtil {
private final static Logger logger = LoggerFactory.getLogger(ZhiMaCallUtil.class);
private static String APP_ID = "2016092000556291",
APP_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCFykKVR+xSSapScRNoi//rDLq5CaYLcN04Jzi/ivROFTkb5iYIdjshTio4tAJNpkT6HenCeiRUOrG9v2PPrLQN3utbkPv5XQag0wE2vaIHcfjNybx0xA8BWI9A5lgjJ47xE63qJvvLhlnpHSKq4tTkN7j7gaWWQjrqr5p78dEEp2+Wx/HTPE7wmSsYKN/8HqrKAxsh07dXRTDViGpHjA6RrdKZBCYUn8ncqLz6O5198Oost08BKSaX4qDQQLQD5ysdZBVgXspU0i55YCYdfCVqZ/1vsbptooN4BY501XmWsIpIUxSrUFR4pvvkZMncejyzkvWTbFtyqE3YuGUeVaedAgMBAAECggEAATwtwy0HzHaroNk0YamxMh1K9/xT0RU4pZUPHA2PVc0yWsSUI03cG+GZ2C4pO0hGqLxv9QClpzVngKXsqPUiMGKXb5/2A4ZNUlzATR4RCdqOfm/XUoigztVfdSzrMV/jHOyelWPIvUc/Ozyunj870eOFzKSUv79axeHbHjvMPyu8/kGE560tr0f/NgfmIcKjmeFQTh1R2FA61jwcYJBu5q5j+/ITsD3T5EPGneiMlAETXT1w80PHrTf4xrxnSoSwqryS+Qjh47DeSnAwK85g+R/Qlne89/XESGZJNJSChwoxHhuIEiLfyn2dFPETOqj129RT5QFST5WSdiQ08BAiLQKBgQDwSI3HGCu04yRDVuxNZqPcAHdxMZ7TjgLXfV6yEquR3uEYzx1RApvx+NnlyYLTGH4amWTAhIn3XiVAK+vxSIbQfEb9BaKLV819041c32YvEw5JMHOMCfzov3+auBt5Opmj64sG6p/DyOExAc2ZyitflMeSwE+NCk9GrJiJo1HhKwKBgQCOioT+pC4Rm1fsZcqtzx+t/FvFQuCztBIMIt6QkZ/5DabI4SYI+17DHes9uVN0Q75lqCOB6sCjKqfMqpok7wHqUQnA7gyswyaMjRQdcys2chkV33mozfeXQ+s/9YxBtsKg1zev9MJeLbKCSwo1rzaGdybmtCHAD4mreNptxeFmVwKBgQCFB+ZW4C7yiv88uRdDExyNZUS7yrkgb3NrUuHmvSd4L2l4jtKwUz17jkc1TYe8z8ahe2Oooriv19PP34FVqM3bB7NVypTfiNEgZMvTK2wri+VQ6B5Q3gbD5aIESwIK8EK32mSyg5vIjaL/uvvVtXSmCn0j5o0kjRyvCEe7jEx82QKBgQCCDWqItx19XQHco4dIDAm4gd7tXTaNX4dz4UC2INgXsVfyQlKksUzls1+V4oh9NO377GvxNlHqzZlqCGI5voQ92RCQIeIYormCVZn7wL+1nma66TokRUBYmFSE97Gvp2Nuws6BUU0iBomvjW3US3fxObeZmNKOXN7cP5jzvS8JYwKBgGCP22q/BZ/T73FC61k8M/OHr/sMOE01mifI8Cd+L5/eOkkbwYOgYEKsJoe+uGNMnOzWNYAGvgq4LHlvrYdBGcTFGLLOliRO8D0bIiPL8mFw8LuYtoV2l2mFUZOxQDwk57Mgv7bcAhV9lFeZS0M6X7vw2enSEdZDClhcBNz+VJFQ",
ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu+Ykj77NJahXnNXuZ4YFm0mwnhjVZsjUMbf86IJ1Vrj44PDSr8S6xwM6EkGaSXXFod6XcKsDi32KavXHwgpYZLg1udTjtg6o0HnfBe4JiwMuI8wtx5PNaWPuer1C4JRhs3NP6nlF9en8tM0Hq6itZtQFo0/KK7qCDBlZjzz3BB+es33yab2Ts6qFVz+jjm+n8XocEzncNKVCafsuL05q5Myk6aBT8/J16i4uT86PBANtWctWX/uU5s7tassC9TCwTHnthMIZnV1bXV5WS+wqJ+wxv9ojS4Ug+dKo2P8GKgYl5ocezzG8EvGq4Xoha9dyZwM6uWBg3JvX3IGPilPd8wIDAQAB";
private static String url="https://openapi.alipaydev.com/gateway.do";//"https://openapi.alipay.com/gateway.do"
private final static String ZHI_MA_PRODUCT_CODE="w1010100000000002978";
/**
* 芝麻认知,请求biz_no
* @param transactionId
* @param certName
* @param certNo
* @return
* @throws Exception
*/
public static String zhiMaCertInit(String transactionId,String certName,String certNo) {
try{
logger.info("zhi ma cert init enter ,transactionId {} ,certName {},certNo {}",transactionId,certName,certNo);
AlipayClient alipayClient = new DefaultAlipayClient(url, APP_ID, APP_PRIVATE_KEY, "json", "utf-8", ALIPAY_PUBLIC_KEY, "RSA2");
ZhimaCustomerCertificationInitializeRequest request = new ZhimaCustomerCertificationInitializeRequest();
JSONObject identityParam=new JSONObject();
identityParam.put("identity_type","CERT_INFO");
identityParam.put("cert_type","IDENTITY_CARD");
identityParam.put("cert_name",certName);
identityParam.put("cert_no",certNo);
JSONObject jo=new JSONObject();
jo.put("transaction_id",transactionId);
jo.put("product_code",ZHI_MA_PRODUCT_CODE);
jo.put("biz_code","SMART_FACE");
jo.put("identity_param",identityParam);
jo.put("ext_biz_param",new JSONObject());
/*String bizContent = "{"
+ "\"transaction_id\":\""+transactionId+"\","
+ "\"product_code\":\"w1010100000000002978\","
+ "\"biz_code\":\"SMART_FACE\","
+ "\"identity_param\":\"{\\\"identity_type\\\":\\\"CERT_INFO\\\",\\\"cert_type\\\":\\\"IDENTITY_CARD\\\",\\\"cert_name\\\":\\\""+certName+"\\\",\\\"cert_no\\\":\\\""+certNo+"\\\"}\","
+ "\"ext_biz_param\":\"{}\"" + " }";*/
String bizContent=JSON.toJSONString(jo);
request.setBizContent(bizContent);
logger.info("zhi ma cert init begin request is {} ",request);
ZhimaCustomerCertificationInitializeResponse response = alipayClient.execute(request);
logger.info("zhi ma cert init end response {}",response);
if (response.isSuccess()) {
logger.info("zhi ma cert init end ,call success ");
return response.getBizNo();
} else {
logger.info("zhi ma cert init end ,call fail ");
return "";
}
}catch (Exception e){
logger.error("zhi ma cert init call error {} ",e);
return "";
}
}
/**
* 芝麻认证,获取认证url
* @param bizNo
* @return
* @throws Exception
*/
public static String zhiMaCertUrl(String bizNo){
try{
// 获取alipay client
logger.info("zhi ma cert url enter ,bizNo {} ",bizNo);
AlipayClient alipayClient = new DefaultAlipayClient(url, APP_ID, APP_PRIVATE_KEY, "json", "utf-8", ALIPAY_PUBLIC_KEY, "RSA2");
ZhimaCustomerCertificationCertifyRequest request = new ZhimaCustomerCertificationCertifyRequest();
// 设置业务参数,必须要biz_no
JSONObject jo=new JSONObject();
jo.put("biz_no",bizNo);
String bizContent=JSON.toJSONString(jo);
request.setBizContent(bizContent);
// 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议
// alipay://www.taobao.com 或者 alipays://www.taobao.com,分别对应http和https请求
request.setReturnUrl("alipays://www.taobao.com");
logger.info("zhi ma cert url begin ,request {} ",request);
// 这里一定要使用GET模式
ZhimaCustomerCertificationCertifyResponse response = alipayClient.pageExecute(request, "GET");
logger.info("zhi ma cert url end ,response {} " ,response);
// 从body中获取URL
String url = response.getBody();
return url;
}catch (Exception e){
logger.error("zhi ma cert url error {}",e);
return "";
}
}
/**
* 芝麻认证,获取认证结果
* @param bizNo
* @return
*/
public static ZhimaCustomerCertificationQueryResponse zhiMaResult(String bizNo) {
ZhimaCustomerCertificationQueryResponse response=null;
try{
// 获取alipay client
logger.info("zhi ma result enter ,bizNo {} ",bizNo);
AlipayClient alipayClient = new DefaultAlipayClient(url, APP_ID, APP_PRIVATE_KEY, "json", "utf-8", ALIPAY_PUBLIC_KEY, "RSA2");
ZhimaCustomerCertificationQueryRequest request = new ZhimaCustomerCertificationQueryRequest();
// 设置业务参数,必须要biz_no
JSONObject jo=new JSONObject();
jo.put("biz_no",bizNo);
String bizContent=JSON.toJSONString(jo);
request.setBizContent(bizContent);
logger.info("zhi ma result begin ,request {} ",request);
response = alipayClient.execute(request);
logger.info("zhi ma result end ,response {} ",response);
return response;
}catch (Exception e){
logger.error("zhi ma result error {} ",e);
return response;
}
}
}
... ...
... ... @@ -8,6 +8,7 @@ datasources:
daos:
- com.yohoufo.dal.user.IUserAuthorizeHistoryDao
- com.yohoufo.dal.user.IUserAuthorizeInfoDao
- com.yohoufo.dal.user.IZhiMaCertDao
ufo_product:
servers:
... ...
... ... @@ -8,6 +8,7 @@ datasources:
daos:
- com.yohoufo.dal.user.IUserAuthorizeHistoryDao
- com.yohoufo.dal.user.IUserAuthorizeInfoDao
- com.yohoufo.dal.user.IZhiMaCertDao
ufo_product:
servers:
... ...