WXBizMsgCrypt4Go

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2021 License: MIT Imports: 13 Imported by: 0

README

WXBizMsgCrypt4Go

WXBizMsgCrypt's golang version, support xml / json format


Installation

Install WXBizMsgCrypt4Go by running following command in terminal:

go get -u github.com/co60/WXBizMsgCrypt4Go

Then import it like this:

import "github.com/co60/WXBizMsgCrypt4Go"

Main methods' Definition:

	func NewDefaultWXBizMsgCrypt(token, keyStr, appid string) WXBizMsgCrypt {  // WXBizMsgCrypt for XML
	
	... ...
	
	func NewWXBizMsgCrypt(token, keyStr, appid, format string) WXBizMsgCrypt { // WXBizMsgCrypt for specified format (`xml` | `json`)

Examples

  • XML (default)
	encodingAESKey := "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG"
	to_xml := "<xml><ToUserName><![CDATA[oia2TjjewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName><CreateTime>1407743423</CreateTime><MsgType>  <![CDATA[video]]></MsgType><Video><MediaId><![CDATA[eYJ1MbwPRJtOvIEabaxHs7TX2D-HV71s79GUxqdUkjm6Gs2Ed1KF3ulAOA9H1xG0]]></MediaId><Title><![CDATA[testCallBackReplyVideo]]></Title><Descript  ion><![CDATA[testCallBackReplyVideo]]></Description></Video></xml>"
	token := "spamtest"
	nonce := "1320562132"
	appid := "wx2c2769f8efd9abc2"
	timestamp := "1409735669"
	msg_sign := "da92199ec168271c91d301577f90671fd3a7943e" // "5d197aaffba7e9b25a30732f161a50dee96bd5fa"
	encryp_test := WXBizMsgCrypt4Go.NewDefaultWXBizMsgCrypt(token, encodingAESKey, appid)
	encrypt_xml, errcode := encryp_test.EncryptMsg(to_xml, nonce, timestamp)
	if errcode != WXBizMsgCrypt4Go.WXBizMsgCrypt_OK {
		fmt.Println("WXBizMsgCrypt encrypt with xml error")
	}
	fmt.Printf("encrypt xml is:\n%s\n", encrypt_xml)

	// from_xml := "<xml><ToUserName><![CDATA[gh_10f6c3c3ac5a]]></ToUserName><FromUserName><![CDATA[oyORnuP8q7ou2gfYjqLzSIWZf0rs]]></FromUserName><CreateTime>1409735668</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[abcdteT]]></Content><MsgId>6054768590064713728</MsgId><Encrypt><![CDATA[hyzAe4OzmOMbd6TvGdIOO6uBmdJoD0Fk53REIHvxYtJlE2B655HuD0m8KUePWB3+LrPXo87wzQ1QLvbeUgmBM4x6F8PGHQHFVAFmOD2LdJF9FrXpbUAh0B5GIItb52sn896wVsMSHGuPE328HnRGBcrS7C41IzDWyWNlZkyyXwon8T332jisa+h6tEDYsVticbSnyU8dKOIbgU6ux5VTjg3yt+WGzjlpKn6NPhRjpA912xMezR4kw6KWwMrCVKSVCZciVGCgavjIQ6X8tCOp3yZbGpy0VxpAe+77TszTfRd5RJSVO/HTnifJpXgCSUdUue1v6h0EIBYYI1BD1DlD+C0CR8e6OewpusjZ4uBl9FyJvnhvQl+q5rv1ixrcpCumEPo5MJSgM9ehVsNPfUM669WuMyVWQLCzpu9GhglF2PE=]]></Encrypt></xml>"
	from_xml := encrypt_xml
	decrypt_test := WXBizMsgCrypt4Go.NewDefaultWXBizMsgCrypt(token, encodingAESKey, appid)
	var decryp_xml string
	decryp_xml, errcode = decrypt_test.DecryptMsg(from_xml, msg_sign, timestamp, nonce)
	fmt.Printf("decrypt xml is:\n%s\n", decryp_xml)
  • JSON (in compacity mode)
	encodingAESKey := "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG"
	// in compacity mode (with Content... and Encrypt)
	to_json := `{
  "ToUserName":"gh_bb2bb93f8347",
  "FromUserName":"or5715HsCeFmycfU8gz0wx0sXfso",
  "CreateTime":1623398596,
  "MsgType":"text",
  "Content":"还是睡吧",
  "MsgId":23241477706429916,
  "Encrypt":"v62EYjaWEIZ9VqALyzuv5rgM7jAXJAjR1K4jCoBHCAL/etsrtCnPgFAWQ8iCTACUoSY+boCpb4DWTRDa8QvCwanZLia8Need/RQaOE+THnTFq2U7vL/3jgCm6HdzvrqjqPSq7RSrzh40IASLkY1BXsO942AYG04wQdRq6P3GqqIjpZsklIyAwBL1c9I9+E+qoMsHO52DeHV4MOHaywX/itt0B77uaTVfEJSNznE/1OlLPSMczATH21RsR5Dwt8V0XhHt5F6QdJA8T6NDfeZs/e32uQcX74Bx4AKMORnfWHc="
}`
	token := "spamtest"
	nonce := "1320562132"
	appid := "wx2c2769f8efd9abc2"
	timestamp := "1409735669"
	msg_sign := "da92199ec168271c91d301577f90671fd3a7943e"                          // "5d197aaffba7e9b25a30732f161a50dee96bd5fa"
	encryp_test := WXBizMsgCrypt4Go.NewTestWXBizMsgCrypt(token, encodingAESKey, appid, "json", true) // !!!IGNORE!!! signature validation :(
	encrypt_json, errcode := encryp_test.EncryptMsg(to_json, nonce, timestamp)
	if errcode != WXBizMsgCrypt4Go.WXBizMsgCrypt_OK {
		fmt.Println("WXBizMsgCrypt encrypt with json error")
		return
	}
	fmt.Printf("encrypt xml is:\n%s\n", encrypt_json)

	from_json := encrypt_json
	decrypt_test := WXBizMsgCrypt4Go.NewTestWXBizMsgCrypt(token, encodingAESKey, appid, "json", true) // !!!IGNORE!!! signature validation :(
	var decrypt_json string
	decrypt_json, errcode = decrypt_test.DecryptMsg(from_json, msg_sign, timestamp, nonce)
	if errcode != WXBizMsgCrypt4Go.WXBizMsgCrypt_OK {
		fmt.Printf("WXBizMsgCrypt decrypt with json error\n")
		return
	}
	fmt.Printf("decrypt json is:\n%s\n", decrypt_json)

Wechat miniprogram


License

WXBizMsgCrypt4Go is MIT licensed.

Documentation

Index

Constants

View Source
const AES_Block_Size int32 = 32
View Source
const DataLengthLen uint32 = 4
View Source
const EncodingAESKeyLen int32 = 16

Variables

This section is empty.

Functions

func GetErrMessage

func GetErrMessage(errcode WXBizMsgCryptErr) string

func RemoveSurplusCharactorsInXmlOrJson

func RemoveSurplusCharactorsInXmlOrJson(src string) string

Types

type AES_Mode

type AES_Mode int
const (
	AES_MODE_ECB     AES_Mode = 1
	AES_MODE_CBC     AES_Mode = 2
	AES_MODE_CFB     AES_Mode = 3
	AES_MODE_OFB     AES_Mode = 5
	AES_MODE_CTR     AES_Mode = 6
	AES_MODE_OPENPGP AES_Mode = 7
	AES_MODE_CCM     AES_Mode = 8
	AES_MODE_EAX     AES_Mode = 9
	AES_MODE_SIV     AES_Mode = 10
	AES_MODE_GCM     AES_Mode = 11
	AES_MODE_OCB     AES_Mode = 12
)

type AesTextResp

type AesTextResp struct {
	XMLName      xml.Name `xml:"xml"`
	MsgEncrypt   CDATA    `xml:"Encrypt"`
	MsgSignature CDATA    `xml:"MsgSignature"`
	TimeStamp    string   `xml:"TimeStamp"`
	Nonce        CDATA    `xml:"Nonce"`
}

*

  • `<xml>
  • <Encrypt><![CDATA[%(msg_encrypt)s]]></Encrypt>
  • <MsgSignature><![CDATA[%(msg_signaturet)s]]></MsgSignature>
  • <TimeStamp>%(timestamp)s</TimeStamp>
  • <Nonce><![CDATA[%(nonce)s]]></Nonce>
  • </xml>`

type CDATA

type CDATA struct {
	Text string `xml:",cdata"`
}

type PKCS7Encoder

type PKCS7Encoder struct {
	BlockSize int
}

func NewDefaultPKCS7Encoder

func NewDefaultPKCS7Encoder() PKCS7Encoder

type Prpcrypt

type Prpcrypt struct {
	Key  []byte
	Mode AES_Mode
}

type SHA1

type SHA1 struct{}

type TextMsg

type TextMsg struct {
	XMLName    xml.Name `xml:"xml"`
	ToUserName CDATA    `xml:"ToUserName"`
	CreateTime CDATA    `xml:"CreateTime"`
	MsgType    CDATA    `xml:"MsgType"`
	Content    CDATA    `xml:"Content"`
	Encrypt    CDATA    `xml:"Encrypt"`
	MsgId      CDATA    `xml:"MsgId"`
}

*

  • <xml><ToUserName><![CDATA[gh_10f6c3c3ac5a]]></ToUserName>
  • <FromUserName><![CDATA[oyORnuP8q7ou2gfYjqLzSIWZf0rs]]></FromUserName>
  • <CreateTime>1409735668</CreateTime>
  • <MsgType><![CDATA[text]]></MsgType>
  • <Content><![CDATA[abcdteT]]></Content>
  • <MsgId>6054768590064713728</MsgId>
  • </xml>

type WXBizMsgCrypt

type WXBizMsgCrypt struct {
	Token  string
	Key    []byte
	Appid  string
	Format string // json or xml (default) format output
	IgnSig bool   // ignore signature validation (just in test mode)
}

func NewDefaultWXBizMsgCrypt

func NewDefaultWXBizMsgCrypt(token, keyStr, appid string) WXBizMsgCrypt

func NewTestWXBizMsgCrypt

func NewTestWXBizMsgCrypt(token, keyStr, appid, format string, ignoreSig bool) WXBizMsgCrypt

func NewWXBizMsgCrypt

func NewWXBizMsgCrypt(token, keyStr, appid, format string) WXBizMsgCrypt

func (WXBizMsgCrypt) DecryptMsg

func (wxcrypt WXBizMsgCrypt) DecryptMsg(postData string, msgSignature string, timestamp string, nonce string) (string, WXBizMsgCryptErr)

func (WXBizMsgCrypt) EncryptMsg

func (wxcrypt WXBizMsgCrypt) EncryptMsg(replyData string, nonce string, timestamp string) (string, WXBizMsgCryptErr)

type WXBizMsgCryptErr

type WXBizMsgCryptErr int32
const (
	WXBizMsgCrypt_OK                     WXBizMsgCryptErr = 0
	WXBizMsgCrypt_ValidateSignatureError WXBizMsgCryptErr = -40001
	WXBizMsgCrypt_ParseXmlError          WXBizMsgCryptErr = -40002
	WXBizMsgCrypt_ComputeSignatureError  WXBizMsgCryptErr = -40003
	WXBizMsgCrypt_IllegalAesKey          WXBizMsgCryptErr = -40004
	WXBizMsgCrypt_ValidateAppidError     WXBizMsgCryptErr = -40005
	WXBizMsgCrypt_EncryptAESError        WXBizMsgCryptErr = -40006
	WXBizMsgCrypt_DecryptAESError        WXBizMsgCryptErr = -40007
	WXBizMsgCrypt_IllegalBuffer          WXBizMsgCryptErr = -40008
	WXBizMsgCrypt_EncodeBase64Error      WXBizMsgCryptErr = -40009
	WXBizMsgCrypt_DecodeBase64Error      WXBizMsgCryptErr = -40010
	WXBizMsgCrypt_GenReturnXmlError      WXBizMsgCryptErr = -40011
)

type XMLParse

type XMLParse struct{}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL