123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 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();
- /// <summary>
- /// 获取网站支付链接
- /// </summary>
- /// <param name="body">商品描述</param>
- /// <param name="totalAmount">总金额</param>
- /// <param name="outTradeNo">订单信息</param>
- /// <param name="attach">附加数据</param>
- /// <param name="deviceInfo">设备信息</param>
- /// <returns></returns>
- 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());
- }
- /// <summary>
- /// 获取手机网站支付链接
- /// </summary>
- /// <param name="body">商品描述</param>
- /// <param name="totalAmount">总金额</param>
- /// <param name="outTradeNo">订单信息</param>
- /// <param name="attach">附加数据</param>
- /// <param name="deviceInfo">设备信息</param>
- /// <returns></returns>
- 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());
- }
- /// <summary>
- /// 查询订单获取json
- /// </summary>
- /// <param name="outTradeNo"></param>
- /// <returns></returns>
- public async Task<WxPayData> OrderQuery(string outTradeNo)
- {
- WxPayData data = new WxPayData();
- data.SetValue("out_trade_no", outTradeNo);//商品描述
- WxPayData result = await _wxPayApi.OrderQuery(data);
- return result;
- }
- /// <summary>
- /// 查询退款单获取json
- /// </summary>
- /// <param name="outTradeNo"></param>
- /// <returns></returns>
- public async Task<string> 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<string, object> map)
- {
- string buff = "";
- foreach (KeyValuePair<string, object> pair in map)
- {
- buff += pair.Key + "=" + pair.Value + "&";
- }
- buff = buff.Trim('&');
- return buff;
- }
- }
- }
|