做了一个APP项目,有小冤家APP如何更改绑定的手机号手机号和微信号 ,用 java该怎么实现

Java开发微信公众号 - 简书
Java开发微信公众号
首先你需要注册一个公众号
1.编辑者模式
自定义菜单
2.开发者模式
填写服务器配置
3.框架的使用
编辑者模式
一天只能发一条
但是模式开发者模式可以绕开这个限制,具体就不介绍了。
&h6&自定义菜单&/h6&
1.自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
3.创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
1、click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
2、view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
3、scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。
4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。
5、pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
6、pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。
7、pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
8、location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
9、media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
10、view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
** 注意:**请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。
自动回复机制就是根据用户发送的消息文本关键字来返回特定的数据,这个也很简单,就不多做介绍了。
这里的编辑的素材直接上传到微信服务器且都是永久素材(后面会谈到和临时素材的区别),且每一个素材都有一个media_id,需要调用获取素材列表
开发者模式
启动开发者模式,进行token认证,注意:开发者模式和编辑者模式是冲突的,所以一旦启用开发者模式编辑者模式就会被关闭
* MyServlet.java:获取Get方法参数验证消息的确来自微信服务器
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//服务器配置
String signature = req.getParameter("signature"); //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
String timestamp = req.getParameter("timestamp"); //时间戳
String nonce = req.getParameter("nonce"); //随机数
String echostr = req.getParameter("echostr"); //随机字符串
PrintWriter out = resp.getWriter();
if (CheckUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
public class CheckUtil {
private static final String token = "storm";
* 检验signature对请求进行校验.
* @param signature
* @param timestamp
* @param nonce
public static boolean checkSignature(String signature, String timestamp, String nonce){
String[] arr = new String[]{token, timestamp, nonce};
Arrays.sort(arr);
StringBuffer content = new StringBuffer();
for (int i = 0; i & arr. i++){
content.append(arr[i]);
String temp = getSha1(content.toString());
return temp.equals(signature);
* sha1加密.
* @param str : 传入字符串
public static String getSha1(String str){
if(str==null||str.length()==0){
char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f'};
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes("UTF-8"));
byte[] md = mdTemp.digest();
int j = md.
char buf[] = new char[j*2];
int k = 0;
for (int i = 0; i & i++) {
byte byte0 = md[i];
buf[k++] = hexDigits[byte0 &&& 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
return new String(buf);
} catch (Exception e) {
// TODO: handle exception
这样你的微信公众号就可以接入服务器了
Screenshot from
22-24-07.png
注:如果还没有服务器可以使用使用映射工具讲本地网络映射到公网,详情参照我的另一篇文章
URL:就是你项目部署的服务器地址
Token:就是令牌,自己填写,后面很多地方都需要用到,所以一定要填好
EncodingAESKey:随机生成,不解释
消息加密模式:测试阶段建议用明文模式
若果提示验证失败,有很多可能
1.你项目没有部署成功
2.token 和你代码里写的token不一致
3.公网映射的时候应该选用http协议而不是https协议,因为这个会提示错误,我就是应为这个问题纠结了很久
4.部署时响应500即为成功
框架的使用
很不错记得去给star人家
考研结束,虽然没有考入理想学校,但是选择了调剂,有更多的时间学习了。
这是我转发别人的本文主要讲的是如何通过后台获取到用户的信息(openId)一、什么是OAuth2.0官方网站:http://oauth.net/
http://oauth.net/2/权威定义:OAuth is An open protocol to allow sec...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
Java 基础思维导图,让 Java 不再难懂 - 工具资源 - 掘金思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具。了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图...
我可以一落千丈,也可以创造奇迹
计划: 1.早起+喝水 2.日常工作 3.运动+练字+记账 实际: 1.完成 2.完成。今天的测试不顺,桑心~ 3.运动 跳绳10分钟 练字 记账完成
随着万物互联的推进,智慧城市正在潜滋暗长加速落地,智慧城市金融、医疗、交通、汽车、教育、公共信息服务等不同行业和领域的进步,无论是超市、银行、影院、机场、轨道交通乃至是户外广告等一系列场景下,都离不开商用显示屏。 事实上,商用显示屏其实也正在逐渐和人们的生活相互交融,带来一...
失眠夜 夜里愁 愁将来 来发梦 梦里故国神游 夜里身故他乡 明月思愁依人 裹心未得立业 莫有安眠夜!
楚泽常去的,是西泠镇最大的清池。从最内部的池子,到外间的休息处、大厅,一共分了三层。地面和池子都由巨大的汉白玉石砌成,平整而清凉。 李承邺在池中洗去灰尘,换了胡服,用油膏涂在脸上晒伤的地方。俨然是胡人少年的模样。他学楚泽,斜靠在软榻上。旁边葡萄拨了皮,用糖水浸着。李承邺捡起...最近试水了一下微信公众号,花了一天开发,记录下其中的坑,分享给大家。附上公众号二维码,实现讲笑话的功能,欢迎大家关注。
微信公众号注册
注册公众号微信官方链接,注意配置一下 URL,Token。
URL必须以http://或https://开头,分别支持80端口和443端口。
Token 必须为英文或数字,长度为3-32字符。
服务端使用的是 Java,感觉后台使用 PHP、Python 的多一些,把 Java 开发遇到的问题记录一下,方便自己也方便别人查阅。
微信第一次接入 验证有效性
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
/** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
if (WechatSignUtil.checkSignature(signature, timestamp, nonce)) {
out.write(echostr);
out.flush();
out.close();
刚才微信公共平台配置的 token 这儿填写,保持一致。
public class WechatSignUtil2 {
private static String token = "***";
* 验证签名
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i & arr. i++) {
content.append(arr[i]);
MessageDigest md = null;
String tmpStr = null;
md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
content = null;
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
* 将字节数组转换为十六进制字符串
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i & byteArray. i++) {
strDigest += byteToHexStr(byteArray[i]);
return strD
* 将字节转换为十六进制字符串
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte &&& 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
微信事件处理
微信的事件包括以下几种,本文实现了最基本的关注后,回复一段简单的使用说明。
事件XML数据包示例:
&&![CDATA[toUser]]&&
&&![CDATA[FromUser]]&&
&&![CDATA[event]]&&
&&![CDATA[subscribe]]&&
ToUserName
开发者微信号
FromUserName
发送方帐号(一个OpenID)
CreateTime
消息创建时间 (整型)
MsgType 消息类型,event
事件类型,subscribe(订阅)、unsubscribe(取消订阅)
1 . 关注/取消关注事件
2 . 扫描带参数二维码事件
3 . 上报地理位置事件
4 . 自定义菜单事件
5 . 点击菜单拉取消息时的事件推送
6 . 点击菜单跳转链接时的事件推送
protected void doPost(HttpServletRequest request, HttpServletResponse resp) {
Map&String, String& map = WechatMessageUtil.parseXml(request);
String msgtype = map.get("MsgType");
String result = "success";
if (WechatMessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(msgtype)) {
result = WechatEventDispatcherHappy.processEvent(map);
result = WechatMsgDispatcherHappy.processMessage(map);
PrintWriter out = resp.getWriter();
out.print(result);
} catch (Exception e) {
下面这个类处理了相关事件
public class WechatEventDispatcherHappy {
public static String WechatValue = "success";
public static String processEvent(Map&String, String& map) {
if (map.get("Event").equals(WechatMessageUtil.EVENT_TYPE_SUBSCRIBE)) {
String result = "你关注我了哈~\n\n发送任意内容获取笑话,天天开心哦~";
String openid = map.get("FromUserName");
String mpid = map.get("ToUserName");
WechatRespTextMessage txtmsg = new WechatRespTextMessage();
txtmsg.setToUserName(openid);
txtmsg.setFromUserName(mpid);
txtmsg.setCreateTime(new Date().getTime());
txtmsg.setMsgType(WechatMessageUtil.RESP_MESSAGE_TYPE_TEXT);
txtmsg.setContent(result);
return WechatMessageUtil.textMessageToXml(txtmsg);
return WechatV
微信消息处理
消息分为 文本消息、语音消息、图片消息、视频消息、小视频消息等,本文实现发送任意消息,都给回复一条随机笑话。
public class WechatMsgDispatcherHappy {
static DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
public static String processMessage(Map&String, String& map) {
if (map.get("MsgType").equals(WechatMessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
String openid = map.get("FromUserName");
String mpid = map.get("ToUserName");
String createTime = map.get("CreateTime");
String myDate = formatter.format(new Date(Long.parseLong(createTime) * 1000L));
String content = map.get("Content").trim();
WechatRespTextMessage txtmsg = new WechatRespTextMessage();
txtmsg.setToUserName(openid);
txtmsg.setFromUserName(mpid);
txtmsg.setCreateTime(new Date().getTime());
txtmsg.setMsgType(WechatMessageUtil.RESP_MESSAGE_TYPE_TEXT);
Random random = new Random();
InfoHash result = JuheUtil.getRequest1(random.nextInt(400000) + "");
txtmsg.setContent(result.getRes());
return WechatMessageUtil.textMessageToXml(txtmsg);
if (map.get("MsgType").equals(WechatMessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
return "success";
本来想找自己写个笑话随机接口,后来搜了一下,网上有现成的接口,而且还是免费的。
可以通过我的邀请码
注册该接口。
接口地址:http://japi.juhe.cn/joke/content/list.from
支持格式:json
请求方式:http get
请求示例:http://japi.juhe.cn/joke/content/list.from?key=您申请的KEY&page=2&pagesize=10&sort=asc&time=
接口备注:根据时间戳返回该时间点前或后的笑话列表
JSON返回示例:
"error_code": 0,
"reason": "Success",
"result": {
"content": "某日我坐高铁从杭州去上海,半路停下来了几十分钟一直没有开动,这个时候列车员来到我们车厢解释原因。  有一乘客见状故意询问,列车为何还不开车。  列车解释列车出现故障。乘客见状很是担心说了一句,你们再不开,后面的车追上来怎么办?车厢乘客无一不笑!!",
"hashId": "dd099be731ba53d18d8e4",
"unixtime": ,
"updatetime": " 08:33:50"
JSON 数据解析
使用 GSON 对 JSON 数据解析,注意该 JSON 比较复杂,result是一个对象,其中data是一个数组。
Gson gson = new Gson()
HappyGetResult happy = gson.fromJson(result, HappyGetResult.class)
List&HappyData& data = happy.getResult().getData()
String content = d.get(0).getContent()
hash = d.get(0).getHashId()
public class HappyGetResult {
@SerializedName("error_code")
public int errorC
@SerializedName("reason")
@SerializedName("result")
public HappyI
public class HappyInfo {
List&HappyData&
public class HappyData {
String hashId;
java微信公众号开发涉及到的类
我们在微信开发的时候需要准备封装相应的java类,主要如下:(1):微信请求基本类BaseMessage ,该类作为微信请求的基本类:/** * 微信请求消息基本类 * @author user * ...
微信公众号开发,原来这么简单?[java框架]
可能你不知道,有个框架叫wx-tools(小心翼翼地说)
Wx-tools是基于微信公众平台API的轻量级框架。 基于Wx-tools你可以开速开发一个订阅号/服务号的web应用后台。
微信公众平台测试号验证Token失败的坑
围绕signature,timestamp,nonce,echostr取值都为null的问题折腾了许久的zz坑。
订阅号不能认证,所以在公众号设置中,没有网页授权域名这一项。不过微信提供了测...
微信公众号加密之踩坑
在微信公众号中 微信与服务器通信 有一个安全模式 如下图我们看看微信自带的sdk 核心解密部分 然而这个 mcrypt_encrypt
在 php7.1.* 中 函数已经不允许使用那么问题来了 ph...
java开发的微信公众号服务端生产环境中的两个大坑
摘要: 我们开发的公众号,由于将功能开发完毕后,未对服务进行压力测试,因此用到的组件中的参数值全是默认的,服务上线后一段时间运行得倒没什么问题,随着服务得访问量增加,一些多线程并发的问题就逐步暴露出来...
微信官方提供的生成二维码接口得到的是当前公众号的二维码官方文档(一定要先看)目前有2种类型的二维码:临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够...
公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
目前有2种类型的二维码:
1、临时二维码,是有过期时间的,最长可以设置为在二...
$appid = $Wechat['app_id'];
$apret = $Wechat['app_secret'];
// 获取token
JAVA实现 springMVC方式的微信接入、实现消息自动回复
思路微信接入:用户消息和开发者需要的事件推送都会通过微信方服务器发起一个请求,转发到你在公众平台配置的服务器url地址,微信方将带上signature,timestamp,nonce,echostr四...
java微信公众号开发,认证,自定义菜单,消息推送,网页跳转
因为认证问题,所以就先用测试账号,点击开发者工具,进入公众平台测试帐号
域名验证:
1.服务器验证,修改接口配置信息:
注意,接口配置信息中,url为你服务器下验证token合法所在的地...
没有更多推荐了,安卓版的微信app用Java开发的吗?
安卓版的微信app用Java开发的吗?
浏览 904回答 1
恩 使用JAVA 开发的~但是应该会有一些底层东西 NDK,NDK 使用C语言开发出来~~C对手机硬件操作比较好~
随时随地看视频求一个java 调用微信接口的案例,最好带html页面的_百度知道
求一个java 调用微信接口的案例,最好带html页面的
求一个java调用微信接口的案例,最好带html页面的,有案例的发一个,或者留下qq...
求一个java 调用微信接口的案例,最好带html页面的,有案例的发一个,或者留下q q
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:370
获赞数:537
给个网址给你。我也是照这个上面做的。只做了1点。
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。利用java做一个模拟微信聊天软件
[问题点数:100分]
本版专家分:0
CSDN今日推荐
本版专家分:0
本版专家分:130
匿名用户不能发表回复!
其他相关推荐

我要回帖

更多关于 什么APP绑定银行卡不要手机号 的文章

 

随机推荐