微信支付的支付通知 notify_url 不支持 https 吗?难以置信 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
34C
V2EX    问与答

微信支付的支付通知 notify_url 不支持 https 吗?难以置信

  34C 2018 年 7 月 1 日 13986 次点击
这是一个创建于 2802 天前的主题,其中的信息可能已经有所发展或是发生改变。
支付成功,但服务端一直收不到支付通知。
在 CSDN 论坛上看到有人说改成 http 就好,没想到真的成功了。
难道都 2018 年了这个关键通知竟然不支持 https ?
还是说不支持使用 Let's Encrypt 的 https ?
第 1 条附言    2018 年 7 月 1 日
在经过 #30 和 #32 楼的点拨之后,确定是了 SNI 配置的关系。
希望所有遇到同样问题,搜到本帖的朋友,检查一下 SNI 配置,微信内部的库估计是很老的,嗯。
第 2 条附言    2018 年 7 月 1 日
再追加一下:

因为我使用的是 Windows Server 2012 R2 + IIS 8.5 的环境,而且是中文版,所以关于 SNI 的配置,我说不清到底是关闭还是打开,我的做法是在绑定 https 域名的面板把 “需要服务器名称指示” 的勾去掉,应该是关闭了 SNI 的意思。
第 3 条附言    2018 年 7 月 1 日
最后再追加一条解决方案:
刚刚又把 “需要服务器名称指示” 这个勾打上了,然后给 IIS 的默认站点(没有配置域名的站点)添加了 https 的默认响应,同样是没域名,证书随便选一张。
这样虽然直接访问 https://ipaddres 会出错,但对于不支持 SNI 的请求(比如微信)也能正确响应了。
38 条回复    2018-12-19 19:11:30 +08:00
uqf0663
    1
uqf0663  
   2018 年 7 月 1 日
可以的,微信支付后台产品设置那里你得选 https
34C
    2
34C  
OP
   2018 年 7 月 1 日
@uqf0663

产品中心 - 开发配置 - 支付配置 - 公众号支付 - 支付授权目录

你说的是这个配置嘛?这里有配置 https 的,没用;
而这里保留只 https 而 notify_url 改成 http 一样可以通知成功,不知道啥情况
airyland
    3
airyland  
   2018 年 7 月 1 日 via iPhone
用 lets encrypt 证书的地址做为回调很久了,并没有遇到问题。
phpcxy
    4
phpcxy  
   2018 年 7 月 1 日 via Android
我也是用 Let ' s Encrypt,也是改为 http 才能收到通知。我怀疑是自己 nginx 配置问题,不过那个项目已经凉了,最后也没搞啦。
vovov
    5
vovov  
   2018 年 7 月 1 日 via Android
我也是用的 HTTPS 啊,证书也是 let ’ s encrypt 一年多了现在正常使用,稳如狗。肯定是你什么地方配置没对。
34C
    6
34C  
OP
   2018 年 7 月 1 日 via iPhone
@airyland @vacker 能不能分享一下 SSL 配置?
vovov
    7
vovov  
   2018 年 7 月 1 日   1
@34C

server
{
listen 80;
listen 443 ssl http2;
server_name www.xxx.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/www.xxx.com;

#SSL-START SSL 相关配置,请勿删除或修改下一行带注释的 404 规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /etc/letsencrypt/live/www.xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.xxx.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;


#SSL-END

#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
#ERROR-PAGE-END

#PHP-INFO-START PHP 引用配置,可以注释或修改

include enable-php-71.conf;
#PHP-INFO-END

#REWRITE-START URL 重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.xxx.com.conf;
#REWRITE-END

#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$
{
expires 12h;
access_log off;
}
access_log /www/wwwlogs/www.xxx.com.log;
}
ss098
    8
ss098  
   2018 年 7 月 1 日
之前似乎看过一篇帖子,微信好像把 TLS 版本限制为比较新的版本( TLS 1.2 / TLS 1.3 ),不支持较旧的版本,但找了一下找不到了。
ss098
    9
ss098  
   2018 年 7 月 1 日
搞错了,和这个案例的场景不太一样。

/t/458701
mydns
    10
mydns  
   2018 年 7 月 1 日
支持

扫码回调链接
操作
https://www.
34C
    11
34C  
OP
   2018 年 7 月 1 日
@vacker 在 myssl 检测了一下,评级为 B,把 RC4 和 DH 都禁用了,评级升到 A 了,仍然收不到微信的通知…
34C
    12
34C  
OP
   2018 年 7 月 1 日
@mydns 不是这个设置,页面的支付什么的都正常,就是收不到 JSAPI 支付通知…
34C
    13
34C  
OP
   2018 年 7 月 1 日
@ss098 我现在是 TLS 1.0 / 1.1 / 1.2 都支持,SSL 2 / 3 都关闭了,还是不行,楼上那位可以的也有开 TLS 1.0 唉
ysc3839
    14
ysc3839  
   2018 年 7 月 1 日 via Android
跳转 https 那里不应该用 rewrite 吧?
应该用 return 301

return 301 https://$host$request_uri;
hlwjia
    15
hlwjia  
PRO
   2018 年 7 月 1 日 via iPhone
把你的配置贴出来呀

那么多人用了那么久的都没问题
hlwjia
    17
hlwjia  
PRO
   2018 年 7 月 1 日
@34C 有一个可能,是不是小程序,是不是虚拟支付?
34C
    18
34C  
OP
   2018 年 7 月 1 日
@hlwjia

不是,我没做小程序支付,做的是公众号内 JSAPI 的支付,整个支付流程都走通了,就是支付通知收不到,
什么都不动,把 notify url 改成 http 的就能收到,改回 https 又不行,
换个别的 url 只要是 https 也不行,
服务器日志压根没收到任何请求,
而且同个域名的 https 有别的接口给公众号做自动回复,每天几千次请求都正常,唯独收不到支付通知,
蛋疼得要命
xi_lin
    19
xi_lin  
   2018 年 7 月 1 日
https 肯定支持
https://www.geocerts.com/ssl_checker
看看是不是证书链的问题
vovov
    20
vovov  
   2018 年 7 月 1 日
@34C 我的站检测结果是 A,我是 Linux,试试是否和你 window 环境有关
hlwjia
    21
hlwjia  
PRO
   2018 年 7 月 1 日
这个地址自己能访问吗?
34C
    22
34C  
OP
   2018 年 7 月 1 日 via iPhone
@hlwjia 可以的,包括用 postman 测试 post 一大段 xml 数据也没问题
34C
    23
34C  
OP
   2018 年 7 月 1 日 via iPhone
@xi_lin 测了一下全部 OK,其实我还试过换 ssl 证书但也都不行…
34C
    24
34C  
OP
   2018 年 7 月 1 日 via iPhone
@vacker 这就很蛋疼了,浏览器访问正常、其它给微信访问的接口也正常、证书检测也正常了,就是通知收不到…
Vhc001
    25
Vhc001  
   2018 年 7 月 1 日
@vacker #7 我能艾特站长举报你传播色情网站吗?
1iuh
    26
1iuh  
   2018 年 7 月 1 日
服务器在哪?不在国内的话,可能会有问题,但是不是微信的问题。
w0nglend
    27
w0nglend  
   2018 年 7 月 1 日 via Android
@ss098 小程序好像是必须 1.2。1.3 还是草案
34C
    28
34C  
OP
   2018 年 7 月 1 日 via iPhone
@1iuh 在国内,阿里云
vovov
    29
vovov  
   2018 年 7 月 1 日
@Vhc001 我反正是打不开
cameo
    30
cameo  
   2018 年 7 月 1 日   2
看一下你的服务器是不是启用了 SNI,并且没有 fallback 策略。你会看到支付成功后,立刻有一个握手失败的请求进来,那就是微信的通知请求。猜测原因是微信使用的网络库太老,没有做 SNI 的支持。强烈建议遇到这个问题的同学都提下工单,请求微信修复这一问题。
Infernalzero
    31
Infernalzero  
   2018 年 7 月 1 日
微信是这样的,只能给它的请求特殊处理,不重定向
支付宝就没这等破事
3dwelcome
    32
3dwelcome  
   2018 年 7 月 1 日 via Android   2
微信对 https 加密算法有严格要求,我把加密算法退化到最基本的 rsa cbc 就可以,上 dh 有时都会挂。特烦,别的站就没这个破问题,为此真是独此一家,特殊对待。
pubby
    33
pubby  
   2018 年 7 月 1 日 via Android
15 年开始接入微信支付,一直使用 https 回调,从没遇到这种情况
34C
    34
34C  
OP
   2018 年 7 月 1 日
@cameo
@3dwelcome

给你们俩 100 个赞!果然是 SNI 的原因!!
34C
    35
34C  
OP
   2018 年 7 月 1 日
@pubby 问题解决了,因为 SNI 配置的缘故
raptor
    36
raptor  
   2018 年 7 月 1 日
我只想说一句:Windows 就是善于制造其它平台不存在的问题……
34C
    37
34C  
OP
   2018 年 7 月 1 日 via iPhone
@raptor 别的平台也会有 SNI 的问题,只是 Windows 的配置各种神翻译神描述…
yimo666
    38
yimo666  
   2018 年 12 月 19 日
windows server 2012 R2 上,同 SNI 问题,建立一个默认的 SSL 站点即可(新建站点,协议 https 端口 443,选一张证书)
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5624 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 73ms UTC 07:47 PVG 15:47 LAX 23:47 JFK 02:47
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86