微信微信开发者服务器配置还没有开吗

33091人阅读
JAVA(47)
最近研究了下微信公众号开发,这几篇文章是我的笔记。
首先你要有个公众号,去https://mp./注册。现在个人只能注册订阅号,订阅号有些接口是不开放的,没办法我们只好先看看它开放的接口了。
我们登录后台,去看一下公众平台开发者文档,“开发者必读”里面的“接入指南”。我建议你认真读一下这篇指南。
我简单说一下微信公众号开发是怎么回事。在你有了个微信公众号之后,你还要有个服务器(你可以用百度bae,或者新浪sae或者阿里云服务器),登录微信公众号后台,在最左边的菜单“开发”—“基本配置”里,你可以启用服务器配置。
在这里,你填入服务器地址url和token(具体看文档)。你要确保你填的url能够响应。那么,当别人向你的公众号发消息时,微信服务器会将该消息发送到你配置的url,然后会将你的url的响应返回给别人。大致的流程就是这样。
指南上写的很清楚了,并提供有php代码示例,我们要做的就是把它翻译成java版的。我参考了这篇博客 ,第一篇接入的代码比较简单,所以基本直接拷贝自它,特此说明,另外这篇博客现在访问不了了。
事实上,我们在这第一篇要做的就是配置提供一个能响应微信服务器器的url。那么,微信后台怎么确保你填的url有效呢?当你在服务器配置中填上你的url点击确定后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
随机字符串
你的url要能响应这个请求,首先你要对其进行校验,“若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。”
校验方法如下:
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
不知你看到了这里会不会有疑问?你是否会想:如果我不校验,直接返回echostr参数内容呢?微信后台允许我配置成功吗?笔者亲试过,答案是可以!为什么呢?因为只要你配置的url返回了echostr,那么微信后台就认为你的url能正确响应,是可用的。至于你是否真的去做了校验,微信服务器并不知道。你之所以要校验是为了确认请求是来自微信服务器,反正微信告诉了你校验方式,你不去校验,由此带来的安全问题就是你自己的事了。
处理get请求的controller类如下:
*@ClassName: WeixinController
*@Description: 响应Controller
*@author zhutulang
*@version V1.0
@Controller
@RequestMapping(&/weixinCon&)
public class WeixinController {
private Logger log =Logger.getLogger(WeixinController.class);
@RequestMapping(method =RequestMethod.GET)
public void get(HttpServletRequest request,HttpServletResponse response) {
(&请求进来了...&);
// 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
String signature =request.getParameter(&signature&);
String timestamp =request.getParameter(&timestamp&);
String nonce =request.getParameter(&nonce&);
// 随机字符串
String echostr =request.getParameter(&echostr&);
PrintWriter out =
out = response.getWriter();
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败
if (SignUtil.checkSignature(signature,timestamp, nonce)) {
out.print(echostr);
} catch (IOException e) {
e.printStackTrace();
} finally {
out.close();
&其它相关代码可查看:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:516083次
积分:5766
积分:5766
排名:第5077名
原创:117篇
转载:27篇
评论:111条
(2)(5)(4)(1)(1)(1)(7)(1)(4)(2)(5)(8)(1)(4)(4)(6)(1)(4)(2)(2)(1)(3)(4)(2)(5)(5)(1)(1)(2)(6)(11)(7)(5)(1)(6)(1)(4)(14)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'微信公众平台开发必须要有服务器吗_百度知道
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
微信公众平台开发必须要有服务器吗
我有更好的答案
信公众平台二次开发不是必须要用服务器的。如果你目前没有服务器,而且没有计划要购买服务器,那么可以只购买一个普通的网站空间,也是可以用来做微信二次开发使用的。我是何喜阳
网络营销顾问
联系方式给我
1条折叠回答
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包微信开发之开启开发模式和服务器配置
时间: 10:42:54
&&&& 阅读:450
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&做完这一步,就可以连接到我们的服务器上面,就可以通过微信接收请求。
服务器的配置:
几个字段的解释:可以参考官网解答。
登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击&修改配置&按钮,填写服务器地址(URL)、Token和EncodingAESKey。
URL:开发者用来接收微信消息和事件 的接口URL。URL指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上。
Token:可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性);
EncodingAESKey:开发者手动填写或随机生成,将用作消息体加解密密钥。
开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
随机字符串
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
我们写一个CoreServlet 类来接收微信服务器传来的几个参数:
package com.souvc.weixin.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.souvc.weixin.util.SignU
* @ClassName: CoreServlet
* @Description:
* @author: souvc
* @date Jun 15, :36 AM
public class CoreServlet extends HttpServlet {
private static final long serialVersionUID = 4821986L;
* 确认请求来自微信服务器
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 微信加密签名
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
// 随机字符串
String echostr = request.getParameter("echostr");
PrintWriter out = response.getWriter();
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
out.close();
out = null;
* 处理微信服务器发来的消息
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO 消息的接收、处理、响应
然后需要写一个验证微信服务器传过来的token跟服务器设置的是否一致。
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
我们把它封装成一个工具类 SignUtil :
package com.souvc.weixin.
import java.security.MessageD
import java.security.NoSuchAlgorithmE
import java.util.A
* @ClassName: SignUtil
* @Description:
* @author: souvc
* @date Jun 15, :18 AM
public class SignUtil {
// 与接口配置信息中的Token要一致
private static String token = "souvcweixin";
* 验证签名
* @param signature
* @param timestamp
* @param nonce
public static boolean checkSignature(String signature, String timestamp,
String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
// 将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");
// 将三个参数字符串拼接成一个字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
content = null;
// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
* 将字节数组转换为十六进制字符串
* @param byteArray
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i & byteArray. i++) {
strDigest += byteToHexStr(byteArray[i]);
return strD
* 将字节转换为十六进制字符串
* @param mByte
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);
配置一下访问路径的 web.xml
&?xml version="1.0" encoding="UTF-8"?&
&web-app version="2.5" xmlns="/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
http:///xml/ns/javaee/web-app_2_5.xsd"&
&servlet-name&coreServlet&/servlet-name&
&servlet-class&
com.souvc.weixin.servlet.CoreServlet
&/servlet-class&
&/servlet&
&!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 --&
&servlet-mapping&
&servlet-name&coreServlet&/servlet-name&
&url-pattern&/coreServlet&/url-pattern&
&/servlet-mapping&
&!-- 配置400,404,500异常处理 --&
&error-page&
&error-code&400&/error-code&
&location&/error/404.jsp&/location&
&/error-page&
&error-page&
&error-code&404&/error-code&
&location&/error/404.jsp&/location&
&/error-page&
&error-page&
&error-code&405&/error-code&
&location&/error/404.jsp&/location&
&/error-page&
&error-page&
&error-code&500&/error-code&
&location&/error/404.jsp&/location&
&/error-page&
&error-page&
&error-code&505&/error-code&
&location&/error/404.jsp&/location&
&/error-page&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
部署到公网的服务器上面。
注意如果直接访问这个地址(/coreServlet)的话,是会报错误的,因为我们这样访问没有传参数过去,会报500的错误。
我们需要通过微信服务器里面的配置来进行。
后面接上。
源码分享:
/cQyyUMFWqkiR4& 访问密码 ffd8
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/liuhongfeng/p/4576388.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!2014年11月 PHP大版内专家分月排行榜第三2014年6月 PHP大版内专家分月排行榜第三2014年4月 PHP大版内专家分月排行榜第三2014年2月 PHP大版内专家分月排行榜第三2013年11月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。当前位置 & &
& 微信服务器宕机引发的“悲剧”
微信服务器宕机引发的“悲剧”
13:48:06&&出处:&&
编辑:萧萧 &&)
让小伙伴们也看看:
阅读更多:
好文共享:
文章观点支持
文章价值打分
当前文章打分0 分,共有0人打分
[04-04][04-04][04-04][04-04][04-03][04-03][04-03][04-03][04-03][04-02]
登录驱动之家
没有帐号?
用合作网站帐户直接登录}

我要回帖

更多关于 微信小程序开发服务器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信