using System.ComponentModel.DataAnnotations.Schema; using System.Data.Common; using System.Linq; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace WingPaymentService.Common.WeChat { public class WxPayNativePay { private WxPayApi _wxPayApi = new WxPayApi(); /// /// 获取网站支付链接 /// /// 商品描述 /// 总金额 /// 订单信息 /// 附加数据 /// 设备信息 /// public async Task<(string,string)> GetWebPayUrl(string body, int totalAmount, string outTradeNo, string recordCode, string attach, string deviceInfo) { WxPayData data = new WxPayData(); data.SetValue("body", body);//商品描述 data.SetValue("attach", attach);//附加数据 data.SetValue("out_trade_no", outTradeNo);//随机字符串 data.SetValue("total_fee", totalAmount);//总金额 //将当前服务器时间转换为北京时间(微信接口只接受北京时间) var startBeijingTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZoneInfo.Local.Id, "China Standard Time"); data.SetValue("time_start", startBeijingTime.ToString("yyyyMMddHHmmss"));//交易起始时间 data.SetValue("time_expire", startBeijingTime.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间 //data.SetValue("goods_tag", "jjj");//商品标记 data.SetValue("trade_type", "NATIVE");//交易类型 data.SetValue("device_info", deviceInfo); data.SetValue("pay_record_code", recordCode); WxPayData result = await _wxPayApi.UnifiedOrder(data);//调用统一下单接口 var errorCode = result.GetValue("err_code_des")?.ToString(); if (!string.IsNullOrWhiteSpace(errorCode)) { throw new Exception(errorCode); } string url = result.GetValue("code_url")?.ToString();//获取二维码链接 return (url, data.ToJson()); } /// /// 获取手机网站支付链接 /// /// 商品描述 /// 总金额 /// 订单信息 /// 附加数据 /// 设备信息 /// public async Task<(string,string)> GetWapPayUrl(string body, int totalAmount, string outTradeNo, string recordCode, string attach, string deviceInfo) { WxPayData data = new WxPayData(); data.SetValue("body", body);//商品描述 data.SetValue("attach", attach);//附加数据 data.SetValue("out_trade_no", outTradeNo);//随机字符串 data.SetValue("total_fee", totalAmount);//总金额 //将当前服务器时间转换为北京时间(微信接口只接受北京时间) var startBeijingTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZoneInfo.Local.Id, "China Standard Time"); data.SetValue("time_start", startBeijingTime.ToString("yyyyMMddHHmmss"));//交易起始时间 data.SetValue("time_expire", startBeijingTime.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间 //data.SetValue("goods_tag", "jjj");//商品标记 data.SetValue("trade_type", "MWEB");//交易类型 data.SetValue("device_info", deviceInfo); data.SetValue("pay_record_code", recordCode); WxPayData result = await _wxPayApi.UnifiedOrder(data);//调用统一下单接口 var errorCode = result.GetValue("err_code_des")?.ToString(); if (!string.IsNullOrWhiteSpace(errorCode)) { throw new Exception(errorCode); } string url = result.GetValue("mweb_url")?.ToString();//wap支付链接 return (url, data.ToJson()); } /// /// 查询订单获取json /// /// /// public async Task OrderQuery(string outTradeNo) { WxPayData data = new WxPayData(); data.SetValue("out_trade_no", outTradeNo);//商品描述 WxPayData result = await _wxPayApi.OrderQuery(data); return result; } /// /// 查询退款单获取json /// /// /// public async Task RefundQuery(string outTradeNo) { WxPayData data = new WxPayData(); data.SetValue("out_trade_no", outTradeNo);//商品描述 WxPayData result = await _wxPayApi.RefundQuery(data); return result.ToJson(); } /** * 参数数组转换为url格式 * @param map 参数名与参数值的映射表 * @return URL字符串 */ private string ToUrlParams(SortedDictionary map) { string buff = ""; foreach (KeyValuePair pair in map) { buff += pair.Key + "=" + pair.Value + "&"; } buff = buff.Trim('&'); return buff; } } }