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

相关文章

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用