WxPayNativePay.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Linq;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. namespace WingPaymentService.Common.WeChat
  6. {
  7. public class WxPayNativePay
  8. {
  9. private WxPayApi _wxPayApi = new WxPayApi();
  10. /// <summary>
  11. /// 获取网站支付链接
  12. /// </summary>
  13. /// <param name="body">商品描述</param>
  14. /// <param name="totalAmount">总金额</param>
  15. /// <param name="outTradeNo">订单信息</param>
  16. /// <param name="attach">附加数据</param>
  17. /// <param name="deviceInfo">设备信息</param>
  18. /// <returns></returns>
  19. public async Task<string> GetWebPayUrl(string body, int totalAmount, string outTradeNo, string attach, string deviceInfo)
  20. {
  21. WxPayData data = new WxPayData();
  22. data.SetValue("body", body);//商品描述
  23. data.SetValue("attach", attach);//附加数据
  24. data.SetValue("out_trade_no", outTradeNo);//随机字符串
  25. data.SetValue("total_fee", totalAmount);//总金额
  26. //将当前服务器时间转换为北京时间(微信接口只接受北京时间)
  27. var startBeijingTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZoneInfo.Local.Id, "China Standard Time");
  28. data.SetValue("time_start", startBeijingTime.ToString("yyyyMMddHHmmss"));//交易起始时间
  29. data.SetValue("time_expire", startBeijingTime.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  30. //data.SetValue("goods_tag", "jjj");//商品标记
  31. data.SetValue("trade_type", "NATIVE");//交易类型
  32. data.SetValue("device_info", deviceInfo);
  33. WxPayData result = await _wxPayApi.UnifiedOrder(data);//调用统一下单接口
  34. var errorCode = result.GetValue("err_code_des")?.ToString();
  35. if (!string.IsNullOrWhiteSpace(errorCode))
  36. {
  37. throw new Exception(errorCode);
  38. }
  39. string url = result.GetValue("code_url")?.ToString();//获取二维码链接
  40. return url;
  41. }
  42. /// <summary>
  43. /// 获取手机网站支付链接
  44. /// </summary>
  45. /// <param name="body">商品描述</param>
  46. /// <param name="totalAmount">总金额</param>
  47. /// <param name="outTradeNo">订单信息</param>
  48. /// <param name="attach">附加数据</param>
  49. /// <param name="deviceInfo">设备信息</param>
  50. /// <returns></returns>
  51. public async Task<string> GetWapPayUrl(string body, int totalAmount, string outTradeNo, string attach, string deviceInfo)
  52. {
  53. WxPayData data = new WxPayData();
  54. data.SetValue("body", body);//商品描述
  55. data.SetValue("attach", attach);//附加数据
  56. data.SetValue("out_trade_no", outTradeNo);//随机字符串
  57. data.SetValue("total_fee", totalAmount);//总金额
  58. //将当前服务器时间转换为北京时间(微信接口只接受北京时间)
  59. var startBeijingTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZoneInfo.Local.Id, "China Standard Time");
  60. data.SetValue("time_start", startBeijingTime.ToString("yyyyMMddHHmmss"));//交易起始时间
  61. data.SetValue("time_expire", startBeijingTime.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  62. //data.SetValue("goods_tag", "jjj");//商品标记
  63. data.SetValue("trade_type", "MWEB");//交易类型
  64. data.SetValue("device_info", deviceInfo);
  65. WxPayData result = await _wxPayApi.UnifiedOrder(data);//调用统一下单接口
  66. var errorCode = result.GetValue("err_code_des")?.ToString();
  67. if (!string.IsNullOrWhiteSpace(errorCode))
  68. {
  69. throw new Exception(errorCode);
  70. }
  71. string url = result.GetValue("mweb_url")?.ToString();//wap支付链接
  72. return url;
  73. }
  74. /// <summary>
  75. /// 查询订单获取json
  76. /// </summary>
  77. /// <param name="outTradeNo"></param>
  78. /// <returns></returns>
  79. public async Task<WxPayData> OrderQuery(string outTradeNo)
  80. {
  81. WxPayData data = new WxPayData();
  82. data.SetValue("out_trade_no", outTradeNo);//商品描述
  83. WxPayData result = await _wxPayApi.OrderQuery(data);
  84. return result;
  85. }
  86. /// <summary>
  87. /// 查询退款单获取json
  88. /// </summary>
  89. /// <param name="outTradeNo"></param>
  90. /// <returns></returns>
  91. public async Task<string> RefundQuery(string outTradeNo)
  92. {
  93. WxPayData data = new WxPayData();
  94. data.SetValue("out_trade_no", outTradeNo);//商品描述
  95. WxPayData result = await _wxPayApi.RefundQuery(data);
  96. return result.ToJson();
  97. }
  98. /**
  99. * 参数数组转换为url格式
  100. * @param map 参数名与参数值的映射表
  101. * @return URL字符串
  102. */
  103. private string ToUrlParams(SortedDictionary<string, object> map)
  104. {
  105. string buff = "";
  106. foreach (KeyValuePair<string, object> pair in map)
  107. {
  108. buff += pair.Key + "=" + pair.Value + "&";
  109. }
  110. buff = buff.Trim('&');
  111. return buff;
  112. }
  113. }
  114. }