| | |
| | | package com.ltkj.web.controller.app; |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | import com.ltkj.framework.config.JwtUtils; |
| | | import com.ltkj.framework.config.UserHoder; |
| | | import com.ltkj.hosp.domain.GetPhone; |
| | | import com.ltkj.hosp.domain.TjCustomer; |
| | | import com.ltkj.hosp.domain.Wxuser; |
| | | import com.ltkj.hosp.service.IAbucoderWxuserService; |
| | | import com.ltkj.hosp.service.ITjCustomerService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | |
| | | import org.aspectj.bridge.MessageWriter; |
| | | import org.bouncycastle.jce.provider.BouncyCastleProvider; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.client.RestTemplate; |
| | | import sun.misc.BASE64Decoder; |
| | |
| | | import java.security.Security; |
| | | import java.security.cert.CertificateException; |
| | | import java.security.cert.X509Certificate; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @Author: 西安路泰科技有限公司/赵佳豪 |
| | |
| | | @Api(tags = "A小程序端登录接口大全") |
| | | @Slf4j |
| | | public class WxloginController extends BaseController { |
| | | |
| | | @Resource |
| | | private ITjCustomerService customerService; |
| | | |
| | | @Resource |
| | | private IAbucoderWxuserService wxuserService; |
| | |
| | | |
| | | /** |
| | | * 小程序登录 |
| | | * |
| | | * @param code 小程序wx.login返回的临时凭证 |
| | | * @return |
| | | */ |
| | |
| | | wxuser.setCreateTime(new Date()); |
| | | wxuser.setWxMiniOpenId(openId); |
| | | wxuserService.save(wxuser); |
| | | map.put("wxuser",wxuser); |
| | | map.put("wxuser", wxuser); |
| | | } |
| | | // 生成令牌 |
| | | String token = JwtUtils.getToken(map); |
| | |
| | | @ApiOperation(value = "小程序获取用户详情信息接口") |
| | | public AjaxResult getWxInfo() { |
| | | Wxuser wxuser = UserHoder.getWxuser(); |
| | | LambdaQueryWrapper<Wxuser>wq=new LambdaQueryWrapper<>(); |
| | | wq.eq(Wxuser::getOpenid,wxuser.getOpenid()); |
| | | LambdaQueryWrapper<Wxuser> wq = new LambdaQueryWrapper<>(); |
| | | wq.eq(Wxuser::getOpenid, wxuser.getOpenid()); |
| | | Wxuser one = wxuserService.getOne(wq); |
| | | return AjaxResult.success(one); |
| | | } |
| | | |
| | | /** |
| | | * 微信手机号码绑定 |
| | | */ |
| | |
| | | byte[] raw = decoder.decodeBuffer(sessionKey); |
| | | SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); |
| | | IvParameterSpec iv1 = new IvParameterSpec(decoder.decodeBuffer(iv)); |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC"); |
| | | cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv1); |
| | | OkHttpClient client = new OkHttpClient(); |
| | | Request okrequest = new Request.Builder() |
| | |
| | | |
| | | /** |
| | | * 发送请求用code换取sessionKey和相关信息 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | |
| | | * @param sessionKey |
| | | * @param iv |
| | | * @return |
| | | * |
| | | */ |
| | | /** |
| | | * 解决java不支持AES/CBC/PKCS7Padding模式解密 |
| | | */ |
| | | static { |
| | | Security.addProvider(new BouncyCastleProvider()); |
| | | } |
| | | |
| | | public static JSONObject decryptionUserInfo(String encryptedData, String sessionKey, String iv) { |
| | | // 被加密的数据 |
| | | byte[] dataByte = Base64.decode(encryptedData); |
| | |
| | | byte[] ivByte = Base64.decode(iv); |
| | | |
| | | try { |
| | | // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要 |
| | | // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要 |
| | | int base = 16; |
| | | if (keyByte.length % base != 0) { |
| | | int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0); |
| | |
| | | System.arraycopy(keyByte, 0, temp, 0, keyByte.length); |
| | | keyByte = temp; |
| | | } |
| | | // 初始化 |
| | | // 初始化 |
| | | Security.addProvider(new BouncyCastleProvider()); |
| | | /** |
| | | * 解决java不支持AES/CBC/PKCS7Padding模式解密 |
| | | */ |
| | | |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); |
| | | SecretKeySpec spec = new SecretKeySpec(keyByte, "AES"); |
| | | AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES"); |
| | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发送https请求 |
| | |
| | | return response; |
| | | } |
| | | |
| | | |
| | | @PostMapping("/wx/wxbindphone") |
| | | @ApiOperation("手动绑定手机号接口") |
| | | @Transactional |
| | | public AjaxResult wxbindphone(@RequestParam @ApiParam(value = "openId") String openId, |
| | | @RequestParam @ApiParam(value = "phone") String phone) { |
| | | |
| | | LambdaQueryWrapper<Wxuser> wq = new LambdaQueryWrapper<>(); |
| | | wq.eq(Wxuser::getOpenid, openId); |
| | | Wxuser one = wxuserService.getOne(wq); |
| | | |
| | | if (one!=null){ |
| | | one.setPhone(phone); |
| | | one.setUpdateTime(new DateTime()); |
| | | final boolean b = wxuserService.updateById(one); |
| | | if (b){ |
| | | LambdaQueryWrapper<TjCustomer> qw = new LambdaQueryWrapper<>(); |
| | | qw.eq(TjCustomer::getCusPhone, phone); |
| | | List<TjCustomer> tjCustomer1 = customerService.list(qw); |
| | | if (tjCustomer1 != null && tjCustomer1.size()>0) { |
| | | for (TjCustomer tjCustomer : tjCustomer1) { |
| | | tjCustomer.setConnect(openId); |
| | | customerService.updateById(tjCustomer); |
| | | } |
| | | } |
| | | return AjaxResult.success("绑定成功!"); |
| | | } |
| | | } |
| | | return AjaxResult.error("绑定失败!"); |
| | | } |
| | | |
| | | } |
| | | |