java设计按月每天签到_签到功能java实现
不嫌代码写的烂 可以参考下
https://github.com/ren2881971/WeChat
着急实现功能 没重构 ######
/**
* 微信授权
*
*
*/
public class CUserOauthWeixinRedirect extends ABaseCommand {
private static final String URL_OAUTH_ACCESS_TOKEN =
"https://api.weixin.qq.com/sns/oauth2/access_token";
private static final String URL_OAUTH_USER_INFO = "https://api.weixin.qq.com/sns/userinfo";
/** 状态:module0xxx010010 模块0xxx0识别ID*/
private String state;
/** 换取access_token票据 */
private String code;
String module;
String id;
String ip;
@Override
public void init() throws Exception {
state = getPara("state");
if (StrKit.isBlank(state)) {
throw new ArgException("状态不正确");
}
String[] moduleInfoArray = state.split(Define.WEIXIN_MODULE_OAUTH_SPLITER);
if (moduleInfoArray.length != 2) {
throw new ArgException("状态不正确");
}
module = moduleInfoArray[0];
if (!Define.validateWeixinModule(module)) {
throw new ArgException("模块不存在");
}
id = moduleInfoArray[1];
code = getPara("code");
Util.assertNotBlank(code, "code不能为空");
ip = "%";
}
@Override
public void doCommand(AResult result) throws Exception {
RedirectResult redirectResult = (RedirectResult) result;
Map queryParas = new HashMap();
queryParas.put("grant_type", "authorization_code");
queryParas.put("appid", Define.WEIXIN_APP_ID);
queryParas.put("secret", Define.WEIXIN_APP_SECRET);
queryParas.put("code", code);
String responseStr = null;
try {
responseStr = HttpKit.get(URL_OAUTH_ACCESS_TOKEN, queryParas);
} catch (Exception e) {
e.printStackTrace();
throw new BizException("微信授权失败");
}
System.out.println(responseStr);
JSONObject accessObj = JSONObject.parseObject(responseStr);
JSONObject userObj = fetchUserInfo(accessObj.getString("access_token"), accessObj.getString("openid"));
userObj.put("ip", ip);
userObj.put("token", accessObj.getString("access_token"));
userObj.put("refreshToken", accessObj.getString("refresh_token"));
userObj.put("expireSeconds", accessObj.getInteger("expires_in"));
UserBind userBind = UserService.service.findUserBindBySource(Define.USER_BIND_TYPE_WEIXIN, userObj.getString("fromId"));
CurrentUser currentUser;
User user = null;
if (userBind == null) {
user = new User();
AuthService.service.registerFromThird(Define.USER_BIND_TYPE_WEIXIN, userObj, user);
System.out.println("用户[openid=" + userObj.getString("fromId") + ", nickname=" + userObj.getString("nickname") + "]注册成功,用户ID为[" + user.getId() + "]");
} else {
user = User.dao.findById(userBind.getToId());
}
currentUser = AuthService.service.login(user, ip);
System.out.println("正在跳转....");
redirectResult.setUrl("http://" + Define.APP_DOMAIN + getRedirectUrl() + "?u=" + currentUser.getId() + "&t=" + currentUser.getToken());
}
private JSONObject fetchUserInfo(String accessToken, String openId) {
Map queryParas = new HashMap();
queryParas.put("access_token", accessToken);
queryParas.put("openid", openId);
String response = HttpKit.get(URL_OAUTH_USER_INFO, queryParas);
System.out.println("user info: " + response);
JSONObject rawUserObj = JSONObject.parseObject(response);
JSONObject userObj = new JSONObject();
userObj.put("fromId", rawUserObj.getString("openid"));
userObj.put("nickname", rawUserObj.getString("nickname"));
int sex = rawUserObj.getInteger("sex");
userObj.put("gender", (sex == 0 || sex == 1) ? Define.GENDER_MALE : Define.GENDER_FEMALE);
userObj.put("province", rawUserObj.getString("province"));
userObj.put("city", rawUserObj.getString("city"));
userObj.put("country", rawUserObj.getString("country"));
userObj.put("avatar", rawUserObj.getString("headimgurl"));
return userObj;
}
// TODO 策略模式重写
private String getRedirectUrl() {
String redirectUrl = "/statics/shop_locals.html";
// 菜单
if (Define.WEIXIN_MODULE_MENU.equals(module)) {
int menuId = Integer.parseInt(id);
if (!Define.validateWeixinModuleMenuId(menuId)) {
throw new ArgException("模块不存在");
}
switch (menuId) {
// --------我要签到
case Define.WEIXIN_MODULE_MENU_ID_CHECKIN_SIGN: {
redirectUrl = "/statics/checkin_sign.html";
break;
}
// --------签到记录
case Define.WEIXIN_MODULE_MENU_ID_CHECKIN_HISTORY: {
redirectUrl = "/statics/checkin_history.html";
break;
}
case Define.WEIXIN_MODULE_MENU_ID_SHOP_LOCALS: {
redirectUrl = "/statics/shop_locals.html";
break;
}
case Define.WEIXIN_MODULE_MENU_ID_SHOP_ACTIVITIES: {
redirectUrl = "/statics/shop_activities.html";
break;
}
// --------我的红包
case Define.WEIXIN_MODULE_MENU_ID_GIFTS: {
redirectUrl = "/statics/gifts.html";
break;
}
// --------我的消息
case Define.WEIXIN_MODULE_MENU_ID_MESSAGES: {
redirectUrl = "/statics/messages.html";
break;
}
// --------我的资料
case Define.WEIXIN_MODULE_MENU_ID_PROFILE: {
redirectUrl = "/statics/profile.html";
break;
}
default:
break;
}
}
// TODO 活动
if (Define.WEIXIN_MODULE_ACTIVITY.equals(module)) {
}
return redirectUrl;
}
@Override
public AResult initResult() {
return new RedirectResult();
}
用的是jfinal,可能不好理解,不过核心代码都在。
思路是:获取到用户信息后,让用户处于登录状态。并且根据state,跳转到相关的页面。
菜单中配置的url形如:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe0a2ed1be585xxxx&redirect_uri=http://mywebsite.com/user/oauthWeixin&response_type=code&scope=snsapi_userinfo&state=menu0xxx020010#wechat_redirect
######
引用来自“渔樵耕读”的评论
不嫌代码写的烂 可以参考下
https://github.com/ren2881971/WeChat
着急实现功能 没重构
appID=wx29bedaf2e1bd9d2d
appSecret=**********************
开源代码不要把这些放出来啊。 ######哎呀呀 失误失误######可以试试这个https://github.com/chanjarster/weixin-java-tools######这个库 真的很不错。 我一直在学习他~######记得一定要交300给腾讯,不然 。
java设计按月每天签到_签到功能java实现相关推荐
- java设计按月每天签到_java微信签到功能实现:java做的一个简易的微信签到系统的案例...
java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...
- java设计是什么软件下载_用Java设计下载软件
用Java设计下载软件 HTTP 协议的简介 HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol),工作于网络应用层,自1990年起广泛应用于WWW 的全球信息服 ...
- mysql 签到_签到功能,用mysql还是redis?
之前发过一篇:点赞功能用mysql还是redismp.weixin.qq.com ?受到大家喜欢,今天看下签到功能怎么选择? 现在的网站和app开发中,签到是一个很常见的功能 如微博签到送积分,签到 ...
- java中常量final的用法_详解Java中final的用法
本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...
- java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...
- java 反射父类私有属性值_如何在Java中通过反射访问父类的父类的私有字段? - java...
在一个API中,我使用的是一个抽象类(A类),该类具有一个私有字段(A.privateField). B类在API中扩展了A类. 我需要扩展B类的实现,即C类,但是我需要A类的privateField ...
- 孙鑫java高清完整版(课件+视频)_孙鑫Java高清完整版(课件+视频) - 程序语言 - 小木虫 - 学术 科研 互动社区...
本套光盘由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 1.循序渐进 从自学者很难弄明白的 ...
- java实训西游记人物实现_学习练习 java编写西游记人物类
package com.hanqi; public class XiYouJiRenWu { double height; String weapon; String name; void prine ...
- java 电池类类代码举例_教案:Java第7章 类的方法
授课教师:牟勇 课时:100分钟 l 本章技能目标 n 会定义和使用类的方法 n 理解变量作用域 n 会创建包组织Java工程 n 会添加类方法的JavaDoc注释 n 会阅读JavaSE6文档 l ...
- java多线程贪吃蛇实验报告_贪吃蛇java实验报告.docx
贪吃蛇java实验报告 贪吃蛇java实验报告 篇一:JAVA贪吃蛇课程设计报告 <Java应用开发> 课程设计报告 题 目:指导老师:姓 名:专 业:班 级:日 期: JAVA小游戏 - ...
最新文章
- java 多维数组转化为字符串
- oracle时间相减得到天数_【数列】从错位相减到阿贝尔变换
- FAST选址与三维仿真模拟研究
- 点击桌面计算机图打不开,idf,手把手教你怎么解决电脑桌面图标打不开
- 执行删除操作返回没被删除的信息
- SynchronizationContext
- 分段二次插值例题_分段三次插值
- 深拷贝与浅拷贝、值语义与引用语义对象语义 ——以C++和Python为例
- 微信小程序的多选改变样式_微信小程序radio的样式修改
- clickhouse CollapsingMergeTree表引擎
- [原创]如何培养孩子的自信
- PLC与RobotStudio联合仿真调试——项目一
- 使用maven引用第三方jar包
- Diskpart 删除OEM分区方法,set id=07 override 无效处理方法
- 磕磕碰碰中用Visual Studio编译出了64位静态x264和ffmpeg
- centos7 npm bulid编译报错解决
- php的两种安装方式,PHP的安装方法
- .NET动态生成PDF文件(利用iTextSharp)
- 图纸转图片cad转换成jpg格式
- 大圣归来 三里屯优衣库试衣间是怎么刷爆朋友圈的