Apple 2017年1月1号起要求Appstore 上线的应用都必须使用 https 加密请求协议,在二月份又改为建议 从 http 升级为 https 协议,此为背景。

公司做的APP同时在App Store和安卓应用市场上了线。应要求,我们也将协议升级为https。由于自制https证书不能用于支付宝请求协议,故从阿里云购买的证书服务。升级为https之后碰到了诸多问题。

1.支付宝微信支付成功却收不到notify回调的情况。

支付notify_url 要求回调时 url 不得带任何参数,如果请求为 https 证书必须由认证机构发放,自制证书无效。

微信要求必须为80端口,那么回调请求就应该为http请求。

项目由nginx加tomcat搭建,部署在ECS Linux 上面。那么支付请求如下

1)APP发起支付请求——>

2)支付宝确认签名,如果正确则支付成功——>

3)支付宝给notify_url 发异步通知——>

4)服务器收到异步通知,确认订单状态,结束此次支付请求。

第一步是APP发起请求调用支付宝的接口然后支付宝确认签名验证成功后划款。

问题出在第三步,支付宝给请求支付时预先配好的notify_url 发送异步通知时出现了问题,服务器没有收到异步通知。ngnix 和 tomcat 日志均未显示 支付宝的异步通知请求。在这里可能出现收不到回调的情况有这几种可能:

1》请求协议的问题(http,https)有可能是证书配置出现问题,但是浏览器访问网站都加上了绿色的安全锁,这一点可以排除

2》服务器防火墙配置问题,ESC 的防火墙(iptables)是在阿里云的控制台配置的,在安全组规则公网配置里面,这个默认配置就可以了,不用做改动。

3》nginx 配置问题,nginx做代理服务器请求没有正确转发至后台。这一点我觉得可能性最大。有可能是配置问题导致支付宝回调失败。

首先验证一下配置好证书之后网站是否能够通过 https 校验

这里推荐一个强 https 校验网站,比浏览器校验更加严格

这是阿里建议的ssl配置证书

1 # HTTPS server 2 # server { 3 # listen 443; 4 # server_name localhost; 5 # ssl on; 6 # ssl_certificate cert.pem; 7 # ssl_certificate_key cert.key; 8 # ssl_session_timeout 5m; 9 # ssl_protocols SSLv2 SSLv3 TLSv1; 10 # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 11 # ssl_prefer_server_ciphers on; 12 # location / { 13 # 14 # 15 #} 16 #}

可以看到此配置只配置了 443 端口监听,443 端口为 https 的默认请求端口。这样的话微信支付回调肯定就收不到了。于是我将配置改为

# HTTPS server # #server { # listen 80; # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols TLSv1.1 TLSv1.2; # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; # ssl_prefer_server_ciphers on; # location / { # # #} #}

如上,这样nginx 就可以同时支持 http 和 https 请求了。保证微信可以正常支付,但是支付宝还是不行。

项目服务器支持两个项目的线上运营,nginx 采用的虚拟主机配置。也就是说同一台服务器共用https的证书。这个需要开启nginx 的sni服务。查看状态进入nginx安装目录下输入命令:

sbin/nginx -V

nginx version: nginx/1.6.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)

TLS SNI support enabled

configure arguments: --prefix=/usr/local/webserver/nginx --with-openssl=/usr/local/openssl/openssl-1.0.1g/ --with-http_stub_status_module --with-htt p_ssl_module --with-pcre=/usr/local/tools/pcre/ --add-module=/usr/local/tools/packages/echo-nginx-module-0.60/

可以看到

TLS SNI support enabled

已经开启。如果没有开启,将 nginx 加入 openssl 重新 make && make install 。

然后这个时候在测试支付,微信可以正常支付并受到回调了。这样APP微信支付和公众号支付两条路就走通了。

剩下支付宝支付还是没有收到回调。于是我把支付宝回调调整为http请求在nginx中过滤,如果为 notify请求则重写为 http://notify_url,将项目打包到测试环境测试,果然成功了。剩下的就是将项目打包正式版本,更新了。

这次升级主要是 nginx 的证书配置和 http 和 https 的限制。遇到这样网络请求的问题,将请求全过程的从头到尾的过程多想几遍,再按照请求的流程一步一步排查问题。缩小问题的范围,问题就慢慢浮现出水面了。

从 http 升级到 https 过程中遇到的一些问题相关推荐

  1. Unity4.x项目升级Unity5.0过程中出现的各种常见问题

    最近整理Unity4.x项目升级Unity5.0过程中出现的各种常见问题,与大家共享.1:Unity4.x项目中3D模型其材质丢失,成为"白模"?解决方案:手工重新赋值材质贴图. ...

  2. 网站如何从http升级成https

    基本概念: HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少. HT ...

  3. 【0xC1900101】BOOT过程中的SAFE_OS阶段安装win10失败的解决方法

    错误详情 博主在win7升级win10的过程中出现错误,安装失败,错误代码:0xC1900101 - 0x20017 错误提示:在BOOT操作过程中的SAFE_OS阶段,安装失败,出现错误. 如图: ...

  4. Ubuntu 升级npm 以及安装cross-env 过程中遇到的问题

    npm 安装过程中出现的问题: 1. npm的升级: npm升级流程如下: sudo npm cache clean -f sudo npm install -g n sudo n stable 升级 ...

  5. Confluence 6 在升级过程中查看合并日志

    为了监控升级的过程,你应该查看 application log 日志中的输出. 通常日志经常将会显示多个日志实例,这个实例是定义在日志的 INFO 级别的,通常格式如下: WikiToXhtmlMig ...

  6. node安装升级过程中遇到的问题汇总

    一.Node already installed, it's just not linked 第一步:sudo chown -R $(whoami) $(brew --prefix)/* 第二步:br ...

  7. 从JDK 6升级到JDK 7过程中遇到的一个问题(卸载rpm)

    先前系统上有JDK 6的安装,由于要部署Facebook的Presto做一些测试,需要将其升级到JDK 7,但是在安装的过程中遇到以下的问题: [plain] view plaincopy [root ...

  8. 在线升级,下载升级包过程中提示网络异常导致升级失败。

    问题描述: 连接wifi,选择在线升级,在现在升级包过程中,提示网络异常,导致升级失败. 问题解决: 首先分析mainlog中对应时间点上下文的log.通过搜索rssi,查看当前wifi连接状态,如下 ...

  9. 服务器2012还原系统,Windows Server 2012升级R2过程中意外关闭恢复原系统方法

    2012升级R2过程中强制关闭了计算机,导致再次启动后蓝屏提示"BAD_SYSTEM_CONFIG_INFO".用2012安装盘进入尝试修复失败(安全模式什么的都不用想),进入命令 ...

最新文章

  1. 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
  2. 一种比较省内存的稀疏矩阵Python存储方案
  3. Android 监听ScrollView的滑动
  4. sqlserver tds协议学习_数据安全交换协议来了,或将推动AI大步迈向3.0时代
  5. struts2的处理流程
  6. github持续集成的设置_如何使用GitHub Actions和Puppeteer建立持续集成管道
  7. 鸿蒙os事例代码,鸿蒙HarmonyOS App开发造轮子之自定义圆形图片组件的实例代码
  8. wow 私服trinitycore
  9. retrofit2 不创建对象直接返回字符串
  10. 关于元素水平垂直居中的那些事?
  11. 公式、图片、表格等转latex
  12. thinkphp+vue傻瓜式PS级可视化自助建站系统平台版
  13. remote debugger java,VS2015 远程调试:Remote Debugger
  14. #6.3四维理论的数学模式
  15. 剪切caspase3_Caspase-3活性检测
  16. Centos7 ping 不通百度 可能是网络配置问题
  17. 曼昆宏观经济学第8版笔记及课后答案
  18. 2021年电工(中级)试题及解析及电工(中级)模拟试题
  19. shell脚本:#和$
  20. Android SDK Manager详解

热门文章

  1. every和some的区别
  2. 什么是工业互联网?它从哪里来,要到哪里去?
  3. 八一钢铁:宝钢入主,中报业绩大幅增长
  4. 【机器学习算法】支持向量机(support Vector Machine,SVM)
  5. 将java文件打成jar包
  6. 教你如何用拼音输入法怎么打出来不认识的字
  7. 自动化测试——QQ邮箱登陆
  8. 打开 WORD 报错“无法创建工作文件, 请检查临时环境变量”
  9. 简单的flask+nginx项目助你开阔思路
  10. 我以为是个正经程序猿,结果是个中二段子精