Esempio n. 1
0
        /// <summary>
        /// 发送交易
        /// </summary>
        /// <param name="parmeter">发送交易实体</param>
        /// <returns></returns>
        public WeiXinPayBackParameters Send(WeiXinPayParameters parmeter)
        {
            var type = parmeter.GetType();

            foreach (var att in type.GetTypeInfo().GetCustomAttributes())
            {
                if (att is TradeAttribute)
                {
                    var        attr   = att as TradeAttribute;
                    HttpClient client = null;
                    //有证书
                    if (attr.RequireCertificate)
                    {
                        //证书路径
                        var certificatePathPro = type.GetProperty("CertificatePath");
                        var certificatePath    = certificatePathPro.GetValue(parmeter).ToString();
                        //证书密码
                        var certificatePasswordPro = type.GetProperty("MchID");
                        var certificatePassword    = certificatePasswordPro.GetValue(parmeter).ToString();
                        var handler = new HttpClientHandler();
                        handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                        handler.SslProtocols             = SslProtocols.Tls12;
                        handler.ClientCertificates.Add(new X509Certificate2(certificatePath, certificatePassword));
                        client = new HttpClient(handler);
                    }
                    else//无证书
                    {
                        client = new HttpClient();
                    }
                    var url      = attr.URL;
                    var response = client.PostAsync(url, new System.Net.Http.StringContent(parmeter.ToXML())).Result;
                    //处理返回异常
                    if (response.StatusCode != System.Net.HttpStatusCode.OK)
                    {
                        throw new WeiXinPayCoreException($"http通迅错误,StatusCode:{response.StatusCode}  内容:{response.RequestMessage.Content}");
                    }
                    var result = response.Content.ReadAsStringAsync().Result;

                    var assembly   = this.GetType().GetTypeInfo().Assembly;
                    var backEntity = Activator.CreateInstance(assembly.GetType($"{type.FullName}Back")) as WeiXinPayBackParameters;
                    backEntity.XMLToEntity(result);
                    return(backEntity);
                }
            }

            return(null);
        }
Esempio n. 2
0
        /// <summary>
        /// 异步发送交易
        /// </summary>
        /// <param name="parmeter">发送交易实体</param>
        /// <returns></returns>
        public async Task <WeiXinPayBackParameters> SendAsync(WeiXinPayParameters parmeter)
        {
            var type = parmeter.GetType();

            foreach (var att in type.GetTypeInfo().GetCustomAttributes())
            {
                if (att is TradeAttribute)
                {
                    var        attr   = att as TradeAttribute;
                    HttpClient client = null;
                    //有证书
                    if (attr.RequireCertificate)
                    {
                        //证书路径
                        var certificatePathPro = type.GetProperty("CertificatePath");
                        var certificatePath    = certificatePathPro.GetValue(parmeter).ToString();
                        //证书密码
                        var certificatePasswordPro = type.GetProperty("MchID");
                        var certificatePassword    = certificatePasswordPro.GetValue(parmeter).ToString();
                        var handler = new HttpClientHandler();
                        handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                        handler.SslProtocols             = SslProtocols.Tls12;
                        handler.ClientCertificates.Add(new X509Certificate2(certificatePath, certificatePassword));
                        client = new HttpClient(handler);
                    }
                    else//无证书
                    {
                        client = new HttpClient();
                    }
                    var url      = attr.URL;
                    var response = await client.PostAsync(url, new StringContent(parmeter.ToXML()));

                    var result = await response.Content.ReadAsStringAsync();

                    var assembly   = this.GetType().GetTypeInfo().Assembly;
                    var backEntity = Activator.CreateInstance(assembly.GetType($"{this.GetType().FullName}Back")) as WeiXinPayBackParameters;
                    backEntity.XMLToEntity(result);
                    return(backEntity);
                }
            }
            return(null);
        }