创建应用的后端代码流程

参数配置首先需要创建应用
应用创建成功,前端还需要查询应用
一个查询某商户下面的应用列表
根据应用的ID查询应用

支付参数配置
1.创建应用
2.为应用绑定服务类型
3.配置支付渠道参数

package com.shanjupay.merchant.controller;

import com.shanjupay.merchant.api.AppService;
import com.shanjupay.merchant.api.dto.AppDTO;
import com.shanjupay.merchant.common.util.SecurityUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

  • @author Administrator
  • @version 1.0
    **/

@Api(value = “商户平台-应用管理”, tags = “商户平台-应用相关”, description = “商户平台-应用相关”)
@RestController
public class AppController {

@Reference
AppService appService;


@ApiOperation("商户创建应用")
@ApiImplicitParams({
        @ApiImplicitParam(name = "app", value = "应用信息", required = true, dataType = "AppDTO", paramType = "body")})
@PostMapping(value = "/my/apps")
public AppDTO createApp(@RequestBody AppDTO app){
    //得到商户id
    Long merchantId = SecurityUtil.getMerchantId();

   return  appService.createApp(merchantId,app);
}

@ApiOperation("查询商户下的应用列表")
@GetMapping(value = "/my/apps")
public List<AppDTO> queryMyApps() {
    //商户id
    Long merchantId = SecurityUtil.getMerchantId();
    return appService.queryAppByMerchant(merchantId);
}
@ApiOperation("根据应用id查询应用信息")
@ApiImplicitParam(value = "应用id",name = "appId",dataType = "String",paramType = "path")
@GetMapping(value = "/my/apps/{appId}")
public AppDTO getApp(@PathVariable("appId") String appId){
    return appService.getAppById(appId);
}

}

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.shanjupay.common.domain.BusinessException;
import com.shanjupay.common.domain.CommonErrorCode;
import com.shanjupay.merchant.api.AppService;
import com.shanjupay.merchant.api.dto.AppDTO;
import com.shanjupay.merchant.convert.AppCovert;
import com.shanjupay.merchant.entity.App;
import com.shanjupay.merchant.entity.Merchant;
import com.shanjupay.merchant.mapper.AppMapper;
import com.shanjupay.merchant.mapper.MerchantMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.UUID;

/**

  • @author Administrator

  • @version 1.0
    **/
    @org.apache.dubbo.config.annotation.Service
    public class AppServiceImpl implements AppService {

    @Autowired
    AppMapper appMapper;

    @Autowired
    MerchantMapper merchantMapper;
    /**

    • 创建应用

    • @param merchantId 商户id

    • @param appDTO 应用信息

    • @return 创建成功的应用信息

    • @throws BusinessException
      */
      @Override
      public AppDTO createApp(Long merchantId, AppDTO appDTO) throws BusinessException {

      if(merchantIdnull || appDTO null || StringUtils.isBlank(appDTO.getAppName())){
      throw new BusinessException(CommonErrorCode.E_300009);
      }
      // 1)校验商户是否通过资质审核
      Merchant merchant = merchantMapper.selectById(merchantId);
      if(merchant == null){
      throw new BusinessException(CommonErrorCode.E_200002);
      }
      //取出商户资质申请状态
      String auditStatus = merchant.getAuditStatus();
      if(!“2”.equals(auditStatus)){
      throw new BusinessException(CommonErrorCode.E_200003);
      }

      // 应用名称需要校验唯一性
      //传入的应用名称
      String appName = appDTO.getAppName();
      Boolean existAppName = isExistAppName(appName);
      if (existAppName){
      throw new BusinessException(CommonErrorCode.E_200004);
      }

      //2)生成应用ID
      String appId = UUID.randomUUID().toString();

      App entity = AppCovert.INSTANCE.dto2entity(appDTO);
      entity.setAppId(appId);//应用id
      entity.setMerchantId(merchantId);//商户id

      //调用 appMapper向app表插入数据
      appMapper.insert(entity);

      return AppCovert.INSTANCE.entity2dto(entity);
      }

    /**

    • 根据商户id查询应用列表
    • @param merchantId
    • @return
    • @throws BusinessException
      */
      @Override
      public List queryAppByMerchant(Long merchantId) throws BusinessException {
      List apps = appMapper.selectList(new LambdaQueryWrapper().eq(App::getMerchantId, merchantId));
      return AppCovert.INSTANCE.listentity2dto(apps);
      }

    /**

    • 根据应用id查询应用信息
    • @param appId
    • @return
    • @throws BusinessException
      */
      @Override
      public AppDTO getAppById(String appId) throws BusinessException {
      App app = appMapper.selectOne(new LambdaQueryWrapper().eq(App::getAppId, appId));
      return AppCovert.INSTANCE.entity2dto(app);
      }

    //判断应用名称是否存在
    private Boolean isExistAppName(String appName){
    Integer count = appMapper.selectCount(new LambdaQueryWrapper().eq(App::getAppName, appName));
    return count >0;
    }
    }

package com.shanjupay.merchant.api.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
@ApiModel(value=“AppDTO”, description="")
public class AppDTO implements Serializable {

private static final long serialVersionUID = 1L;

private String appId;

@ApiModelProperty(value = "商店名称")
private String appName;

@ApiModelProperty(value = "所属商户")
private Long merchantId;

@ApiModelProperty(value = "应用公钥(RSAWithSHA256)")
private String publicKey;

@ApiModelProperty(value = "授权回调地址")
private String notifyUrl;

}

package com.shanjupay.merchant.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.shanjupay.common.util.EncryptUtil;
import com.shanjupay.merchant.api.MerchantService;
import com.shanjupay.merchant.api.dto.MerchantDTO;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/***

  • 获取当前登录用户信息

  • 前端配置token,后续每次请求并通过Header方式发送至后端
    */
    public class SecurityUtil {

    //测试使用
    // public static Long getMerchantId() {
    // HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes()))
    // .getRequest();
    // String jsonToken = request.getHeader(“authorization”);
    // if (StringUtils.isEmpty(jsonToken) || !jsonToken.startsWith("Bearer ")) {
    // throw new RuntimeException(“token is not as expected”);
    // }
    // jsonToken = jsonToken.substring(7);
    // jsonToken = EncryptUtil.decodeUTF8StringBase64(jsonToken);
    // JSONObject jsonObject = JSON.parseObject(jsonToken);
    // return jsonObject.getLong(“merchantId”);
    // }

    public static LoginUser getUser() {
    ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder
    .getRequestAttributes();

     if (servletRequestAttributes != null) {
     	HttpServletRequest request = servletRequestAttributes.getRequest();
    
     	Object jwt = request.getAttribute("jsonToken");
     	if (jwt instanceof LoginUser) {
     		return (LoginUser) jwt;
     	}
     }
     return new LoginUser();
    

    }

    public static Long getMerchantId(){
    MerchantService merchantService = ApplicationContextHelper.getBean(MerchantService.class);
    MerchantDTO merchant = merchantService.queryMerchantByTenantId(getUser().getTenantId());
    Long merchantId = null;
    if(merchant!=null){
    merchantId = merchant.getId();
    }
    return merchantId;
    }

    /**

    • 转换明文jsonToken为用户对象
    • @param token
    • @return
      */
      public static LoginUser convertTokenToLoginUser(String token) {
      token = EncryptUtil.decodeUTF8StringBase64(token);
      LoginUser user = new LoginUser();
      JSONObject jsonObject = JSON.parseObject(token);
      String payload = jsonObject.getString(“payload”);
      Map<String, Object> payloadMap = JSON.parseObject(payload, Map.class);
      user.setPayload(payloadMap);
      user.setClientId(jsonObject.getString(“client_id”));
      user.setMobile(jsonObject.getString(“mobile”));
      user.setUsername(jsonObject.getString(“user_name”));
      return user;
      }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值