微信公众号
微信公众号测试账号
在开发微信公众号相关内容时,可以先在测试账号上测试,测试通过后再换成线上账号.
申请测试账号
百度微信公众号测试账号
,进入到微信公众号测试账号申请平台
:
使用微信扫码登录下就会分配给你一个测试账号,如下:
配置微信公众号测试账号
需要手动配置的信息包含:
1.接口配置信息
2.JS接口安全域名
3.测试号二维码
4.网页授权获取用户基本信息
接口配置信息
配置这个内容主要是为了确认开发者有开发能力和对应的服务器器.所以配置完提交的时候微信就会发送请求到你的服务器来确认这些信息,如果配置的url没有调通或者返回的内容不是微信想要的,那微信就会提示配置失败
.
这些在中也有明确的说明.
所以在提交之前先要在服务器上有这个URL的对应处理,并且按照微信要求返回随机字符串
以下是我这边的处理,仅供参考:
//校验微信接口配置信息
@Get("checkSignature")
public synchronized String checkSignature() {
String returnString = "";
Map<String, Object> request = getRequestMap().getRequest();
logger.info("校验微信接口配置信息" + JSON.toJSONString(request));
String signature = request.get("signature").toString();//微信加密签名
String timestamp = request.get("timestamp").toString();//时间戳
String nonce = request.get("nonce").toString();//随机数
String echostr = request.get("echostr").toString();//随机字符串
if (checkSignature(signature, timestamp, nonce)) {
logger.info("接口配置信息校验通过校验通过");
returnString = "@" + echostr;
}
return returnString;
}
private boolean checkSignature(String signature, String timestamp, String nonce) {
String token = "XXXXX";//代码中的这个token要和微信接口配置信息中配置的token保持一致
String[] arr = new String[]{token, timestamp, nonce};
// 将token、timestamp、nonce三个参数进行字典序排序
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = MessageDigest.getInstance("SHA-1");
// 将三个参数字符串拼接成一个字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//清空content
content = null;
// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
//将字节数组转换为十六进制字符串
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
//将字节转换为十六进制字符串
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 string = new String(tempArr);
return string;
}
JS接口安全域名,模板消息接口
这两个配置直接正常修改即可,提交的时候微信没有校验.
网页授权获取用户基本信息
在配置OAuth2.0网页授权,授权回调页面域名:时有个小问题需要注意下,有时候我们配置好回调域名后再获取用户授权时会报一个错误码10003: redirect_uri域名与后台配置不一致错误
的错误,这个时候就要看下后台调用接口https://open.weixin.qq.com/connect/oauth2/authorize中的域名和上边配置的域名是不是一致了.另外注意下平台中配置的域名是不带http/https的.接口请求中是要求带http/https的
StringBuffer qrCodeContent = new StringBuffer();
String redirectUri = "http://develop.test.com";//公众号授权回调域名要在公众号上进行配置
qrCodeContent.append("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");
qrCodeContent.append("XXXXXXXXXXX");//公众号appid
qrCodeContent.append("&redirect_uri=http://develop.test.com");