golang版微信小程序登录和ase解码微信公开数据

2023-10-31 19:40

本文主要是介绍golang版微信小程序登录和ase解码微信公开数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

golang版微信小程序登录和ase解码微信公开数据

  • 虽然微信提供了很多版语言的代码,但是没有go版,很简单的,大家想偷个懒就直接copy我的代码就好了
    小程序流程图
  1. 首选用code登录微信服务器,返回openID和session_key

    type RespWXSmall struct {Openid     string `json:"openid"`      //用户唯一标识Sessionkey string `json:"session_key"` //会话密钥Unionid    string `json:"unionid"`     //用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回,详见 UnionID 机制说明。Errcode    int    `json:"errcode"`     //错误码ErrMsg     string `json:"errMsg"`      //错误信息
    }func loginWXSmall(code string) (wxInfo RespWXSmall, err error) {//https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_codeappId := "******"appSecret := "***************"url := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"resp, err := http.Get(fmt.Sprintf(url, appId, appSecret, code))if err != nil {return wxInfo, err}defer resp.Body.Close()err = tools.BindJson(resp.Body, &wxInfo)if err != nil {return wxInfo, err}if wxInfo.Errcode != 0 {return wxInfo, errors.New(fmt.Sprintf("code: %d, errmsg: %s", wxInfo.Errcode, wxInfo.ErrMsg))}return wxInfo, nil
    }
  2. 获得放回结果了,进入的业务代码,处理自己的逻辑后,在给小程序返回

  • aes解码微信的公开数据,我参考python的代码

    func DecryptWXOpenData(sessionKey, encryptData, iv string) (map[string]interface{}, error) {decodeBytes, err := base64.StdEncoding.DecodeString(encryptData)if err != nil {return nil, err}sessionKeyBytes, err := base64.StdEncoding.DecodeString(sessionKey)if err != nil {return nil, err}ivBytes, err := base64.StdEncoding.DecodeString(iv)if err != nil {return nil, err}dataBytes, err := AesDecrypt(decodeBytes, sessionKeyBytes, ivBytes)fmt.Println(string(dataBytes))m := make(map[string]interface{})err = json.Unmarshal(dataBytes, &m)if err != nil {fmt.Println(err)return nil, err}temp := m["watermark"].(map[string]interface{})appid := temp["appid"].(string)if appid != setting.WxSmallConf.Appid {return nil, fmt.Errorf("invalid appid, get !%s!", appid)}if err != nil {return nil, err}return m, nil}func AesDecrypt(crypted, key, iv []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}//blockSize := block.BlockSize()blockMode := cipher.NewCBCDecrypter(block, iv)origData := make([]byte, len(crypted))blockMode.CryptBlocks(origData, crypted)//获取的数据尾端有'/x0e'占位符,去除它for i, ch := range origData {if ch == '\x0e' {origData[i] = ' '}}//{"phoneNumber":"15082726017","purePhoneNumber":"15082726017","countryCode":"86","watermark":{"timestamp":1539657521,"appid":"wx4c6c3ed14736228c"}}//<nil>return origData, nil
    }
    

这篇关于golang版微信小程序登录和ase解码微信公开数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317668

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编