Closed zhougangnj closed 5 years ago
1、看一下是不是证书访问权限的问题?需要微信提供的p12(pfx)证书。 2、看提示是不是OpenSSL有这个强制的需求? 3、建议多换几个不同环境的Linux系统(网络环境、系统环境都不一样),看一下是否还有问题。
对了,顺便看一下企业支付是否也有同样的问题。
我是在.net core的docker中执行过支付和退款,共同有的问题是随机字符串报错,再说说退款吧,我是自己实现的,基于httpclient
string data = packageReqHandler.ParseXML();
var cer = new X509Certificate2(mchsetting.CertPath, mchsetting.Password,X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(cer);
HttpClient client = new HttpClient(handler);
var content = new StringContent(data, Encoding.UTF8);
var request = await client.PostAsync($"https://api.mch.weixin.qq.com/secapi/pay/refund", content);
var response = await request.Content.ReadAsStreamAsync();
var xmlDoc = new XmlDocument();
xmlDoc.Load(response);
return xmlDoc;
@jonechenug 上述代码时可用的?
可以用,已经测试过了,退过很多次款了
@jonechenug 你上面代码,是docker容器的linux(centos)下运行的吗?我们的代码好像跟你的类似,不行
@zhougangnj 官方的docker是在debian8下执行的(也就是说ubuntu系也可以),在windows环境的vs中也测试过,所以不可能是系统的原因,检查证书的路径是否正确,证书的密码是否正确
@zhougangnj 上面 @jonechenug 的代码你试过了吗?
@lishewen 这个问题你那边有测试过吗?
我们现在也遇见了相同的问题,为已经尝试了重新编译curl版本,在centos7下使用curl -V查看到的是 curl 7.56.1 (x86_64-pc-linux-gnu) libcurl/7.56.1 OpenSSL/1.0.2l zlib/1.2.7 Release-Date: 2017-10-23 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy
本以为这样就可以将NSS改为Openssl,但当我重试时,系统依然提示 The handler does not support client authentication certificates with this combination of libcurl (7.56.1) and its SSL backend ("NSS/3.28.4"). 很昏
@wangsijun1986 上面 @jonechenug 提供的代码有事过吗?
string data = packageReqHandler.ParseXML();
var cer = new X509Certificate2(mchsetting.CertPath, mchsetting.Password,X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(cer);
HttpClient client = new HttpClient(handler);
var content = new StringContent(data, Encoding.UTF8);
var request = await client.PostAsync($"https://api.mch.weixin.qq.com/secapi/pay/refund", content);
var response = await request.Content.ReadAsStreamAsync();
var xmlDoc = new XmlDocument();
xmlDoc.Load(response);
return xmlDoc;
@JeffreySu @jonechenug
实测centos7不可用,netcore 2.0.
var request = await client.PostAsync($"https://api.mch.weixin.qq.com/secapi/pay/refund", content);
这句一样报相同错误
@lishewen 我已经将curl切换到安装的最新版了,也对服务进行了重启,但是dotnet还是使用的老版本
dotnet依然报错 The handler does not support client authentication certificates with this combination of libcurl (7.29.0) and its SSL backend ("NSS/3.28.4").
@wuball 你的错误信息显示还在使用 7.29.0 的lib so,就是说你bash下的cli指令是更新了,但dotnet调用的还是老的lib,一般这个是path问题
@lishewen 对呀,这个问题我搜不到dotnet跟这个path的关联处在哪,不知道从哪下手更改
@wuball 去翻下源码吧,net core是开源的
或者直接拉取官方的docker环境配置,省心
@lishewen 好的谢谢你的参考
.net core在扫码支付后,微信退款操作,httpclient需要证书,类似代码如下: X509Certificate cert = new X509Certificate(byteArr.ToArray(), password); handler.ClientCertificates.Add(cert);
在linux下会报 The libcurl library in use (7.29.0) and its SSL backend ("NSS/3.19.1 Basic ECC") do not support custom handling of certificates. A libcurl built with OpenSSL is required.
在windows下没有问题
请问是什么问题