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

相关文章

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp