Skip to content

Latest commit

History

380 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

微信小程序服务端 SDK (for Golang)

说明

  • v1 版本入口
  • v2 版本入口
  • 查看完整文档
  • SDK 暂不包含支付相关内容 已有很多优秀的支付相关模块;
  • 微信小程序的功能和接口一直在持续更新迭代,如果遇到没有的接口或者不符合当前实际情况的接口请提交 issue 或者发起 pull request;

获取代码

go get -u github.com/medivhzhan/weapp/v3

初始化

  • 初始化 SDK
package main
import (
"github.com/medivhzhan/weapp/v3"
)
funcmain() {
sdk:=weapp.NewClient("your-appid", "your-secret")
}
  • 自定义 HTTP 客户端
package main
import (
"crypto/tls""net/http""time""github.com/medivhzhan/weapp/v3"
)
funcmain() {
cli:=&http.Client{
Timeout: 10*time.Second,
Transport: &http.Transport{
// 跳过安全校验TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
}
sdk:=weapp.NewClient(
"your-appid",
"your-secret",
weapp.WithHttpClient(cli),
)
}
  • 自定义日志
package main
import (
"log""os""github.com/medivhzhan/weapp/v3""github.com/medivhzhan/weapp/v3/logger"
)
funcmain() {
lgr:=logger.NewLogger(log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Info, true)
sdk:=weapp.NewClient(
"your-appid",
"your-secret",
weapp.WithLogger(lgr),
)
// 任意切换日志等级sdk.SetLogLevel(logger.Silent)
}
  • 自定义缓存
package main
import (
"time""github.com/medivhzhan/weapp/v3"
)
typeMyCachestruct{}
func (cc*MyCache) Set(keystring, valinterface{}, timeout time.Duration) {
// ...
}
func (cc*MyCache) Get(keystring) (interface{}, bool) {
return"your-access-token", true
}
funcmain() {
cc:=new(MyCache)
sdk:=weapp.NewClient(
"your-appid",
"your-secret",
weapp.WithCache(cc),
)
}
  • 自定义 token 获取方法
package main
import (
"github.com/medivhzhan/weapp/v3"
)
funcmain() {
tokenGetter:=func() (tokenstring, expireInuint) {
expireIn=1000token="your-custom-token"returntoken, expireIn
}
sdk:=weapp.NewClient(
"your-appid",
"your-secret",
weapp.WithAccessTokenSetter(tokenGetter),
)
}

调用接口示例

官方文档

package main
import (
"fmt""log""github.com/medivhzhan/weapp/v3""github.com/medivhzhan/weapp/v3/auth"
)
funcmain() {
sdk:=weapp.NewClient("your-appid", "your-secret")
cli:=sdk.NewAuth()
// 用户支付完成后获取该用户的 UnionIdrsp, err:=cli.GetPaidUnionId(&auth.GetPaidUnionIdRequest{})
iferr!=nil {
log.Fatal(err)
}
// 检查加密信息是否由微信生成rsp, err:=cli.CheckEncryptedData(&auth.CheckEncryptedDataRequest{})
iferr!=nil {
log.Fatal(err)
}
// 登录凭证校验rsp, err:=cli.Code2Session(&auth.Code2SessionRequest{})
iferr!=nil {
log.Fatal(err)
}
// 获取小程序全局唯一后台接口调用凭据rsp, err:=cli.GetAccessToken(&auth.GetAccessTokenRequest{})
iferr!=nil {
log.Fatal(err)
}
// 检查微信是否返回错误iferr:=rsp.GetResponseError(); err!=nil {
log.Println(err)
}
fmt.Println(rsp)
}

接收微信通知

官方文档

package main
import (
"log""net/http""github.com/medivhzhan/weapp/v3""github.com/medivhzhan/weapp/v3/server"
)
funcmain() {
sdk:=weapp.NewClient("your-appid", "your-secret")
// 通用处理器handler:=func(reqmap[string]interface{}) map[string]interface{} {
switchreq["MsgType"] {
case"text":
// Do something cool ...
}
returnnil
}
// HTTP handlerhttp.HandleFunc("/wechat/notify", func(w http.ResponseWriter, r*http.Request) {
srv, err:=sdk.NewServer("token", "aesKey", "mchID", "apiKey", false, handler)
iferr!=nil {
log.Fatalf("init server error: %s", err)
}
// 调用事件处理器后 通用处理器不再处理该事件srv.OnCustomerServiceTextMessage(func(tmr*server.TextMessageResult) *server.TransferCustomerMessage {
return&server.TransferCustomerMessage{}
})
iferr:=srv.Serve(w, r); err!=nil {
log.Fatalf("serving error: %s", err)
}
})
}

About

微信小程序服务端 SDK (for Golang)

Topics

Resources

Stars

1.5k stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages