NativePay.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using WayneCloud.Models.Models;
  5. namespace Wechat.PayAPI
  6. {
  7. public class NativePay
  8. {
  9. /**
  10. * 生成扫描支付模式一URL
  11. * @param productId 商品ID
  12. * @return 模式一URL
  13. */
  14. public string GetPrePayUrl(string productId, WxPayConfig config)
  15. {
  16. Log.Info(this.GetType().ToString(), "Native pay mode 1 url is producing...");
  17. WxPayData data = new WxPayData();
  18. data.SetValue("appid", config.APPID);//公众帐号id
  19. data.SetValue("mch_id", config.MCHID);//商户号
  20. if (!string.IsNullOrEmpty(config.SUBAPPID) &&
  21. !string.IsNullOrEmpty(config.SUBMCHID))
  22. {
  23. data.SetValue("sub_appid", config.SUBAPPID);//公众账号ID
  24. data.SetValue("sub_mch_id", config.SUBMCHID);//商户号
  25. }
  26. data.SetValue("time_stamp", WxPayApi.GenerateTimeStamp());//时间戳
  27. data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
  28. data.SetValue("product_id", productId);//商品ID
  29. data.SetValue("sign", data.MakeSign(config));//签名
  30. string str = ToUrlParams(data.GetValues());//转换为URL串
  31. string url = "weixin://wxpay/bizpayurl?" + str;
  32. Log.Info(this.GetType().ToString(), "Get native pay mode 1 url : " + url);
  33. return url;
  34. }
  35. /**
  36. * 生成直接支付url,支付url有效期为2小时,模式二
  37. * @param productId 商品ID
  38. * @return 模式二URL
  39. */
  40. public async Task<string> GetPayUrl(string productId, WxPayConfig config)
  41. {
  42. Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");
  43. WxPayData data = new WxPayData();
  44. data.SetValue("body", "test");//商品描述
  45. data.SetValue("attach", "test");//附加数据
  46. data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo(config));//随机字符串
  47. data.SetValue("total_fee", 1);//总金额
  48. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  49. data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
  50. data.SetValue("goods_tag", "jjj");//商品标记
  51. data.SetValue("trade_type", "NATIVE");//交易类型
  52. data.SetValue("product_id", productId);//商品ID
  53. WxPayData result = await WxPayApi.UnifiedOrder(data, config);//调用统一下单接口
  54. string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
  55. Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
  56. return url;
  57. }
  58. /**
  59. * 参数数组转换为url格式
  60. * @param map 参数名与参数值的映射表
  61. * @return URL字符串
  62. */
  63. private string ToUrlParams(SortedDictionary<string, object> map)
  64. {
  65. string buff = "";
  66. foreach (KeyValuePair<string, object> pair in map)
  67. {
  68. buff += pair.Key + "=" + pair.Value + "&";
  69. }
  70. buff = buff.Trim('&');
  71. return buff;
  72. }
  73. }
  74. }