# wechat **Repository Path**: gomods/wechat ## Basic Information - **Project Name**: wechat - **Description**: wechat sdk - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-11 - **Last Updated**: 2022-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信小程序服务端 SDK (for Golang) ## 说明 - SDK 暂不包含支付相关内容 已有很多优秀的支付相关模块; - 微信小程序的功能和接口一直在持续更新迭代,如果遇到没有的接口或者不符合当前实际情况的接口请提交 - ## 获取代码 ```sh go get -u gitee.com/gomods/wechat ``` ## 初始化 - 初始化 SDK ```go package main import ( "gitee.com/gomods/wechat" ) func main() { sdk := wechat.NewClient("your-appid", "your-secret") } ``` - 自定义 HTTP 客户端 ```go package main import ( "crypto/tls" "net/http" "time" "gitee.com/gomods/wechat" ) func main() { cli := &http.Client{ Timeout: 10 * time.Second, Transport: &http.Transport{ // 跳过安全校验 TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }, } sdk := wechat.NewClient( "your-appid", "your-secret", wechat.WithHttpClient(cli), ) } ``` - 自定义 token 获取方法 ```go package main import ( "gitee.com/gomods/wechat" ) func main() { tokenGetter := func() (token string, expireIn uint) { expireIn = 1000 token = "your-custom-token" return token, expireIn } sdk := wechat.NewClient( "your-appid", "your-secret", wechat.WithAccessTokenSetter(tokenGetter), ) } ``` --- ## 调用接口示例 [官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/) ```go package main import ( "fmt" "log" "gitee.com/gomods/wechat" "gitee.com/gomods/wechat/auth" ) func main() { sdk := wechat.NewClient("your-appid", "your-secret") cli := sdk.NewAuth() // 用户支付完成后获取该用户的 UnionId rsp, err := cli.GetPaidUnionId(&auth.GetPaidUnionIdRequest{}) if err != nil { log.Fatal(err) } // 检查加密信息是否由微信生成 rsp, err := cli.CheckEncryptedData(&auth.CheckEncryptedDataRequest{}) if err != nil { log.Fatal(err) } // 登录凭证校验 rsp, err := cli.Code2Session(&auth.Code2SessionRequest{}) if err != nil { log.Fatal(err) } // 获取小程序全局唯一后台接口调用凭据 rsp, err := cli.GetAccessToken(&auth.GetAccessTokenRequest{}) if err != nil { log.Fatal(err) } // 检查微信是否返回错误 if err := rsp.GetResponseError(); err != nil { log.Println(err) } fmt.Println(rsp) } ``` --- ## 接收微信通知 [官方文档](https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html#option-url) ```go package main import ( "log" "net/http" "gitee.com/gomods/wechat" "gitee.com/gomods/wechat/server" ) func main() { sdk := wechat.NewClient("your-appid", "your-secret") // 通用处理器 handler := func(req map[string]interface{}) map[string]interface{} { switch req["MsgType"] { case "text": // Do something cool ... } return nil } // HTTP handler http.HandleFunc("/wechat/notify", func(w http.ResponseWriter, r *http.Request) { srv, err := sdk.NewServer("token", "aesKey", "mchID", "apiKey", false, handler) if err != nil { log.Fatalf("init server error: %s", err) } // 调用事件处理器后 通用处理器不再处理该事件 srv.OnCustomerServiceTextMessage(func(tmr *server.TextMessageResult) *server.TransferCustomerMessage { return &server.TransferCustomerMessage{} }) if err := srv.Serve(w, r); err != nil { log.Fatalf("serving error: %s", err) } }) } ```