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;
}
}
}