使用weixin-java-miniapp实现微信小程序登录接口

maven 依赖

        <!--微信开源封装sdk-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>3.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>

code

@Data
public class LoginRequest {
    //用户登录凭证
    String code;

    //原始数据字符串
    String signature;

    //校验用户信息字符串
    String rawData;

    //加密用户数据
    String encryptedData;

    //加密算法的初始向量
    String iv;
}
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import me.chanjar.weixin.common.error.WxErrorException;

/**
 * @describe: 类描述信息
 * @author: morningcat.zhang
 * @date: 2019/12/10 3:48 PM
 */
public class WxAppLoginService {

    public void login(LoginRequest request) throws WxErrorException {
        final WxMaService wxService = getWxMaService();

        // 获取微信用户session
        WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(request.getCode());
        if (null == session) {
            throw new RuntimeException("login handler error");
        }

        // 解密用户信息
        WxMaUserInfo wxUserInfo = wxService.getUserService().getUserInfo(session.getSessionKey(),
                request.getEncryptedData(), request.getIv());
        if (null == wxUserInfo) {
            throw new RuntimeException("wxUser not exist");
        }
        
        // 解密手机号码信息
        WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxService.getUserService().getPhoneNoInfo(session.getSessionKey(),
                request.getEncryptedData(), request.getIv());
        if (Objects.isNull(wxMaPhoneNumberInfo) || StringUtils.isBlank(wxMaPhoneNumberInfo.getPhoneNumber())) {
            // 解密手机号码信息错误
        }
        
        System.out.printf("============用户登录注册获取微信用户信息===========> openId=%s, username=%s", wxUserInfo.getOpenId(), wxUserInfo.getNickName());
        String unionId = wxUserInfo.getUnionId();
        String openId = wxUserInfo.getOpenId();

    }

    private WxMaService getWxMaService() {
        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
        config.setAppid("appId");
        config.setSecret("appSecret");
        config.setMsgDataFormat("JSON");
        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(config);
        return wxMaService;
    }
}

实践

请求入参

{
    "code": "071kqVIk1scL4o0ynUJk1YqEIk1kqVIt",
    "encryptedData": "fPjQvxaAYCKJFP3OTHmwLGgAMm8/MZPlCD/qdRKms1T3rij89kHKfSyrxEh68Ay8occT1wUb4F3Cw7lSPacz5ZHpnRUc3w8EUdz/fezCHDdq+Oh4yc3DzChAa77+28+3eCO0ReeB0yiWkfAiP3iLqic5O1d86ZXJbcpDSZa71EnvGJkNFjhhGJJhoDBC7pd/NW+n21RwTHLAwLoYqo+7aqnJSI+po9+42jRvI7EiEpjtb/LlsKOn4NELU4twGOTB3td1rrQ3BOlSFjqMsmDKiZ/deDPnnus4vaD4agDjUH9LGyqmpeLFfeK8mlSVIGk9wEdz1Wk+G53m8RfvkfZmtwiIHuFbWLmaw4Up1Jtt2kz02+G+5/BcGnPK7D8GSiP5Df0W88HsMofbgTo1yhu3fgKhYVEETNFsoxOzOa8O4QBrSiN7pzezxLhALvzxeNkjTeG4wQHnZm+mEW7LsTwgwGVAus9LWleG8mlSfPqSA8u8IOJacz9DWjehVed13GQX",
    "iv": "hF6Oi870Mgxcdhmnt5EZrA==",
    "rawData": {
        "nickName": "morningcat2018",
        "gender": 1,
        "language": "zh_CN",
        "city": "Hangzhou",
        "province": "Zhejiang",
        "country": "China",
        "avatarUrl": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTK3EZ1I2fjXnGPBQSiaYSKRebYoawYXaOwbom50KdXicpQ1IRsd7xKp3e7oucb9scMOibk2uTviavpmibg/132"
    }
}

注意 : code 使用一次后就会失效

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值