Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持在请求前修改各api的地址 #736

Merged
merged 4 commits into from
Nov 2, 2023
Merged

Conversation

zxfishhack
Copy link
Contributor

订阅号要求强制设置ip白名单,在使用公网服务器配置反向代理至微信相关服务器时,需修改各API的请求域名。

@houseme
Copy link
Collaborator

houseme commented Oct 11, 2023

please fix ci and improve comment

@silenceper silenceper merged commit a5e674b into silenceper:v2 Nov 2, 2023
10 checks passed
@ourines
Copy link
Contributor

ourines commented Nov 2, 2023

这个应该怎么使用?

@houseme
Copy link
Collaborator

houseme commented Nov 2, 2023

这个应该怎么使用?

比如支付的时候,调用A(api.mch.weixin.qq.com)域名失败的时候,可以替换为备用B(api2.mch.weixin.qq.com)域名.

【主域名】
https://api.mch.weixin.qq.com 
使用该域名将访问就近的接入点
【备域名】
https://api2.mch.weixin.qq.com

支持 跨城冗灾升级指引

@zxfishhack 贴一个示例代码

@zxfishhack
Copy link
Contributor Author

zxfishhack commented Nov 2, 2023

最简单的使用情形如下:

import "github.com/silenceper/wechat/v2/util"

func main() {
   ...
   util.SetURIModifier(func(uri string) string {
        return strings.ReplaceAll(uri, "https://api.weixin.qq.com", "https://wx.examples.com") // wx.examples.com上通过nginx配置了向https://api.weixin.qq.com的反向代理,此种情况方便调试
    })
   ... 
}

@zxfishhack
Copy link
Contributor Author

针对跨城冗灾的情况,个人觉得可以起一个专门的模块去检测到各域名的链路情况,然后将主域名替换掉。
如:

type HealthCheck struct {
	preferDomain string
}

func (hc *HealthCheck) healthCheckRoutine() {
	// TODO:执行域名获取及健康检查
}

func (hc *HealthCheck) URIModifier(uri string) string {
	return strings.ReplaceAll(uri, "https://api.mch.weixin.qq.com", hc.preferDomain)
}

func NewHealthCheck() (hc *HealthCheck, err error) {
	hc = &HealthCheck{preferDomain: "https://api.mch.weixin.qq.com"}
	go hc.healthCheckRoutine()

	return
}

@ourines
Copy link
Contributor

ourines commented Nov 2, 2023

最简单的使用情形如下:

import "github.com/silenceper/wechat/v2/util"

func main() {
   ...
   util.SetURIModifier(func(uri string) string {
        return strings.ReplaceAll(uri, "https://api.weixin.qq.com", "https://wx.examples.com") // wx.examples.com上通过nginx配置了向https://api.weixin.qq.com的反向代理,此种情况方便调试
    })
   ... 
}

nginx 这样配置

    # 配置企业微信api
    location /proxy/ {
        proxy_pass https://qyapi.weixin.qq.com/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants