2016-05-25 22:29:10 iteye_4474 阅读数 30
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

    8125 人正在学习 去看看 秦子恒
/**
   * 对密文进行解密.
   *
   * @param cipherText 需要解密的密文
   * @return 解密得到的明文
   */ 

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
      SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES");
      IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16));
      cipher.init(Cipher.DECRYPT_MODE, key_spec, iv);

// 使用BASE64对密文进行解码
      byte[] encrypted = Base64.decodeBase64(cipherText);

      // 解密
      original = cipher.doFinal(encrypted);

以下省略。。。。。
如需要请给我留言

 

 

当在用 JAVA 处理微信的接收消息时,在处理密文时,如果碰到了

java.security.InvalidKeyException: Illegal key size or default parameters

 

此异常。那你就需要在你的 JDK 或 JRE 环境中添加无政策限制权限文件了。

下载地址如下:

      ●Java 5.0 无政策限制文件
      ●Java 6 无政策限制文件
      ●Java 7 无政策限制文件

      ●Java 8 无政策限制文件
      ●其他版本 无政策限制文件

      下载的压缩包中仅有一个目录,也就是jce目录。该目录中包含了4个文件:README.txt、COPYRIGHT.html、local_policy.jar和US_export_policy.jar。其中包含的两个jar文件正是此次配置中用到的文件。
      我们可以查看上述README.txt文件,你需要在JDK的JRE环境中,或者是JRE环境中配置上述两个jar文件。
      切换到%JDK_Home%\jre\lib\security目录下,对应覆盖local_policy.jar和US_export_policy.jar两个文件。同时,你可能有必要在%JRE_Home%\lib\security目录下,也需要对应覆盖这两个文件。
      配置权限文件的最终目的是为了使应用在运行环境中获得相应的权限,可以加强应用的安全性。通常,我们在应用服务器上安装的是JRE,而不是JDK。因此,这就很有必要在应用服务器的%JRE_Home%\lib\security目录下,对应覆盖这两个权限文件。很多开发人员往往忽略了这一点,导致事故发生。

2016-12-05 10:53:42 DarkAngel1228 阅读数 345
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

    8125 人正在学习 去看看 秦子恒

一.注意事项

1.微信公众号接口只支持80端口

2.微信后台配置的URL是唯一能接收到消息,事件的入口

我们在公众号中的所有操作,都是基于这个url进行交互

3.调用所有接口时几乎全部使用https协议

4.用户向公众号发送消息时,会传过来OpenID

这个OpenID是用户微信号加密后的值,每个用户在每个公众号中OpenID是唯一的.
这里写图片描述

5.在开发阶段,要留意报错信息.

比如全局返回码这个非常非常非常重要,开发出了问题最终依然要靠自己动手解决(错误码40003经常碰到)

6.严格遵守使用规范

我们在和微信服务器交互的时候,需要满足各个接口的
规范限制,调用频率限制,也要特别注意模版消息,
用户数据等敏感信息的使用规范.
比如:微信认证分为资质认证和名称认证两部分.
只需要资质认证通过,就可以获得接口.
每一个接口的调用次数是有上限的.

2018-08-13 08:19:16 weixin_41360448 阅读数 269
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

    8125 人正在学习 去看看 秦子恒

微信开发的第一步就是要打通本地开发环境与微信服务器之间通道,所以我们在将内网(本地)端口映射到外网后,还要有一种特定的暗号来与微信服务器对接,就是加密认证。

在接口配置信息中填入自己的外网代理地址和自定token后,点击确认提交按钮,实际上微信服务器会向我们发送一个认证请求,其中包含:signature,nonce,timestamp,echostr

{
    signature: 'xxxxxxxxxxxxxxxxx',
    nonce: 'xxxxxxxxxxxxxxxxxx',
    timestamp: 'xxxxxxxxxxxxxxxxxxxxxx',
    echostr: 'xxxxxxxxxxxxxxxxxxx'
}

而要求我们返回的响应消息是echostr,微信接收到匹配的响应消息就表示接头成功。

但是处于安全考虑,我们本地(内网)地址是暴露到外网的,谁都能进来溜溜,所以我们也需要判断这个请求是否属于微信服务器,判断逻辑如下:

1 将token、timestamp(时间戳)nonce(随机数)三个参数进行字典排序
2 将三个参数数字字符串拼接成一个字符串进行sha1加密
3 将加密后的字符串与signature对比,如果相同,表示这个请求来源于微信

代码如下:

var str = [token,timestamp,nonce].sort().join('');
var sha = Sha1(str);

if (sha === signature) {
  this.body = echostr
}else {
  this.body = 'wrong'
}

微信加密认证的过程其实非常简单,但我们要注意代码不能敲错,出现配置错误第一步是查看控制台,请求有没有发过来,然后检查代码拼写

通常会把加密认证做成中间件来简化代码逻辑,这里不做阐述。

2017-03-09 13:19:30 tianlele_xl 阅读数 249
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

    8125 人正在学习 去看看 秦子恒

nodejs微信开发测试,模拟微信事件、消息等请求

原理:模拟微信请求,对响应的结果进行match

看个微信请求日志

通过查看微信的调用日志,我们可以看到有:消息,事件,文本,图片,用户管理,客服等等涵盖了微信公众号大多数操作的日志记录。同时也能看到每个操作请求的方式,这样就可以模拟微信的请求方式,在本地获取响应的结果,进行测试了。

我使用nodejs实现,测试包用的mocha和supertest;加密解密以及签名用的wechat-crypto;还有xml和json转换这类包等等。主要就这几个。

大致步骤

1.install supertest 和 mocha;

2.定义describe。

3.拼接请求的xml数据:

    -需注意:事件,消息,自定义菜单不同的操作为不同的xml格式;
    -发送的xml消息需要加密。

4.根据消息进行签名,拼接请求的url;

5.请求url,获取响应内容。

6.对响应内容做断言。

2016-07-03 18:56:41 qq_33587050 阅读数 1212
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

    8125 人正在学习 去看看 秦子恒

最近在做微信接入,在采用明文消息与微信服务器进行通信时,毫无压力,改成密文后,微信提供了各种语言版本的demo,but 没有nodejs。(复制一下,语文偏科,凑字数)。

做微信加密消息主要下面几个方面的内容:

  1. 加密前明文结构

  2. 16字节的随机字符串

  3. 消息长度的网络子节序

  4. 加密方式

  5. 加密算法

  6. 填充块计算方式

  7. 加密实现

1. 加密前明文结构: random(16B)+ msg_len(4B) + msg + $AppId;

        说明:random(16B)为16字节的随机字符串;msg_len为msg长度,占4个字节(网络字节序),$AppId为公众账号的AppId

2. 16字节随机字符串:没啥说的直接拼接就好了


var randomPrefix = function(n) {
    var _str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    var buf = new Buffer(n);
    for (var i = 0; i < n; i++) {
        buf[i] = _str.charCodeAt(Math.floor(Math.random() * _str.length));
    }
    return buf;
};

3. 网络子节序:网络子节序根据消息主体长度而生成

var htonl = function(n) {
    var buf = new Buffer(4);
    buf[0] = (n & 0xFF000000) >> 24;
    buf[1] = (n & 0x00FF0000) >> 16;
    buf[2] = (n & 0x0000FF00) >> 8;
    buf[3] = (n & 0x000000FF) >> 0;
    return buf;
};

4.加密方式:Base64_Encode(AES_Encrypt [random(16B)+ msg_len(4B) + msg + $AppId]);

5.加密算法:AES采用CBC模式,秘钥长度为32个字节,数据采用PKCS#7填充;PKCS#7:K为秘钥字节数(采用32),buf为待加密的内容,N为其字节数。Buf需要被填充为K的整数倍。在buf的尾部填充(K-N%K)个字节,每个字节的内容是(K- N%K);

6.填充块计算方式: 消息体长度 /32 ,

var padding = function(n) {
    var len = n % 32;
    if (len == 0) { 
        len = 32;
    } else {
        len = 32 - len;
    }
    var buf = new Buffer(len);
    for (var i = 0; i < len; i++) {
        buf[i] = len;
    }
    return buf;
};

7.加密实现:

    1.加密采用crypto库,

    2.加密方式:aes-256-cbc,

    3.key:

var encodingAESKey = new Buffer("YfWVs4vtcNf6FPFRqzJ2VT6LCmpppePaRyGJjt7Rlcr" + "=", 'base64');

 4.IV:

encodingAESKey.slice(0, 16);

5. 创建加密对象方法:createCipheriv,

var cipher = crypto.createCipheriv('aes-256-cbc', encodingAESKey, encodingAESKey.slice(0, 16));

6. 取消自动填充

cipher.setAutoPadding(false);

7.加密并返回结果
cipher.update(Buffer.concat([preBuf, netBuf, msgBuf, corpBuf, paddingBuf]), "binary", 'base64') + cipher.final('base64'); // 解密数据

8.整体加密代码

var encrypt = function(msg) {
    var msgBuf = new Buffer(msg, "utf-8"),
        msgBufLength = msgBuf.length,
        preBuf = randomPrefix(16),
        netBuf = htonl(msgBufLength),
        corpBuf = new Buffer(corpId, "utf-8"),
        corpBufLength = corpBuf.length,
        paddingBuf = padding(20 + msgBufLength + corpBufLength);
    var cipher = crypto.createCipheriv('aes-256-cbc', encodingAESKey, encodingAESKey.slice(0, 16)); 
    cipher.setAutoPadding(false); // 取消自动填充
    return cipher.update(Buffer.concat([preBuf, netBuf, msgBuf, corpBuf, paddingBuf]), "binary", 'base64') + cipher.final('base64'); // 解密数据
};
欢迎加入node.js交流群:572416249
原文:http://my.oschina.net/lvyuely/blog/598421

微信公众平台开发

阅读数 513

微信开发中的坑

阅读数 41

没有更多推荐了,返回首页