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

2018-07-01 01:25:25 +08:00
 34C
支付成功,但服务端一直收不到支付通知。
在 CSDN 论坛上看到有人说改成 http 就好,没想到真的成功了。
难道都 2018 年了这个关键通知竟然不支持 https ?
还是说不支持使用 Let's Encrypt 的 https ?
13071 次点击
所在节点    问与答
38 条回复
uqf0663
2018-07-01 01:38:36 +08:00
可以的,微信支付后台产品设置那里你得选 https
34C
2018-07-01 01:43:02 +08:00
@uqf0663

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

你说的是这个配置嘛?这里有配置 https 的,没用;
而这里保留只 https 而 notify_url 改成 http 一样可以通知成功,不知道啥情况
airyland
2018-07-01 07:22:27 +08:00
用 lets encrypt 证书的地址做为回调很久了,并没有遇到问题。
phpcxy
2018-07-01 07:23:51 +08:00
我也是用 Let ' s Encrypt,也是改为 http 才能收到通知。我怀疑是自己 nginx 配置问题,不过那个项目已经凉了,最后也没搞啦。
vacker
2018-07-01 08:34:58 +08:00
我也是用的 HTTPS 啊,证书也是 let ’ s encrypt 一年多了现在正常使用,稳如狗。肯定是你什么地方配置没对。
34C
2018-07-01 09:31:49 +08:00
@airyland @vacker 能不能分享一下 SSL 配置?
vacker
2018-07-01 10:37:50 +08:00
@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
2018-07-01 10:40:22 +08:00
之前似乎看过一篇帖子,微信好像把 TLS 版本限制为比较新的版本( TLS 1.2 / TLS 1.3 ),不支持较旧的版本,但找了一下找不到了。
ss098
2018-07-01 10:42:36 +08:00
搞错了,和这个案例的场景不太一样。

/t/458701
mydns
2018-07-01 11:02:24 +08:00
支持

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

return 301 https://$host$request_uri;
hlwjia
2018-07-01 15:34:39 +08:00
把你的配置贴出来呀

那么多人用了那么久的都没问题
34C
2018-07-01 15:47:57 +08:00
hlwjia
2018-07-01 15:49:13 +08:00
@34C 有一个可能,是不是小程序,是不是虚拟支付?
34C
2018-07-01 15:54:49 +08:00
@hlwjia

不是,我没做小程序支付,做的是公众号内 JSAPI 的支付,整个支付流程都走通了,就是支付通知收不到,
什么都不动,把 notify url 改成 http 的就能收到,改回 https 又不行,
换个别的 url 只要是 https 也不行,
服务器日志压根没收到任何请求,
而且同个域名的 https 有别的接口给公众号做自动回复,每天几千次请求都正常,唯独收不到支付通知,
蛋疼得要命
xi_lin
2018-07-01 17:03:06 +08:00
https 肯定支持
https://www.geocerts.com/ssl_checker
看看是不是证书链的问题
vacker
2018-07-01 17:20:44 +08:00
@34C 我的站检测结果是 A,我是 Linux,试试是否和你 window 环境有关

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/467152

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX