|  |  |  | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.pojoSe.SeCodeVerify; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.pojoSe.SeOpenId; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.voSe.VoClientWechat; | 
|---|
|  |  |  | import com.dy.pipIrrSell.wechatpay.PayInfo; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.client.dto.CodeLoginDTO; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.client.dto.CodeVerifyDTO; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.result.WechatResultCode; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.sms.AliyunSmsSv; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.sms.RandomCode; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.util.RestTemplateUtil; | 
|---|
|  |  |  | import com.dy.pipIrrWechat.wechatpay.PayInfo; | 
|---|
|  |  |  | import io.swagger.v3.oas.annotations.tags.Tag; | 
|---|
|  |  |  | import jakarta.validation.Valid; | 
|---|
|  |  |  | import lombok.RequiredArgsConstructor; | 
|---|
|  |  |  | 
|---|
|  |  |  | private final ClientSv clientSv; | 
|---|
|  |  |  | private final AliyunSmsSv aliyunSmsSv; | 
|---|
|  |  |  | private final RestTemplateUtil restTemplateUtil; | 
|---|
|  |  |  | private final String privateCertFileName = PayInfo.privateCertFileName; | 
|---|
|  |  |  | private final String appid = PayInfo.appid; | 
|---|
|  |  |  | private final String secret = PayInfo.secret; | 
|---|
|  |  |  | //private final String appid = PayInfo.appid; | 
|---|
|  |  |  | //private final String secret = PayInfo.secret; | 
|---|
|  |  |  | private final String mchid = PayInfo.mchid; | 
|---|
|  |  |  | private final String schema = PayInfo.schema; | 
|---|
|  |  |  | private final String signType = PayInfo.signType; | 
|---|
|  |  |  | 
|---|
|  |  |  | * @throws IOException | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping(path = "code_login", consumes = MediaType.APPLICATION_JSON_VALUE) | 
|---|
|  |  |  | public BaseResponse<VoClientWechat> codeLogin(@RequestBody @Valid CodeLoginDTO po, BindingResult bindingResult) throws IOException { | 
|---|
|  |  |  | public BaseResponse<JSONObject> codeLogin(@RequestBody @Valid CodeLoginDTO po, BindingResult bindingResult) throws IOException { | 
|---|
|  |  |  | if(bindingResult != null && bindingResult.hasErrors()){ | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 登录凭证校验 | 
|---|
|  |  |  | Map<String, Object> queryParams = new HashMap<>(); | 
|---|
|  |  |  | queryParams.put("appid", appid); | 
|---|
|  |  |  | queryParams.put("secret", secret); | 
|---|
|  |  |  | queryParams.put("appid", PayInfo.appid); | 
|---|
|  |  |  | queryParams.put("secret", PayInfo.secret); | 
|---|
|  |  |  | queryParams.put("js_code", code); | 
|---|
|  |  |  | queryParams.put("grant_type", grantType); | 
|---|
|  |  |  | Map<String, String> headerParams = new HashMap<>(); | 
|---|
|  |  |  | JSONObject job = restTemplateUtil.get(loginUrl, queryParams, headerParams); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(job.containsKey("errmsg ")) { | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg(WechatResultCode.INVALID_CODE.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String openId = job.getString("openid"); | 
|---|
|  |  |  | if(openId == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | JSONObject job_client = new JSONObject(); | 
|---|
|  |  |  | VoClientWechat res = clientSv.getSimpleClientInfo(null, openId); | 
|---|
|  |  |  | return BaseResponseUtils.buildSuccess(res); | 
|---|
|  |  |  | if(res != null) { | 
|---|
|  |  |  | job_client.put("client", res); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | VoClientWechat voClientWechat = new VoClientWechat(); | 
|---|
|  |  |  | job_client.put("client", voClientWechat); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return BaseResponseUtils.buildSuccess(job_client); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("查询农户异常", e); | 
|---|
|  |  |  | return BaseResponseUtils.buildException(e.getMessage()) ; | 
|---|
|  |  |  | 
|---|
|  |  |  | if(phoneNumber == null || phoneNumber.length() <= 0) { | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg(WechatResultCode.PHONE_NUMBER_CANNOT_BE_NULL.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Long clientId = clientSv.getClientIdByPhone(phoneNumber); | 
|---|
|  |  |  | if(clientId == null) { | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg("该手机号对应的农户不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 生成6位验证码并转为Json格式 | 
|---|
|  |  |  | String securityCode = String.valueOf(RandomCode.genCode()); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 校验通过,进行登录凭证校验 | 
|---|
|  |  |  | Map<String, Object> queryParams = new HashMap<>(); | 
|---|
|  |  |  | queryParams.put("appid", appid); | 
|---|
|  |  |  | queryParams.put("secret", secret); | 
|---|
|  |  |  | queryParams.put("appid", PayInfo.appid); | 
|---|
|  |  |  | queryParams.put("secret", PayInfo.secret); | 
|---|
|  |  |  | queryParams.put("js_code", code); | 
|---|
|  |  |  | queryParams.put("grant_type", grantType); | 
|---|
|  |  |  | Map<String, String> headerParams = new HashMap<>(); | 
|---|
|  |  |  | 
|---|
|  |  |  | String sessionKey = job.getString("session_key"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Long clientId = clientSv.getClientIdByPhone(phoneNumber); | 
|---|
|  |  |  | String SessionId = ""; | 
|---|
|  |  |  | String sessionId = ""; | 
|---|
|  |  |  | if(clientId != null) { | 
|---|
|  |  |  | // 添加微信用户账户记录 | 
|---|
|  |  |  | SeOpenId seOpenId = new SeOpenId(); | 
|---|
|  |  |  | 
|---|
|  |  |  | //Long SessionId = clientSv.addOpenId(seOpenId); | 
|---|
|  |  |  | Long rec = clientSv.addOpenId(seOpenId); | 
|---|
|  |  |  | if(rec != null) { | 
|---|
|  |  |  | SessionId = String.valueOf(rec); | 
|---|
|  |  |  | sessionId = String.valueOf(rec); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return BaseResponseUtils.buildSuccess(SessionId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JSONObject job_result = new JSONObject(); | 
|---|
|  |  |  | job_result.put("clientId", String.valueOf(clientId)); | 
|---|
|  |  |  | job_result.put("sessionId", sessionId); | 
|---|
|  |  |  | return BaseResponseUtils.buildSuccess(job_result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg(WechatResultCode.PHONE_NUMBER_IS_ERROR.getMessage()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 解绑农户与微信的绑定,根据sessionId删除绑定记录 | 
|---|
|  |  |  | * @param sessionId | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping(path = "unbind") | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public BaseResponse<Boolean> unbindWechat(@RequestParam("sessionId")Long sessionId) { | 
|---|
|  |  |  | if(sessionId == null || sessionId <=0) { | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg("sessionId无效"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer rec = clientSv.unbindWechat(sessionId); | 
|---|
|  |  |  | if(rec == null || rec == 0) { | 
|---|
|  |  |  | return BaseResponseUtils.buildErrorMsg("sessionId错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return BaseResponseUtils.buildSuccess(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取农户基本信息,小程序首页使用 | 
|---|
|  |  |  | * @param sessionId | 
|---|
|  |  |  | * @return | 
|---|