这是个坑爹的报错,但是证明了开发人员没有仔细看官方的DEMO。官方的DEMO里面不仅有代码示例,还有一个word文档,专门讲了遇到这种情况如何处理。
一、背景
开发环境是Windows Server
,写的是C#
的代码,用到了微信支付,当然是用到了企业付款
的功能,下载安装了API证书
,也因为近期微信根证书更换的事情,所以为了保险,也安装了微信支付提供的那两个CA证书
,但是仍然报错,直接报请求被中止,未能创建 SSL/TLS 安全通道
,这其实就意味着根本没有发起支付,所以推测应该是环境出了问题,但是环境能有啥问题啊,一共就2个证书,要么是CA
那种根证书,要么就是API证书
,翻来覆去安装了数十遍,一点效果都没有。
二、解决方案
一不小心,重新看了一下DEMO,看到了里面的文档,文档里面详细的介绍了解决方案。这个文档地址在微信支付提供的Demo外链,下载之后里面有解决方案,自己看。
实战的步骤是:
(1)打开mmc
;
(2)选择文件
-添加/删除管理单元
,左边选择证书
,点击添加
,选择计算机账户
,点击下一步,选择本地计算机
(默认选择),点击完成后,再点确定
。
(3)右键个人
-证书
,出现导入证书界面,安装步骤导入.p12
格式的证书,导完之后右边出现刚刚导入的证书。
(4)到这一步,官方让你再试一试看看,我试了仍然不行,所以接着往下配置。
(5)去微软官方下载一个叫做WinHttpCertCfg.exe
的安装文件,事实上你打开这个网址它就自动下载了。下载之后安装到服务器上。
(6)在64位系统下,安装之后工具在C:\Program Files (x86)\Windows Resource Kits\Tools
路径下,使用CD
指令定位到该目录下。
(7)使用刚刚安装的工具,给指定用户开证书的访问权限,这是创造奇迹的命令:
winhttpcertcfg.exe -g -c LOCAL_MACHINE\MY -s "证书名称,一般是公司名称" -a "NETWORKSERVICE"
(8)上面的证书名称,官方提示你了,你双击你安装的那个证书,看看颁发给
那个字段是什么值这里就填写什么。
(9)可是你很可能和我一样,上面命令执行后发现虽然提示成功,但是仍然没有用,怎么办?接着把其他两个用户也授权试试吧。事实上你在执行下面第一条命令的时候有失败提示,无所谓,接着第二条,提示成功,这个时候再试试程序能够正常企业付款。
winhttpcertcfg.exe -g -c LOCAL_MACHINE\MY -s "证书名称,一般是公司名称" -a "ASPNET"
winhttpcertcfg.exe -g -c LOCAL_MACHINE\MY -s "证书名称,一般是公司名称" -a "Authenticated Users"
(10)如果还不行,那你继续战斗吧。我歇会。