微信企业号文档坑

高小震 · · 1369 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. 签名加密对比

sha1(sort(token、timestamp、nonce、msg_encrypt))
sort表示的是这四个所对应的值的排序,而非K排序,排序结果和签名作对比
golang 例子:

func getSign(array ...string)  string{
  strs:=array[:]
  sort.Strings(strs)
  signStr:=strings.Join(strs,"")
  sn:=sha1.New()
  sn.Write([]byte(signStr))
  signData:=sn.Sum(nil)
  return fmt.Sprintf("%+x",signData)
}

2. aes key:

需要将aesKey进行解密,解密是需要在原EncodingAESKey后增加=,然后在将aes作base64解密
注意:解密结果不需要转换成字符串

3. aes加密方式:

aes-cbc加密方式,作pksc7解包,iv为key的前十六位
go 例子:

func AesDecrypt(src, key []byte) (dst []byte, err error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    iv := make([]byte, aes.BlockSize)
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        return nil, err
    }
    dst = make([]byte, len(src))
    cipher.NewCBCDecrypter(block, iv).CryptBlocks(dst, src)

    return PKCS7UnPad(dst), nil
}

// PKCS7UnPad PKSC#7解包
func PKCS7UnPad(msg []byte) []byte {
    length := len(msg)
    padlen := int(msg[length-1])
    return msg[:length-padlen]
}

参考

微信企业号api
go sdk


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:高小震

查看原文:微信企业号文档坑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1369 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传