servlet后端连接 微信小程序与_微信小程序后端(java)开发流程的详细步骤

微信小程序后端开发流程根据官网总结为两个步骤

1、前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像

微信小程序后端接口开发

controller层

public class OauthController {

@Autowired

private WeChatService weChatService;

/**

* 微信授权用js_code换取openId

* @param code

* @return

*/

@GetMapping("/code2Session")

public BaseResponse code2Session(String code) {

log.info("code2Session,code={}", code);

if (StringUtil.isEmpty(code)) {

return BaseResponse.buildFail("参数异常");

}

Code2SessionResponse res = weChatService.code2Session(code);

log.info("code2Session,res={}", res);

if (!res.isSuccess()) {

return BaseResponse.buildFail(res.getErrCode(), res.getErrMsg());

}

return BaseResponse.buildSuccess(res);

}

/**

* 解密获取手机号

* @param request

* @param response

* @param param

* @return

*/

public BaseResponse decryptGetPhone(HttpServletRequest request, HttpServletResponse response,

@RequestBody OauthParam param) {

if (!StringUtil.isEmpty(param.getOpenId())) {//微信授权登录

String sessionKey = weChatService.getSessionKey(param.getOpenId());

if (StringUtil.isEmpty(sessionKey)) {

return BaseResponse.buildFail("会话不存在");

}

Sha1Utils sha = new Sha1Utils();

// 获取用户信息

log.debug("微信登陆 sessionKey = {}", sessionKey);

String userInfoStr = sha.decryptWXAppletInfo(sessionKey, param.getEncryptedData(), param.getIv());

if (StringUtil.isEmpty(userInfoStr)) {

return BaseResponse.buildFail("无法获取用户信息");

}

JSONObject json = JSONObject.parseObject(userInfoStr);

//绑定微信的手机号

String tel = json.getString("purePhoneNumber");

Assert.isTrue(!StringUtils.isEmpty(tel), "无法获取用户手机号");

BaseResponse baseResponse=new BaseResponse();

baseResponse.setResultInfo(tel);

baseResponse.setState(0);

return baseResponse;

}

}

}

接口

public interface WeChatService {

/**

* 用code换取openid

*

* @param code

* @return

*/

Code2SessionResponse code2Session(String code);

/**

* 获取凭证

*

* @return

*/

String getAccessToken();

/**

* 获取凭证

*

* @param isForce

* @return

*/

String getAccessToken(boolean isForce);

String getSessionKey(String openId);

}

实现类

public class WeChatServiceImpl implements WeChatService {

//获取配置文件数据

@Value("${wechat.miniprogram.id}")

private String appId;

@Value("${wechat.miniprogram.secret}")

private String appSecret;

@Reference

private SysUserService sysUserService;

@Override

public Code2SessionResponse code2Session(String code) {

String rawResponse = HttpClientUtil

.get(String.format(WechatConstant.URL_CODE2SESSION, appId, appSecret, code));

log.info("rawResponse====={}", rawResponse);

Code2SessionResponse response = JSON.parseObject(rawResponse, Code2SessionResponse.class);

if (response.isSuccess()) {

cacheSessionKey(response);

}

return response;

}

private void cacheSessionKey(Code2SessionResponse response) {

RedisCache redisCache = RedisCache.getInstance();

String key = RedisCacheKeys.getWxSessionKeyKey(response.getOpenId());

redisCache.setCache(key, 2147483647, response.getSessionKey());

}

@Override

public String getAccessToken() {

return getAccessToken(false);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值