using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using POSV.Utils; using System.Security.Cryptography.X509Certificates; namespace POSV { /// /// 微信支付接口,官方API:https://pay.weixin.qq.com/wiki/doc/api/index.html /// public static class WxPayV3 { /// /// 统一支付接口 /// 统一支付接口,可接受JSAPI/NATIVE/APP 下预支付订单,返回预支付订单号。NATIVE 支付返回二维码code_url。 /// /// 微信支付需要post的Data数据 /// /// public static UnifiedorderResult Unifiedorder(WxPayV3UnifiedorderRequestData dataInfo, int timeOut = Constant.TIMEOUT) { var urlFormat = "https://api.mch.weixin.qq.com/pay/unifiedorder"; var data = dataInfo.ParseXML();//获取XML //throw new Exception(data.HtmlEncode()); MemoryStream ms = new MemoryStream(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms, timeOut: timeOut); return new UnifiedorderResult(resultXml); } /// /// Native /// /// 开放平台账户的唯一标识 /// 时间戳 /// 商户Id /// 32 位内的随机串,防重发 /// 商品唯一id /// 签名 public static string NativePay(string appId, string timesTamp, string mchId, string nonceStr, string productId, string sign) { var urlFormat = "weixin://wxpay/bizpayurl?sign={0}&appid={1}&mch_id={2}&product_id={3}&time_stamp={4}&nonce_str={5}"; var url = string.Format(urlFormat, sign, appId, mchId, productId, timesTamp, nonceStr); return url; } /// /// 短链接转换接口 /// /// /// public static ShortUrlResult ShortUrl(WxPayV3ShortUrlRequestData dataInfo) { var urlFormat = "https://api.mch.weixin.qq.com/tools/shorturl"; var data = dataInfo.ParseXML(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms); return new ShortUrlResult(resultXml); } /// /// 撤销订单接口 /// /// /// public static ReverseResult Reverse(WxPayV3ReverseRequestData dataInfo) { var urlFormat = "https://api.mch.weixin.qq.com/secapi/pay/reverse"; var data = dataInfo.ParseXML(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms); return new ReverseResult(resultXml); } /// /// 刷卡支付 /// 提交被扫支付 /// /// /// public static MicropayResult MicroPay(WxPayV3MicroPayRequestData dataInfo) { var urlFormat = "https://api.mch.weixin.qq.com/pay/micropay"; var data = dataInfo.ParseXML(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = POSV.Helper.HttpHelper.Post(urlFormat, data); //var resultXml = RequestUtility.HttpPost(urlFormat , null , ms); return new MicropayResult(resultXml); } /// /// 订单查询接口 /// /// /// public static OrderQueryResult OrderQuery(WxPayV3OrderQueryRequestData dataInfo) { var urlFormat = "https://api.mch.weixin.qq.com/pay/orderquery"; var data = dataInfo.ParseXML();//获取XML var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms); return new OrderQueryResult(resultXml); } /// /// 关闭订单接口 /// /// 关闭订单需要post的xml数据 /// public static CloseOrderResult CloseOrder(WxPayV3CloseOrderRequestData dataInfo) { var urlFormat = "https://api.mch.weixin.qq.com/pay/closeorder"; var data = dataInfo.ParseXML(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms); return new CloseOrderResult(resultXml); } /// /// 退款接口 /// /// /// public static OrderRefundResult OrderRefund(WxPayV3OrderRefundRequestData dataInfo, X509Certificate2 cert) { var urlFormat = "https://api.mch.weixin.qq.com/secapi/pay/refund"; var data = dataInfo.ParseXML(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms, null, null, null, cert); return new OrderRefundResult(resultXml); } /// /// 退款查询接口 /// /// /// public static RefundQueryResult RefundQuery(WxPayV3RefundQueryRequestData dataInfo) { var urlFormat = "https://api.mch.weixin.qq.com/pay/refundquery"; var data = dataInfo.ParseXML(); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 var resultXml = RequestUtility.HttpPost(urlFormat, null, ms); return new RefundQueryResult(resultXml); } } }