HuiFuUtil.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using BasePaySdk;
  2. using BasePaySdk.Request;
  3. using JiaZhiQuan.Common.Config;
  4. using JiaZhiQuan.Common.Utils;
  5. using Newtonsoft.Json;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using Wicture.DbRESTFul;
  10. namespace JiaZhiQuan.Common.JuheAPI.HuiFu {
  11. public static class HuiFuUtil {
  12. public static bool CheckSign(string huifuPubKey,string sign,
  13. object data,bool isAsync=false) {
  14. string dataStr = null;
  15. if (isAsync) {
  16. dataStr= JsonConvert.SerializeObject(data);
  17. } else {
  18. var str = JsonConvert.SerializeObject(data);
  19. dataStr = sort4JsonString(str);
  20. }
  21. return RsaUtils.verfySign(huifuPubKey, sign,dataStr);
  22. }
  23. public static string sort4JsonString(string sourceJson) {
  24. var dic = JsonConvert.DeserializeObject<SortedDictionary<string, object>>(sourceJson);
  25. SortedDictionary<string, object> keyValues = new SortedDictionary<string, object>(dic);
  26. var result = keyValues.OrderBy(m => m.Key);//升序 把Key换成Value 就是对Value进行排序
  27. //var result = keyValues.OrderByDescending(m => m.Key);//降序
  28. Dictionary<string, object> resultDic = result.ToDictionary(x => x.Key, x => x.Value);
  29. return JsonConvert.SerializeObject(resultDic);
  30. }
  31. public static void InitConfig(HuiFuCommonConfig huifuConf) {
  32. MerConfig config = new MerConfig {
  33. ProductId = huifuConf.product_id,
  34. SysId = huifuConf.sys_id,
  35. RsaPrivateKey = huifuConf.app_secret_key,
  36. RsaPublicKey = huifuConf.huifu_pub_key
  37. };
  38. //BasePay.debug = isDev;
  39. BasePay.debug = true;
  40. //BasePay.prodMode = !BasePay.debug;
  41. BasePay.prodMode = true;
  42. BasePay.initWithMerConfig(config);
  43. }
  44. public static void InitNoticeUrl(this HuiFuReqBase reqInfo, ConfigFromDb config) {
  45. reqInfo.notifyUrl = reqInfo.ReqType() switch {
  46. HuiFuReqTypeEnums.Jspay => config.HuiFuJspayCallbackUrl,
  47. HuiFuReqTypeEnums.Chash => config.HuiFuChashCallbackUrl,
  48. HuiFuReqTypeEnums.Open => config.HuiFuOpenCallbackUrl,
  49. HuiFuReqTypeEnums.Refund => config.HuiFuRefundCallbackUrl,
  50. HuiFuReqTypeEnums.OpenModify => config.HuiFuOpenCallbackUrl,
  51. HuiFuReqTypeEnums.YuEPay => config.HuiFuYuEPayCallbackUrl,
  52. _ => ""
  53. };
  54. }
  55. /// <summary>
  56. /// 流水号前缀
  57. /// </summary>
  58. /// <param name="reqType"></param>
  59. /// <returns></returns>
  60. public static void InitReqId(HuiFuReqBase info) {
  61. var pre = info.ReqType() switch {
  62. HuiFuReqTypeEnums.Jspay => "P",
  63. HuiFuReqTypeEnums.Chash => "C",
  64. HuiFuReqTypeEnums.Open => "O",
  65. HuiFuReqTypeEnums.Refund => "R",
  66. HuiFuReqTypeEnums.Indv => "I",
  67. HuiFuReqTypeEnums.RefundQuery => "RQ",
  68. HuiFuReqTypeEnums.OpenModify =>"OM",
  69. HuiFuReqTypeEnums.YuEPay => "Y",
  70. _ => ""
  71. };
  72. info.reqId = (info.orgId.Length+6)>32? info.orgId: pre + info.orgId + "A" + StrEncryUtils.GetRandom(4);
  73. }
  74. public static TResp Request<TResp>(HuiFuCommonConfig huifuConf,
  75. HuiFuReqBase info) {
  76. InitConfig(huifuConf);
  77. BaseRequest request;
  78. string reqTypeStr = "";
  79. if (info is HuiFuPayInfo pInfo) {
  80. request = HuiFuApiJspay.InitReq(huifuConf, pInfo);
  81. reqTypeStr=pInfo.ReqType().ToString();
  82. } else if(info is HuiFuRefundInfo rInfo) {
  83. request = HuiFuApiRefund.InitReq(huifuConf, rInfo);
  84. reqTypeStr = rInfo.ReqType().ToString();
  85. } else if (info is HuiFuOpenInfo oInfo) {
  86. request = HuiFuApiOpen.InitReq(huifuConf, oInfo);
  87. reqTypeStr = oInfo.ReqType().ToString();
  88. } else if (info is HuiFuChashInfo cInfo) {
  89. request = HuiFuApiChash.InitReq(huifuConf, cInfo);
  90. reqTypeStr = cInfo.ReqType().ToString();
  91. } else if (info is HuiFuIndvInfo iInfo) {
  92. request = HuiFuApiIndv.InitReq(huifuConf, iInfo);
  93. reqTypeStr = iInfo.ReqType().ToString();
  94. } else if (info is HuiFuRefundQueryInfo rqInfo) {
  95. request = HuiFuApiRefundQuery.InitReq(huifuConf, rqInfo);
  96. reqTypeStr = rqInfo.ReqType().ToString();
  97. } else if (info is HuiFuOpenModifyInfo omInfo) {
  98. request = HuiFuApiOpenModify.InitReq(huifuConf, omInfo);
  99. reqTypeStr = omInfo.ReqType().ToString();
  100. } else if (info is HuiFuYuEPayInfo yInfo) {
  101. request = HuiFuApiYuEPay.InitReq(huifuConf, yInfo);
  102. reqTypeStr = yInfo.ReqType().ToString();
  103. } else {
  104. throw new Exception("不支持的汇付接口");
  105. }
  106. try {
  107. Dictionary<string, Object> result = null;
  108. LoggerManager.Logger.Info($"{reqTypeStr} 请求入参:" + JsonConvert.SerializeObject(request));
  109. result = BasePayClient.postRequest(request, null);
  110. LoggerManager.Logger.Info($"{reqTypeStr} 响应结果:" + JsonConvert.SerializeObject(result));
  111. var rstStr = JsonConvert.SerializeObject(result);
  112. var rst = JsonConvert.DeserializeObject<TResp>(rstStr);
  113. return rst;
  114. } catch (Exception ex) {
  115. LoggerManager.Logger.Error($"{reqTypeStr} 请求异常" + ex.Message);
  116. return default;
  117. }
  118. }
  119. }
  120. }