C# 开发微信公众号现金红包发送,解决"IP地址非你在商户平台设置的可用IP地址"和”未能创建 SSL/TLS 安全通道“ 问题
近期在做涉及一个微信公众号微信发送红包的项目,参考微信支付文档,没有什么特别的。需要注意的是:
1、微信发送红包需要证书验证,下载API证书放至程序指定目录;
2、绑定IP,需要在 ”现金红包-产品设置-调用IP地址“ 里面设置,一定要IP地址,且程序发送所在服务器提交页面不能带有端口号,否则提示: IP地址非你在商户平台设置的可用IP地址(目前我测试是这么个情况)。这里如果是存放在虚拟主机,也不要用域名解析后的地址,可能也会提示“IP地址非你在商户平台设置的可用IP地址”这个错误。建议是:建立一个网页传到虚拟主机,获取主机的服务器IP地址即可。
string AddressIP = string.Empty;
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
{
AddressIP = _IPAddress.ToString();
}
}
Response.Write(AddressIP);
3、读取证书 这里如果使用的是framework4.0以下, 那么可能不会有tls11和tls12 需要强制转换一下即可 。另外一定要用
X509Certificate2 cer = new X509Certificate2(cert, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
方式读取,否则会提示 ”未能创建 SSL/TLS 安全通道“
string cert = certPath;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| (SecurityProtocolType)0x300 //Tls11
| (SecurityProtocolType)0xC00; //Tls12
//X509Certificate2 cer = new X509Certificate2(cert, certPassword); //测试线下
//这里很重要 如果提示 未建立SSL和TLS通道 证书必须用这个
X509Certificate2 cer = new X509Certificate2(cert, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);