首页 > 其他分享 >聚合支付项目-18

聚合支付项目-18

时间:2023-12-28 20:33:43浏览次数:31  
标签:聚合 String 商户 18 private ApiModelProperty value 注册 支付

2.4 商户注册

2.4.1 系统设计

商户拿到获取的验证码即可提交注册信息,完成商户注册,本节完成商户注册功能。

商户注册信息向三个地方写入数据 ,如下图:

当前阶段暂时只向商户表写入数据 ,待接入SaaS系统时向员工表、SaaS系统写入。

2.4.2 商户服务-注册商户(接口②)

商户服务提供商户注册的服务接口供商户平台应用使用,本节实现商户服务注册商户接口。

2.4.2.1 接口定义

在商户服务定义商户注册接口

1、接口描述如下:

1)校验商户注册的基础数据:账号、密码、手机号

2)添加商户

注意:本节暂不实现对接SaaS系统,仅实现新增一个商户,并将手机号填写到商户表。

3)返回注册结果给商户平台应用

2、定义商户注册DTO

此DTO作为商户注册、资质申请的公共类。

在 huiminpay-merchant-api 工程的 com.huiminpay.merchant.api.dto 包下添加 MerchantDTO:

package com.yh.merchant.api.dto;

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

import java.io.Serializable;

@Data
@ApiModel(value="MerchantDTO", description="")
public class MerchantDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "主键")
    private Long id;

    @ApiModelProperty(value = "商户名称")
    private String merchantName;

    @ApiModelProperty(value = "企业编号")
    private String merchantNo;

    @ApiModelProperty(value = "企业地址")
    private String merchantAddress;

    @ApiModelProperty(value = "商户类型")
    private String merchantType;

    @ApiModelProperty(value = "营业执照(企业证明)")
    private String businessLicensesImg;

    @ApiModelProperty(value = "法人身份证正面照片")
    private String idCardFrontImg;

    @ApiModelProperty(value = "法人身份证反面照片")
    private String idCardAfterImg;

    @ApiModelProperty(value = "联系人姓名")
    private String username;

    @ApiModelProperty(value = "联系人手机号(关联统一账号)")
    private String mobile;

    @ApiModelProperty(value = "联系人地址")
    private String contactsAddress;

    @ApiModelProperty(value = "审核状态 0-未申请,1-已申请待审核,2-审核通过,3-审核拒绝")
    private String auditStatus;

    @ApiModelProperty(value = "租户ID,关联统一用户")
    private Long tenantId;
}

DTO可以使用 “代码生成工具” 自动生成:

修改代码生成工具中的 MyBatisPlusGenerator 类:

private static final Boolean IS_DTO = true; 
      
if (IS_DTO) {
    globalConfig.setSwagger2(true); 
    globalConfig.setEntityName("%sDTO"); 
    packageConfig.setEntity("dto"); 
}

当生成dto时将IS_DTO设置为true,运行生成工具即可。

3、接口定义如下:

在MerchantService接口类中定义如下接口:

/**
 * 商户注册
 * @return
 */
MerchantDTO createMerchant(MerchantDTO merchantDTO);

2.4.2.2 接口实现

实现MerchantServiceImpl中的createMerchant方法:

@Override
public MerchantDTO createMerchant(MerchantDTO merchantDTO) {
    Merchant merchant = new Merchant();
    //设置审核状态0‐未申请,1‐已申请待审核,2‐审核通过,3‐审核拒绝
    merchant.setAuditStatus("0");
    //设置手机号
    merchant.setMobile(merchantDTO.getMobile());
    //...
    //保存商户
    merchantMapper.insert(merchant);
    //将新增商户id返回
    merchantDTO.setId(merchant.getId());
    return merchantDTO;
}

2.4.3 商户平台应用-注册商户(接口③)

商户平台应用调用商户服务提供的商户注册接口即可完成商户注册业务,本节实现商户平台应用注册商户接口的开发。

2.4.3.1 接口定义

1、接口描述如下:

1)接收商户填写的注册数据

2)商户平台应用校验手机验证码

3)请求商户服务进行商户注册

4)返回注册结果给前端

2、定义商户注册VO:

在 com.huiminpay.merchant.vo 包下添加VO类型,VO类型负责接收前端请求的数据。

下图是商户注册的用户界面,根据用户界面中的元素定义VO类的属性:

package com.huiminpay.merchant.vo;

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

import java.io.Serializable;

@ApiModel(value = "MerchantRegisterVo", description = "商户注册信息")
@Data
public class MerchantRegisterVo implements Serializable {
    @ApiModelProperty("商户手机号")
    private String mobile;
    @ApiModelProperty("商户用户名")
    private String username;
    @ApiModelProperty("商户密码")
    private String password;
    @ApiModelProperty("验证码的key")
    private String verifiykey;
    @ApiModelProperty("验证码")
    private String verifiyCode;
}

3、接口定义如下:

在MerchantController类中定义如下接口:

@ApiOperation("注册商户")
@ApiImplicitParam(name = "merchantRegister", value = "注册信息", required = true, dataType =
        "MerchantRegisterVo", paramType = "body")
@PostMapping("/merchants/register")
public MerchantRegisterVo registerMerchant(@RequestBody MerchantRegisterVo merchantRegister) {
    //校验验证码
    //...
    //注册商户
    //...
    return merchantRegister;
}

2.4.3.2 校验验证码实现

  1. 在SmsService中定义校验验证码的service接口
/**
 * 校验验证码,抛出异常则校验无效
 * @param verifiyKey  验证码key
 * @param verifiyCode 验证码
 */
void checkVerifiyCode(String verifiyKey, String verifiyCode);
  1. 在SmsServiceImpl中定义校验验证码的service 实现方法
@Override
public void checkVerifiyCode(String verifiyKey, String verifiyCode) {
    String url = smsUrl + "/verify?name=sms&verificationCode=" + verifiyCode + "&verificationKey=" + verifiyKey;
    Map responseMap = null;
    try {
        //请求校验验证码
        ResponseEntity<Map> exchange = restTemplate
            .exchange(url, HttpMethod.POST, HttpEntity.EMPTY, Map.class);
        responseMap = exchange.getBody();
        log.info("校验验证码,响应内容:{}", JSON.toJSONString(responseMap));
    } catch (RestClientException e) {
        e.printStackTrace();
        log.info(e.getMessage(), e);
        throw new RuntimeException("验证码错误");
    }
    if (responseMap == null || responseMap.get("result") == null || !(Boolean)responseMap.get("result")) {
        throw new RuntimeException("验证码错误");
    }
}
  1. 在controller中调用校验验证码
@ApiOperation("注册商户")
@ApiImplicitParam(name = "merchantRegister", value = "注册信息", required = true, dataType =
        "MerchantRegisterVo", paramType = "body")
@PostMapping("/merchants/register")
public MerchantRegisterVo registerMerchant(@RequestBody MerchantRegisterVo merchantRegister) {
    //校验验证码
    smsService.checkVerifiyCode(merchantRegister.getVerifiykey(),
            merchantRegister.getVerifiyCode());
    //注册商户
    return merchantRegister;
}

2.4.3.3 注册商户实现

在Controller中调用Dubbo接口实现注册商户

@ApiOperation("注册商户")
@ApiImplicitParam(name = "merchantRegister", value = "注册信息", required = true, dataType =
        "MerchantRegisterVo", paramType = "body")
@PostMapping("/merchants/register")
public MerchantRegisterVo registerMerchant(@RequestBody MerchantRegisterVo merchantRegister) {
    //校验验证码
    smsService.checkVerifiyCode(merchantRegister.getVerifiykey(),
            merchantRegister.getVerifiyCode());
    //注册商户
    MerchantDTO merchantDTO = new MerchantDTO();
    merchantDTO.setUsername(merchantRegister.getUsername());
    merchantDTO.setMobile(merchantRegister.getMobile());
    merchantDTO.setPassword(merchantRegister.getPassword());
    merchantService.createMerchant(merchantDTO);
    return merchantRegister;
}

2.4.3.4 接口测试

下面使用Postman对注册商户整体流程进行测试:

  1. 获取短信验证码过程略。
  2. 商户注册:http://localhost:57010/merchant/merchants/register
    填写注册信息:
{
  "mobile": "13081936214",
  "password": "123456",
  "username": "13081936214",
  "verifiyCode": "424737",
  "verifiykey": "sms:1a22c4a19e8a48a0adf7c17cd09ed717"
}
  1. 注册成功

2.4.4 MapStruct对象转换

2.4.4.1 数据传输对象

在商户注册开发过程中用于数据传输的对象有 MerchantRegisterVO、MerchantDTO、entity(实体类),

它们的用途如下:

1、MerchantRegisterVO用于应用层接收前端请求及响应前端数据。

2、MerchantDTO 用于服务层传入及响应数据。

3、entity(实体类) 用于持久层传入及响应数据。

如下图:

数据传输对象(Data Transfer Object)是系统在交互过程中根据需要及规范将数据封装到数据对象中进行传输。

本项目数据传输对象的规范:

1、应用层

如没有接口参数的特殊要求,应用层使用DTO结尾的对象传输,否则单独定义VO结尾的对象传输。

2、服务层

统一使用DTO结尾的对象传输。

3、持久层

统一使用Entity对象传输。

标签:聚合,String,商户,18,private,ApiModelProperty,value,注册,支付
From: https://blog.51cto.com/u_16228353/9018231

相关文章

  • 支付中资金是如何流转的?
    一、支付是什么?对于不同角色来说,支付的定义不相同,因为各自关注的点不同:消费者:支付付款 == 支付;商家商户:消费者付款 +  商户自己收款 == 支付;银行机构:资金的转移入账 == 支付;综上,整个支付主要分为三个标准化的过程:交易(Transaction)、清分(Clearing)、结算(Settlement)......
  • 支付宝 v3 验签如何实现
    上次给大家介绍了支付宝v3自签名如何实现,这次顺便再把验签也写一下。为什么要验签说起为什么要验签,如果要详细一点解释的话,可以写很多很多......我们就简单一点来解释:验签可以证明接收到的信息是支付宝给我的,不是被人中途拦截篡改数据之后再发给我的。支付宝的通知分为「同步......
  • 海康华为大华宇视等摄像头以及各种直播流地址(RTSP/RTMP/FLV/HLS等)通过LiveNVR转成标准
    @目录1、背景说明2、通道配置2.1、直播流地址配置2.2、配置RTSP接入2.3、配置Onvif接入2.4、配置SDK接入2.4.1、海康SDK接入2.4.2、大华SDK接入2.4.3、天地伟业SDK接入2.5、配置拉转视频文件2.6、海康ISUP接入2.6.1、海康ISUP接入配置2.6.2、海康设备接入2.6.2.1、海康EHOME接......
  • 家用电子秤芯片CSU8RP1186可开发方案
     随着科技的不断发展,时代的变化,电子秤已经成为我们日常生活中不可或缺的测量工具。电子秤由称重模块、ADC芯片、MCU主控芯片、按键模块及显示模块等设计开发组成。当物体放到秤体上时,称重模块中的压力传感器取得称重物体的信息,再由ADC芯片将模拟信号转化为数字信号。MCU主控芯片......
  • pingxx支付渠道
     upacp_b2b  银联企业网银支付(银联B2BPC网页支付)cp_b2b  银联电子企业网银支付(银联电子B2BPC网页支付) 支付渠道属性值 channel属性值支付渠道名称alipay支付宝App支付alipay_wap支付宝手机网站支付alipay_qr支付宝扫码支付alipay_sca......
  • 2018 考研English英语二
    SectionIIITranslation46.【真题译文】:一个五年级的学生收到一份家庭作业:即从一系列职业中选择自己未来的职业道路。他勾划了“宇航员”,但很快由将“科学家”添加到列表中,并也将其选中。这个男孩相信,如果他读得足够多,他就可以探索尽可能多的他喜欢的职业道路。所以他读书广......
  • [C++ 从入门到精通] 18.左值、右值,左值引用、右值引用、move
    文章预览:一.左值和右值二.引用分类三.左值引用(1个地址符&)四.右值引用(2个地址符&)五.std::move函数一.左值和右值inti;//赋值语句i=20;//左值:i(int类型的对象,代表一块内存区域),右值:20(代表一个值)左值(左值表达式):能用在赋值语句等号左侧的东西,就称之为左值。它能够代表一个......
  • 月薪18~35K,刚成立3个月的国企正在招兵买马
    之前跟大家聊过军工央企招聘抛出“王炸”,很多朋友发信息来咨询具体招聘事宜,985、211,他是哪所学校毕业能够进入等等问题,首先感谢大家对小柒的认可,小柒也与大家一一回复,但小柒只是抛砖引玉,具体事宜还是要咨询官方更为适宜。 今天就跟大家聊一聊刚成立的国企进入合不合适,有哪些优......
  • 20230318_Test考试分析
    \(T1:\)题目链接入门模拟题。维护这个篮子现在的作用端点的位置即可。预计得分:\(100pts\)。\(T2:\)题目链接读题可以发现\(n\leq400\)。于是可以想到直接暴力预处理前缀和。然后用\(O(n^3)\)枚举正方形左上角的点的坐标\([i,j]\)和这个正方形的边长即可。预计得......
  • 18 aurora 8b10b回环测试
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述8B/10B编码是1983年由IBM公司的AlWidmer和PeterFranaszek所提出的数据传输编码标准,目前已经被广泛应......