调接口流程

调接口流程_第1张图片

例如

1 短信通知接口
1.1 接口功能:

用于系统给家长用户发送短信业务通知。

1.2 接口原型
    承载协议:基于HTTPS+POST和JSON格式返回结果
    应用场景:管理后台通过编辑发送需要通知用户家长的相关业务通知功能。
    接口地址:http://service.hengfeng.org/dz/tpw/sms

参数说明

属性 数据类型 必须 名称 说明
trans_Id string O 消息识别码 用于区分识别请求消息一致性
mobile string M 手机号码 用户手机号码(11位号码)
content string M 短信内容 需要发送的短信内容

返回参数

属性 数据类型 必须 名称 说明
trans_Id string O 消息识别码 用于区分识别请求消息一致性

分装参数

import java.io.Serializable;
import com.alibaba.fastjson.annotation.JSONField;

public class SmsReq implements Serializable {
    private static final long serialVersionUID = 1L;
    @JSONField(name = "trans_Id")
    private String transId;
    @JSONField(name = "mobile")
    private String mobile;
    @JSONField(name = "content")
    private String content;
// getXxx  setXxx

返回参数封装

import java.io.Serializable;
import org.apache.commons.lang.StringUtils;
import com.toltech.phatent.commons.enums.ResultStatu;

public class ResultBean implements Serializable {
    private static final long serialVersionUID = 1L;
    private boolean success;
    private Integer status;
    private String message;
    private T data;
    
    public ResultBean(ResultStatu statu, T data){
        this.success = statu.isSuccess();
        this.status = statu.getStatus();
        this.message = statu.getMessage();
        this.data = data;
    }
    
    public ResultBean(ResultStatu statu, T data, String message){
        this.success = statu.isSuccess();
        this.status = statu.getStatus();
        if(StringUtils.isNotBlank(message)){
            this.message = message;
        } else {
            this.message = statu.getMessage();
        }
        this.data = data;
    }

    // getXxx() setXxx()

验证

  1. 判断传入的参数是否为空(即手机号码)
  2. 保存到Redis中 先从Redis中取,如果缓存有证明已经存在
    1. 分装参数
    1. 把参数对象转成String -->String body = JSON.toJSONString(req);
    1. 加密字符串 ---> body = CryptoUtils.encrypt(body); 向固定的url发送请求
    1. 判断url请求的返回是否为空,不为空先 解密 --->respStr = CryptoUtils.decrypt(respStr);
    1. 判断返回值,与返回参数是否匹配,如果匹配以JsonObject方式返回 --->object = (JSONObject) JSON.toJSON(result);
@ResponseBody
    @RequestMapping(AUTH_CODE)
    public JSONObject authCode(String mobile){
        //校验手机号为空
        if(StringUtils.isBlank(mobile)){
            ResultBean result = new ResultBean(ResultStatu.X1000, null, "手机号为空");
            return (JSONObject) JSON.toJSON(result);
        }
        String authCode = (String) jedisHandle.getData(mobile);
        if(authCode != null){
            ResultBean result = new ResultBean(ResultStatu.X1003, null, "操作频繁,请稍后再试");
            return (JSONObject) JSON.toJSON(result);
        }
        int random = (int)(Math.random()*(9999-1000+1))+1000;//产生1000-9999的随机数
        SmsReq req = new SmsReq();
        req.setTransId(String.valueOf(System.currentTimeMillis()));
        req.setMobile(mobile);
        req.setContent("[大知.和教育]您的登录验证码为:" + random+",验证码有效时间为60秒。");
        String body = JSON.toJSONString(req);
        body = CryptoUtils.encrypt(body);
        String url = ConfigUtils.getValue(FrontConst.DZ_EDU_SMS_URL_CONF);
        //以发送HTTP报文形式调用远程登录接口获取登录结果
        String respStr = HttpUtils.postStringBody(url, body);
        if(StringUtils.isBlank(respStr)){
            ResultBean result = new ResultBean(ResultStatu.X1002, null);
            return (JSONObject) JSON.toJSON(result);
        }
        respStr = CryptoUtils.decrypt(respStr);
        JSONObject respObject = JSON.parseObject(respStr);
        JSONObject object = null;
        ResultBean result = null;
        if(respObject.containsKey("trans_Id") && respObject.getString("trans_Id").equals(req.getTransId())){
            result = new ResultBean(ResultStatu.X0000, null);
        } else {
            result = new ResultBean(ResultStatu.X1002, null);
        }
        object = (JSONObject) JSON.toJSON(result);
        return object;
    }
}

你可能感兴趣的:(调接口流程)