Skip to content

Latest commit

 

History

History
189 lines (160 loc) · 8.54 KB

README.MP.md

File metadata and controls

189 lines (160 loc) · 8.54 KB

微信公众号

快速开始

微信交互的运行流程:微信服务器把用户消息转到我们的自有服务器(虚线返回部分) 后的处理过程

                                 +-----------------+                       +---------------+
+----------+                     |                 |    POST/GET/PUT       |               |
|          | ------------------> |                 | ------------------->  |               |
|   user   |                     |  wechat server  |                       |  your server  |
|          | < - - - - - - - - - |                 |                       |               |
+----------+                     |                 | <- - - - - - - - - -  |               |
                                 +-----------------+                       +---------------+

完成服务器端验证与接收响应用户发送的消息Demo:

	//配置微信参数

	config := &wechat.Config{
    		AppID:            "your appId",  //开发者ID(AppID)
    		AppSecret:        "your appSecret",	//开发者PWD AppSecret
    		Token:            "your token",	//令牌(Token)
    		EncodingAESKey:   "your encoding aes key",		//消息加解密密钥 EncodingAESKey
    		PayMchId:         "",       //支付 - 商户 ID
    		PayNotifyUrl:     "",       //支付 - 接受微信支付结果通知的接口地址
    		PayKey:           "",       //支付 - 商户后台设置的支付 key
    		CacheModel:       "file",   //缓存方式 默认为file,可选 file,redis,redisCluster
    		ThirdAccessToken:  false,	//是否使用第三方accessToken
    		ProxyUrl:          "",		//代理
    		CacheConfig: &wechat.CacheConfig{  //缓存配置
    			FilePath: "./util/debug2/cache.txt",   //缓存文件路径  CacheModel = "file" 时有效
    			RedisConfig: &wechat.RedisConfig{
    				Addr: "127.0.0.1:6370",	  	//Redis 地址,CacheModel = "redis" 时有效
    				Password: "your redis pwd",   		//Redis PWD 
    			},
    			RedisClusterConfig: &wechat.RedisClusterConfig{
    				Addr: []string{"127.0.0.1:6370", "127.0.0.1:6370"},		//RedisCluster 地址,CacheModel = "redisCluster" 时有效
    				Password: "your redis pwd",  									//RedisCluster PWD 
    			},
    		},
    		FlogConfig: &wechat.FlogConfig{
    			LogLevel: 	  1,					//日志级别 =0 ALL; =1 DEBUG; =2 INFO; =3 WARN; =4 ERROR; =5 FATAL; =6 ALERT; =7 OFF;  注意:测试可以设置DEBUG;线上设置INFO 或 ERROR
    			IsConsole:    true,					//是否输出到控制台
    			IsFile:       true,					//是否写文件
    			FilePath:     "./util/debug/",		//文件日志路径
    			Filename:     "wechat-sdk",			//文件名称
    			FileSuffix:   "txt",				//文件后缀
    			FileMaxSize:  1024*1024*1024,		//单个日志文件大小 单位B, 1024 * 1024 * 1024 为1G
    		},
    	}
	
	//ps:下面的方法一,方法二取选一个即可

	//方法一(需要传入request和responseWriter)
	wc := wechat.NewWechat(config)

    server := wc.GetServer(request, responseWriter)  // 传入request和responseWriter

    //设置接收消息的处理方法
    server.SetMessageHandler(func(msg message.MixMessage) *response.Reply {
        reStr = response.NewText("回复微信")
        return &response.Reply{MsgType: msgType, MsgData: reStr}
    })
    server.Serve()
    server.Send()
    //方法一结束
    
    //方法二(需要传入request, 不需要responseWriter, 返回内容不由包直接返给微信平台,而是返回给应用,由应用返给微信平台)
    wc := wechat.NewWechat(config)

    server := wc.GetResponseServer(request) // 传入request

    //设置接收消息的处理方法
    server.SetMessageHandler(func(msg message.MixMessage) *response.Reply {
        reStr = response.NewText("回复微信")
        return &response.Reply{MsgType: msgType, MsgData: reStr}
    })
    //处理消息接收以及回复 rw http.ResponseWriter
    str, contentType, echostrExist, err := server.ResponseServe()
    if err != nil {
        fmt.Println(err)
        return
    }
    if echostrExist { //echostrExist为true时,响应微信平台校验接口
        header := rw.Header()
        header["Content-Type"] = []string{contentType}
        rw.WriteHeader(200)
        rw.Write([]byte(str))
        fmt.Println("echostrExist is true",str,contentType)
        return
    }
    //发送回复的消息给微信平台
    str2, contentType2, err := server.ResponseSend()
    header := rw.Header()
    header["Content-Type"] = []string{contentType2}
    rw.WriteHeader(200)
    rw.Write([]byte(str2)
    //方法二结束
    
    

详细Demo:examples/example/serve.go

配置说明

    config := &wechat.Config{
            AppID:            "your appId",  //开发者ID(AppID)
            AppSecret:        "your appSecret",	//开发者PWD AppSecret
            Token:            "your token",	//令牌(Token)
            EncodingAESKey:   "your encoding aes key",		//消息加解密密钥 EncodingAESKey
            PayMchId:         "",       //支付 - 商户 ID
            PayNotifyUrl:     "",       //支付 - 接受微信支付结果通知的接口地址
            PayKey:           "",       //支付 - 商户后台设置的支付 key
            CacheModel:       "file",   //缓存方式 默认为file,可选 file,redis,redisCluster
            ThirdAccessToken:  false,	//是否使用第三方accessToken
            ProxyUrl:          "",		//代理
            CacheConfig: &wechat.CacheConfig{  //缓存配置
                FilePath: "./util/debug2/cache.txt",   //缓存文件路径  CacheModel = "file" 时有效
                RedisConfig: &wechat.RedisConfig{
                    Addr: "127.0.0.1:6370",	  	//Redis 地址,CacheModel = "redis" 时有效
                    Password: "your redis pwd",   		//Redis PWD 
                },
                RedisClusterConfig: &wechat.RedisClusterConfig{
                    Addr: []string{"127.0.0.1:6370", "127.0.0.1:6370"},		//RedisCluster 地址,CacheModel = "redisCluster" 时有效
                    Password: "your redis pwd",  									//RedisCluster PWD 
                },
            },
            FlogConfig: &wechat.FlogConfig{
                LogLevel: 	  1,					//日志级别 =0 ALL; =1 DEBUG; =2 INFO; =3 WARN; =4 ERROR; =5 FATAL; =6 ALERT; =7 OFF;  注意:测试可以设置DEBUG;线上设置INFO 或 ERROR
                IsConsole:    true,					//是否输出到控制台
                IsFile:       true,					//是否写文件
                FilePath:     "./util/debug/",		//文件日志路径
                Filename:     "wechat-sdk",			//文件名称
                FileSuffix:   "txt",				//文件后缀
                FileMaxSize:  1024*1024*1024,		//单个日志文件大小 单位B, 1024 * 1024 * 1024 为1G
            },
        }
CacheModel 说明:

Cache主要用来保存全局的,access_token,可以选file,redis,redisCluster等模式

CacheModel="file" CacheConfig中的FilePath,需要填写日志目录

CacheModel="redis" CacheConfig中的RedisConfig,需要填redis相关配置

CacheModel="redisCluster" CacheConfig中的RedisClusterConfig,需要填写redisCluster相关配置

ThirdAccessToken 说明:

正常设置为false 即可 如果遇到下面场景,设置为true 共享其它项目已有的access_token,当前项目不再从微信更新维护access_token,只是利用其它项目中已存在access_token,来发消息或其它操作时,可设置为true 如果设置为true,需要从其它项目中把access_token取到,并设置保存到缓存中,这样通过实例化后,调用发消息或其它操作时,默认取ThirdAccessToken 设置方法:wc.Context.SetThirdAccessToken("your third_access_token",600),缓存时间单位为秒

ProxyUrl 说明:

如果需要设置代理,请填写自己的代理地址。格式:"http://10.10.10.10:8080/"

FlogConfig 说明:

配置sdk相关日志信息,日志记录与微信的交互过程中的一些调试,报错信息。 日志级别:测试可以设置DEBUG;线上设置INFO 或 ERROR

基本的API调用

常见问题

    该公众号暂时无法提供服务请稍后再试