上一篇写了《Core3.1 微信v3 JSAPI支付》,这个属于v3的接口规则,现在研究了下退款的接口我写的时候它属于v2接口规则文档。但凡微信支付文档里面写清楚点我也不会在这里记录一下。
接口文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_9.shtml 现在看看是v3接口的了 我的天,他们在逗我玩一样,v2的写好了v3就放出来了。命途多舛啊。 v2请求的是xml文档格式的,这里又要温习一下旧知识了。
当时我记得清清楚楚 就说了请求要加签名,证书双向验证。官网文档没有写。Net的怎么加载证书 就说了一句windows下面直接安装证书就好了。结果 都是Bad Request 还是人工咨询吧 到最后才把代码找给我。我问人工客户地址给我看看,他说没有地址(肺都气炸。。。)
3、代码这是封装的一个请求 ,代码加在上篇文章里面的那个请求里面
/// <summary> ///postXML请求 /// </summary> /// <param>地址</param> /// <param>参数(json格式)</param> /// <param>p12文件路径</param> /// <param>密码</param> /// <returns>string</returns> public string PostXml(string url, string requestString,string path, string certPwd) { var handler = new HttpClientHandler { ClientCertificateOptions = ClientCertificateOption.Manual, SslProtocols = SslProtocols.Tls12, ServerCertificateCustomValidationCallback = (x, y, z, m) => true, }; //var path = Path.Combine(AppContext.BaseDirectory, "cert\\iot3rd.p12"); handler.ClientCertificates.Add(new X509Certificate2(path, certPwd)); var client = new HttpClient(handler); var content = new StringContent(requestString); content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); //GetAwaiter().GetResult(); var httpResponseMessage = client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result; return httpResponseMessage; }