code: func (wxa *MiniProgram) Decrypt(sessionKey, encryptedData, iv string) (*UserInfo, error) {
  	aesKey, err := base64.StdEncoding.DecodeString(sessionKey)
  	if err != nil {
  		return nil, err
  	}
  	cipherText, err := base64.StdEncoding.DecodeString(encryptedData)
  	if err != nil {
  		return nil, err
  	}
  	ivBytes, err := base64.StdEncoding.DecodeString(iv)
  	if err != nil {
  		return nil, err
  	}
  	block, err := aes.NewCipher(aesKey)
  	if err != nil {
  		return nil, err
  	}
  	mode := cipher.NewCBCDecrypter(block, ivBytes)
  	mode.CryptBlocks(cipherText, cipherText)
  	cipherText, err = pkcs7Unpad(cipherText, block.BlockSize())
  	if err != nil {
  		return nil, err
  	}
  	var userInfo UserInfo
  	err = json.Unmarshal(cipherText, &userInfo)
  	if err != nil {
  		return nil, err
  	}
  	if userInfo.Watermark.AppID != wxa.AppID {
  		return nil, ErrAppIDNotMatch
  	}
  	return &userInfo, nil
  }
docs: // Decrypt 解密数据