NativePay.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Senparc.Weixin;
  5. using Senparc.Weixin.TenPay;
  6. using Senparc.Weixin.TenPay.V3;
  7. using Newtonsoft.Json;
  8. namespace WxPayAPI
  9. {
  10. public class NativePay
  11. {
  12. /// <summary>
  13. /// nlog日志
  14. /// </summary>
  15. private static NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();
  16. /**
  17. * 生成扫描支付模式一URL
  18. * @param productId 商品ID
  19. * @return 模式一URL
  20. */
  21. public string GetPrePayUrl(string productId)
  22. {
  23. Log.Info(this.GetType().ToString(), "Native pay mode 1 url is producing...");
  24. WxPayData data = new WxPayData();
  25. data.SetValue("appid", WxPayConfig.APPID);//公众帐号id
  26. data.SetValue("mch_id", WxPayConfig.MCHID);//商户号
  27. data.SetValue("time_stamp", WxPayApi.GenerateTimeStamp());//时间戳
  28. data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
  29. data.SetValue("product_id", productId);//商品ID
  30. data.SetValue("sign", data.MakeSign());//签名
  31. string str = ToUrlParams(data.GetValues());//转换为URL串
  32. string url = "weixin://wxpay/bizpayurl?" + str;
  33. Log.Info(this.GetType().ToString(), "Get native pay mode 1 url : " + url);
  34. return url;
  35. }
  36. /// <summary>
  37. /// 生成直接支付url,支付url有效期为2小时,模式二
  38. /// </summary>
  39. /// <param name="productId">商品ID</param>
  40. /// <param name="total_fee">订单金额,单位为分,类型为整数</param>
  41. /// <param name="out_trade_no">从商户传来的订单号</param>
  42. /// <returns>模式二URL</returns>
  43. public string GetPayUrl(string productId, int total_fee, string out_trade_no)
  44. {
  45. Log.Info(this.GetType().ToString() + "-GetPayUrl");
  46. WxPayData data = new WxPayData();
  47. data.SetValue("body", "缴费");//商品描述
  48. data.SetValue("attach", "缴费");//附加数据
  49. //data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串
  50. data.SetValue("out_trade_no", out_trade_no);//商户订单号
  51. data.SetValue("total_fee", total_fee);//总金额
  52. //data.SetValue("spbill_create_ip", WxPayConfig.IP);//终端IP
  53. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  54. data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  55. //data.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//通知地址
  56. data.SetValue("goods_tag", "jjj");//商品标记
  57. data.SetValue("trade_type", "NATIVE");//交易类型
  58. data.SetValue("product_id", productId);//商品ID
  59. //data.SetValue("sign", data.MakeSign());//签名
  60. Log.Info($"【GetPayUrl】data组装:{JsonConvert.SerializeObject(data)}");
  61. WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
  62. Log.Info($"【GetPayUrl】调用统一下单接口 result:{JsonConvert.SerializeObject(result)}");
  63. string url = result.GetValue("code_url") == null ? "" : result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
  64. //Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
  65. return url;
  66. }
  67. /// <summary>
  68. /// 新闻查看支付获取url
  69. /// </summary>
  70. /// <param name="productId"></param>
  71. /// <param name="total_fee"></param>
  72. /// <param name="out_trade_no"></param>
  73. /// <returns></returns>
  74. public string GetNewsPayUrl(string productId, int total_fee, string out_trade_no)
  75. {
  76. //Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");
  77. WxPayData data = new WxPayData();
  78. data.SetValue("body", "新闻查看支付");//商品描述
  79. data.SetValue("attach", "融资通微信新闻查看支付");//附加数据
  80. //data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串
  81. data.SetValue("out_trade_no", out_trade_no);//商户订单号
  82. data.SetValue("total_fee", total_fee);//总金额
  83. //data.SetValue("spbill_create_ip", WxPayConfig.IP);//终端IP
  84. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  85. data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  86. //data.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//通知地址
  87. data.SetValue("goods_tag", "jjj");//商品标记
  88. data.SetValue("trade_type", "NATIVE");//交易类型
  89. data.SetValue("product_id", productId);//商品ID
  90. //data.SetValue("sign", data.MakeSign());//签名
  91. WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
  92. string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
  93. //Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
  94. return url;
  95. }
  96. /// <summary>
  97. /// 项目查看支付获取url
  98. /// </summary>
  99. /// <param name="productId"></param>
  100. /// <param name="total_fee"></param>
  101. /// <param name="out_trade_no"></param>
  102. /// <returns></returns>
  103. public string GetXmPayUrl(string productId, int total_fee, string out_trade_no)
  104. {
  105. //Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");
  106. WxPayData data = new WxPayData();
  107. data.SetValue("body", "项目查看支付");//商品描述
  108. data.SetValue("attach", "融资通微信项目查看支付");//附加数据
  109. //data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串
  110. data.SetValue("out_trade_no", out_trade_no);//商户订单号
  111. data.SetValue("total_fee", total_fee);//总金额
  112. //data.SetValue("spbill_create_ip", WxPayConfig.IP);//终端IP
  113. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  114. data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  115. //data.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//通知地址
  116. data.SetValue("goods_tag", "jjj");//商品标记
  117. data.SetValue("trade_type", "NATIVE");//交易类型
  118. data.SetValue("product_id", productId);//商品ID
  119. //data.SetValue("sign", data.MakeSign());//签名
  120. WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
  121. string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
  122. //Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
  123. return url;
  124. }
  125. /// <summary>
  126. /// 留言查看支付获取url
  127. /// </summary>
  128. /// <param name="productId"></param>
  129. /// <param name="total_fee"></param>
  130. /// <param name="out_trade_no"></param>
  131. /// <returns></returns>
  132. public string GetGuestBookPayUrl(string productId, int total_fee, string out_trade_no)
  133. {
  134. //Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");
  135. WxPayData data = new WxPayData();
  136. data.SetValue("body", "留言查看支付");//商品描述
  137. data.SetValue("attach", "融资通微信留言查看支付");//附加数据
  138. //data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串
  139. data.SetValue("out_trade_no", out_trade_no);//商户订单号
  140. data.SetValue("total_fee", total_fee);//总金额
  141. //data.SetValue("spbill_create_ip", WxPayConfig.IP);//终端IP
  142. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  143. data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  144. //data.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//通知地址
  145. data.SetValue("goods_tag", "jjj");//商品标记
  146. data.SetValue("trade_type", "NATIVE");//交易类型
  147. data.SetValue("product_id", productId);//商品ID
  148. //data.SetValue("sign", data.MakeSign());//签名
  149. WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
  150. string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
  151. //Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
  152. return url;
  153. }
  154. /// <summary>
  155. /// 项目投递支付
  156. /// </summary>
  157. /// <param name="productId"></param>
  158. /// <param name="total_fee"></param>
  159. /// <param name="out_trade_no"></param>
  160. /// <returns></returns>
  161. public string GetDeliverProjectPayUrl(string productId, int total_fee, string out_trade_no)
  162. {
  163. //Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");
  164. WxPayData data = new WxPayData();
  165. data.SetValue("body", "项目投递支付");//商品描述
  166. data.SetValue("attach", "融资通微信项目投递支付");//附加数据
  167. //data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串
  168. data.SetValue("out_trade_no", out_trade_no);//商户订单号
  169. data.SetValue("total_fee", total_fee);//总金额
  170. //data.SetValue("spbill_create_ip", WxPayConfig.IP);//终端IP
  171. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  172. data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  173. //data.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//通知地址
  174. data.SetValue("goods_tag", "jjj");//商品标记
  175. data.SetValue("trade_type", "NATIVE");//交易类型
  176. data.SetValue("product_id", productId);//商品ID
  177. //data.SetValue("sign", data.MakeSign());//签名
  178. WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
  179. string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
  180. //Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
  181. return url;
  182. }
  183. /**
  184. * 参数数组转换为url格式
  185. * @param map 参数名与参数值的映射表
  186. * @return URL字符串
  187. */
  188. private string ToUrlParams(SortedDictionary<string, object> map)
  189. {
  190. string buff = "";
  191. foreach (KeyValuePair<string, object> pair in map)
  192. {
  193. buff += pair.Key + "=" + pair.Value + "&";
  194. }
  195. buff = buff.Trim('&');
  196. return buff;
  197. }
  198. }
  199. }