您的位置:首页 > 移动开发 > 微信开发

微信---启动开发模式

2014-12-31 14:32 183 查看
最近开始学习微信的开发模式,于是想以此为契机,开始自己的写博客旅程。

学习微信第一个是我头疼的难题是选择订阅号还是服务号。我看了很多的区别的介绍,不过都大同小异,看不出差别,如果有了解的比较深的可以给我留言一下,嘻嘻。

如果只是个人的开发的话应该只能选择订阅号,服务号需要通过企业的什么盖章验证之类的。而要获取自定义菜单权限,订阅号则需要微信认证(收费300/次)或者微博认证(公众账号订阅用户达500人),这两个最后我都没有做,至于具体需不需要后来边做边看呗。

要成为微信应用开发者,首先要做的就是开启微信的开发者模式,在登陆微信平台之后,可以在界面上找到开发者中心,点击进入后,可以看到界面上的服务器配置,而我们要做的就是成功开启这个服务器配置。而在这个服务器配置中,我们可以看到几个四个需要我们填选的项目栏,而这四个项目栏的填选,可以参看 开发者文档中的新手接入的接入指南,剩下来的就是验证了。

微信平台服务器并不支持开发者代码的发布,只能通过第三平台来实现,这也是我们需要验证的原因之一。在叙述验证的相关事宜之前,我想先提一下微信的消息交互流程,这可以帮助我们更加详细的了解微信服务器和第三平台的关系。

公众平台的消息交互流程如下:

1)用户通过微信客户端向公众账号发送消息,消息首先会被微信服务器接收到。

2)微信服务期收到消息后,会根据开发者在接口配置信息中填写的URL,将消息通过HTTP POST方式传递到公众账号服务器。

3)公众账号服务器接收到消息后,会按照业务逻辑进行相应的处理。

4)微信服务器将公众账号服务器返回的消息通过公众账号发送给用户。

由上面消息交互的流程可以发现,真正的业务处理代码其实是发布在第三平台上的,而验证过程中token的作用相当于秘钥,为微信服务器和公众账号服务器之间的信息传递开辟一条通道。而微信服务器上需要的URL正是第三平台上代码所处的location。

微信上面有关于验证的PHP代码,这里我使用的是Java

public static boolean checkSign(String signature,String timestamp,String nonce){
String[] arr = new String[] {token,timestamp,nonce};
Arrays.sort(arr);
String connect = arr[0].concat(arr[1]).concat(arr[2]);
String check = null;
try{
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(connect.toString().getByte());
String check = byteToStr(digest);//byteToStr是一个将字节数组转换成十六进制字符串的一个方法
}catch(NoSuchAlgorithmException e){
e.printStackTrace();
}
return check != null?check.equals(signature.toUpperCase()):false;
}

下面是关于将字节数组转换成十六进制字符串的代码

public class byteToString{
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for(int i = 0;i>> 4) & 0x0F];
str1[1] = Digit[mByte & 0x0F];
String aim = new String(str1);
return aim;
}
}

ps.第三平台有两种选择,新浪和百度,BAE2.0不收费,不过已经不支持代码发布了,而BAE3.0要收费。新浪虽然也要收费,但是只要申请了实名认证和开发者认证之后,基本就是不收费的了。所以我现在使用了是新浪的SAE。至于具体的在新浪上发布代码的过程,百度一下应该就有了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息