`

微信支付或者支付宝支付验签太慢

    博客分类:
  • java
 
阅读更多

调用微信支付或者支付宝验签的时候会很慢,发现程序没有问题,主要是请求到返回这段时间太长。
具体如下: prepayInfo->prepay response 大概用了6秒的时间
 
优化前
[08 14:10:51,081 INFO ] [http--8081-3$598667353] util.WxmppayUtil - Wxmppay source str:
[08 14:10:51,171 INFO ] [http--8081-3$598667353] util.WxmppayUtil - Wxmppay xml str:
[08 14:10:51,171 INFO ] [http--8081-3$598667353] util.WxmppayUtil - Wxpay request prepayInfo:
[08 14:10:56,779 INFO ] [http--8081-3$598667353] util.WxmppayUtil - WX prepay response:
[08 14:10:56,800 INFO ] [http--8081-3$598667353] util.WxmppayUtil - Wxpay prepay id str: wx2017020814105685b74eb4c00453577375
[08 14:10:56,800 INFO ] [http--8081-3$598667353] util.WxmppayUtil - Wxmppay source str: appId=wx9006127d7b209213&nonceStr=dcdgdihjeccjdehbagaihfficgbagaei&package=prepay_id=wx2017020814105685b74eb4c00453577375&signType=MD5&timeStamp=1486534256&key=j5oSq7yOVet9DiWWZOcSTbqzm1KhKOZZ





安装nslook dig tcpdump 工具查看域名解析部分


yum install bind-utils

yum install tcpdump


[root@localhost opt]# dig www.baidu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16260
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.            IN    A

;; ANSWER SECTION:
www.baidu.com.        975    IN    CNAME    www.a.shifen.com.
www.a.shifen.com.    22    IN    A    220.181.112.244
www.a.shifen.com.    22    IN    A    220.181.111.188

;; Query time: 0 msec
;; SERVER: 218.30.26.68#53(218.30.26.68)
;; WHEN: Wed Feb  8 14:21:15 2017
;; MSG SIZE  rcvd: 90



[root@localhost opt]# dig api.mch.weixin.qq.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> api.mch.weixin.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49081
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api.mch.weixin.qq.com.        IN    A

;; ANSWER SECTION:
api.mch.weixin.qq.com.    123    IN    CNAME    forward.qq.com.
forward.qq.com.        76    IN    A    123.151.79.109
forward.qq.com.        76    IN    A    123.151.71.149

;; Query time: 1 msec
;; SERVER: 218.30.26.68#53(218.30.26.68)
;; WHEN: Wed Feb  8 14:21:42 2017
;; MSG SIZE  rcvd: 93






[root@localhost opt]# nslookup api.mch.weixin.qq.com
Server:        218.30.26.68
Address:    218.30.26.68#53

Non-authoritative answer:
api.mch.weixin.qq.com    canonical name = forward.qq.com.
Name:    forward.qq.com
Address: 123.151.79.109
Name:    forward.qq.com
Address: 123.151.71.149




[root@localhost opt]# nslookup www.baidu.com
Server:        218.30.26.68
Address:    218.30.26.68#53

Non-authoritative answer:
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 220.181.112.244
Name:    www.a.shifen.com
Address: 220.181.111.188






通过wget分析域名解析的时间, 发现每次都会去域名服务器解析。


具体功过查看dns查询包
tcpdump -i eth1  host 8.8.8.8 -X -e -nn



后来安装本地域名缓存, centos下安装命令如下:

yum install nscd

vim /etc/nscd.conf
service nscd status

service nscd restart


安装后通过wget再次访问时速度明显加快, 但是通过程序来访问还是很慢。

 

 


代码中是通过来发送请求的, PoolingHttpClientConnectionManager 初始化没有传入DnsResolver,默认使用的是 SystemDefaultDnsResolver,具体代码如下:

 

 

 

    public static final SystemDefaultDnsResolver INSTANCE = new SystemDefaultDnsResolver();

    @Override
    public InetAddress[] resolve(final String host) throws UnknownHostException {
        return InetAddress.getAllByName(host);
    }
 
    看到上面代码最终是调用 InerAddress.getAllByName(host); 方法



优化后

[08 16:12:02,539 INFO ] [http--8081-11$762658730] util.WxmppayUtil - Wxmppay source str:
[08 16:12:02,540 INFO ] [http--8081-11$762658730] util.WxmppayUtil - Wxmppay xml str:
[08 16:12:02,541 INFO ] [http--8081-11$762658730] util.WxmppayUtil - Wxpay request prepayInfo:
[08 16:12:02,542 INFO ] [http--8081-11$762658730] util.CwCachedDnsResolver - get address from cached dns
[08 16:12:02,806 INFO ] [http--8081-11$762658730] util.WxmppayUtil - WX prepay response:
[08 16:12:02,811 INFO ] [http--8081-11$762658730] util.WxmppayUtil - Wxpay prepay id str: wx20170208161202b47a6324710779458744
[08 16:12:02,811 INFO ] [http--8081-11$762658730] util.WxmppayUtil - Wxmppay source str:

 

分享到:
评论

相关推荐

    VB.net微信、支付宝扫码支付源码.rar

    支付宝APPID 、支付宝验签密钥文件;订单编号、支付金额,就可以完成以下微信、支付宝支付。 1、生成微信支付二维码Native支付; 2、扫微信钱包内的“付款码”直接完成支付; 3、根据微信支付订单号查询支付状态; 4...

    微信支付+支付宝支付

    在标题“微信支付+支付宝支付”中,我们可以理解这是一个包含两部分的项目:微信支付模块和支付宝支付模块。 1. **微信支付**: 微信支付的接入需要注册成为微信支付商户,获取到APP ID、商户号(MCHID)、API密钥...

    微信支付宝扫码支付DELPHI示例源码.rar

    支付宝APPID 、支付宝验签密钥文件;订单编号、支付金额,就可以完成以下微信、支付宝支付。 1、生成微信支付二维码Native支付; 2、扫微信钱包内的“付款码”直接完成支付; 3、根据微信支付订单号查询支付状态; 4...

    PHP实现微信支付,支付宝支付对接

    本资源采用了PHP语言开发,CI框架,实现了微信和支付宝支付对接,其中微信支付包含两种支付方式;1.微信中访问链接直接支付,2.浏览器中(PC或H5)访问链接,产生支付二维码使用微信扫码支付。支付宝也包含两种支付...

    golang支付合集(包括微信支付,支付宝,)

    "golang支付合集(包括微信支付,支付宝,)"是一个专为Go语言开发者设计的支付集成库,旨在简化在项目中集成微信支付和支付宝的过程。这个合集不仅提供了基本的支付接口调用,还可能包含订单管理、退款、通知处理等...

    易语言微信支付&amp;支付宝支付到个人账户源代码

    在IT行业中,开发支付功能是至关重要的,尤其对于电商平台或者服务提供商来说。本文将深入探讨易语言实现微信支付和支付宝支付到个人账户的源代码相关知识点。 首先,我们需要理解“易语言”(EasyLanguage)是一种...

    TCP易语言socket微信支付和支付宝支付源码

    "TCP易语言socket微信支付和支付宝支付源码"是一个基于易语言的项目,它利用TCP Socket技术实现了与微信支付和支付宝支付接口的高效通信。下面将详细阐述相关知识点。 首先,TCP(Transmission Control Protocol)...

    微信支付、支付宝支付.zip

    微信支付、支付宝支付,完整项目

    DELPHI微信、支付宝支付(DLL源码)_delphi微信支付开发,delphi微信付款.zip

    这个压缩包"DELPHI微信、支付宝支付(DLL源码)_delphi微信支付开发,delphi微信付款.zip"显然是为了解决这一问题,提供了DLL源码,帮助开发者实现Delphi环境下微信和支付宝的支付功能。 首先,我们来了解DLL(动态...

    javaWeb微信支付+支付宝支付+银联支付

    在JavaWeb开发中,集成微信支付、支付宝支付和银联支付是常见的支付方式,这些支付方式为用户提供了多样化的支付选择,增强了用户体验。下面将详细解释这三个支付平台的集成技术及其关键知识点。 1. **微信支付...

    纯ASP微信支付V3版源码,不需要第三方中转,微信支付asp接口,ASP支付宝接口3.0版本,最新版

    在IT行业中,微信支付和支付宝接口是常见的在线支付方式,尤其在ASP(Active Server Pages)环境中,这些接口的实现对于Web开发者来说尤为重要。本文将详细解释"纯ASP微信支付V3版源码"和"ASP支付宝接口2.0版本"的...

    C#微信、支付宝扫码支付源码.rar

    支付宝APPID 、支付宝验签密钥文件;订单编号、支付金额,就可以完成以下微信、支付宝支付。 1、生成微信支付二维码Native支付; 2、扫微信钱包内的“付款码”直接完成支付; 3、根据微信支付订单号查询支付状态; 4...

    VB6微信支付&amp;支付宝支付到个人账户源代码

    "VB6微信支付&支付宝支付到个人账户源代码"这个资源提供了在VB6环境中实现微信支付和支付宝支付功能的源代码,这对于那些希望在自己的应用程序中集成这两种主流支付方式的开发者来说非常有价值。 微信支付是腾讯...

    微信支付与支付宝支付接口源码

    5. **验签**:为了确保数据安全,支付宝和微信支付都会对请求和响应进行签名,开发者需要正确实现验签逻辑,防止数据被篡改。 理解并实际操作这两种支付接口源码,开发者可以快速集成支付功能到自己的应用程序中,...

    QT 支付宝,微信支付

    在IT行业中,集成第三方支付平台,如支付宝和微信支付,是常见的需求,特别是在电商和移动应用领域。在本文中,我们将深入探讨如何在QT框架下实现支付宝和微信支付的集成,以及可能遇到的问题。 首先,从提供的文件...

    IOS版微信支付、支付宝支付

    在iOS应用开发中,集成微信支付和支付宝支付是常见的需求,尤其对于电商平台或者服务类应用。这个名为"PayDemo"的项目集成了这两种支付方式,提供了详细的实现过程,旨在帮助开发者理解和实施移动支付功能。 首先,...

    PB9.0 微信、支付宝官方支付

    本项目以"PB9.0 微信、支付宝官方支付"为主题,主要讲解如何利用PB9.0来实现与微信、支付宝两大主流支付平台的接口对接。 首先,我们要理解的是`PB9`,即PowerBuilder 9.0,它是Sybase公司的一个可视化编程工具,...

    VB6微信支付_支付宝支付到个人账户源代码.rar

    VB6微信支付_支付宝支付到个人账户源代码

    Java SpringBoot 支付宝和微信支付整合

    本教程将深入探讨如何在Java SpringBoot框架中整合支付宝和微信支付,以便为用户提供便捷、安全的支付体验。我们将关注扫码支付、APP支付以及JSAPI支付的实现。 首先,让我们了解SpringBoot框架。SpringBoot是基于...

    SpringBoot集成H5微信支付宝支付

    本文将详细讲解如何使用SpringBoot框架集成H5版的微信和支付宝支付功能,以实现安全、便捷的在线交易。 首先,我们需要理解SpringBoot。它是Spring框架的一个轻量级衍生品,简化了初始化和配置过程,使得开发者可以...

Global site tag (gtag.js) - Google Analytics