public bool CheckSign(SettleObject values) { var returnSign = values.GetValue <string>("sign"); var calSign = MakeSign(values); return(calSign == returnSign); }
public Task <PaymentResponse> CreateAsync(PaymentRequest request) { var inputObj = new SettleObject(); var now = DateTime.Now; inputObj.SetValue("BranchID", _options.CmbPay.BranchId); inputObj.SetValue("CoNo", _options.CmbPay.CoNo); inputObj.SetValue("BillNo", request.OrderId); inputObj.SetValue("Amount", request.Amount / 100m); inputObj.SetValue("Date", now.ToString("yyyyMMdd")); inputObj.SetValue("MerchantRetUrl", _options.ShowUrl); inputObj.SetValue("MerchantUrl", _options.CmbPay.PayNotifyUrl); inputObj.SetValue("UserId", request.OpenId); var sign = MakeSign(inputObj); inputObj.RemoveValue("UserId"); inputObj.SetValue("MerchantCode", sign); var data = inputObj.ToUrl(); return (Task.FromResult(new PaymentResponse(request.OrderId) { Url = _options.CmbPay.PayUrl, Data = data })); }
private string ToXml(SettleObject values) { if (values == null || !values.Any()) { throw new SettleException("PaymentData数据为空!"); } var xml = new StringBuilder(); xml.Append("<Request>"); xml.Append("<Head>"); var head = ToXmlInternal(values.GetValue <Dictionary <string, object> >("Head")); xml.Append(head); xml.Append("</Head>"); xml.Append("<Body>"); var body = ToXmlInternal(values.GetValue <Dictionary <string, object> >("Body")); xml.Append(body); xml.Append("</Body>"); xml.Append("<Hash>"); xml.Append(GenHash(_options.CmbPay.Key, head, body)); xml.Append("</Hash>"); xml.Append("</Request>"); return(xml.ToString()); }
public bool CheckSign(SettleObject values) { var data = values.ToUrlForSign(true); var sign = values.GetValue <string>("sign"); return(CheckSign(data, sign)); }
private void InitAlipayData(SettleObject inputObj) { inputObj.SetValue("app_id", _options.Alipay.AppId); inputObj.SetValue("charset", Encoding.UTF8.WebName); inputObj.SetValue("sign_type", "RSA2"); inputObj.SetValue("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); inputObj.SetValue("version", "1.0"); }
private SettleObject FromXml(string xml) { if (string.IsNullOrEmpty(xml)) { throw new SettleException("xml为空!"); } SettleObject values = FromXmlIntenal(xml); return(values); }
public bool CheckSign(SettleObject values) { if (!values.IsSet("signature")) { return(false); } var oriByteData = Encoding.UTF8.GetBytes(values.ToUrlForSign()); var sha1 = SHA1.Create().ComputeHash(oriByteData); var data = BitConverter.ToString(sha1).Replace("-", "").ToLower(); return(SecretUtil.RsaVerify1(_publicCert.GetRSAPublicKey(), data, values.GetValue <string>("signature"))); }
public async Task <RefundResponse> RefundAsync(RefundRequest request) { var inputObj = new SettleObject(); var head = new SettleObject(); head.SetValue("BranchNo", _options.CmbPay.BranchId); head.SetValue("MerchantNo", _options.CmbPay.CoNo); head.SetValue("Operator", _options.CmbPay.Operator); head.SetValue("Password", _options.CmbPay.OperatorPassword); head.SetValue("TimeStamp", GenerateTimeStamp()); head.SetValue("Command", "Refund_No_Dup"); inputObj.SetValue("Head", head.GetValues()); var body = new SettleObject(); body.SetValue("Date", request.ChargeTime.ToString("yyyyMMdd")); body.SetValue("BillNo", request.ChargeId); body.SetValue("RefundNo", request.RefundId); body.SetValue("Amount", request.RefundAmount / 100m); body.SetValue("Desc", "refund"); inputObj.SetValue("Body", body.GetValues()); var xml = await GetAsStringAsync($"{_options.CmbPay.RefundUrl}?Request={WebUtility.UrlEncode(ToXml(inputObj))}"); try { var responseObj = FromXml(xml); var oHead = responseObj.GetValue("Head"); var rBody = responseObj.GetValue <Dictionary <string, object> >("Body"); if (oHead is Dictionary <string, object> rHead) { return new RefundResponse { RefundId = request.RefundId, Result = string.IsNullOrEmpty(rHead.ContainsKey("Code") ? rHead["Code"]?.ToString() : null), Message = rHead.ContainsKey("ErrMsg") ? rHead["ErrMsg"]?.ToString() : null, ProviderId = rBody.ContainsKey("RefundNo") ? rBody["RefundNo"]?.ToString() : "0" } } ; return(new RefundResponse { RefundId = request.RefundId, Result = true, ProviderId = rBody.ContainsKey("RefundNo") ? rBody["RefundNo"]?.ToString() : "0" }); } catch (Exception e) { throw new SettleException($"{xml}", e); } }
public bool CheckSign(SettleObject values) { var byteSign = values.GetValue <string>("Signature") .Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries) .Select(m => Convert.ToByte(m)) .ToArray(); var signature = Convert.ToBase64String(byteSign); return (RsaVerify1(values.ToUrlForSign(false, false), signature, Convert.FromBase64String(Config.CmbPayPublicKey))); }
private void InitUniPayData(SettleObject inputObj) { inputObj.SetValue("version", "5.0.0"); inputObj.SetValue("encoding", Encoding.UTF8.WebName); inputObj.SetValue("signMethod", "01"); inputObj.SetValue("txnType", "01"); inputObj.SetValue("txnSubType", "01"); inputObj.SetValue("bizType", "000201"); inputObj.SetValue("accessType", "0"); inputObj.SetValue("channelType", "08"); inputObj.SetValue("merId", _options.UnionPay.MerId); inputObj.SetValue("txnTime", DateTime.Now.ToString("yyyyMMddHHmmss")); }
public string MakeSign(SettleObject values) { if (_privateCert.SerialNumber != null) { values.SetValue("certId", BigInteger.Parse(_privateCert.SerialNumber, NumberStyles.AllowHexSpecifier).ToString()); } var oriByteData = Encoding.UTF8.GetBytes(values.ToUrlForSign()); var sha1 = SHA1.Create().ComputeHash(oriByteData); var data = BitConverter.ToString(sha1).Replace("-", "").ToLower(); return(SecretUtil.RsaSign1(_privateCert.GetRSAPrivateKey(), data)); }
public string MakeSign(SettleObject values) { var provider = new RSACryptoServiceProvider(); provider.FromXmlString(XmlPrivateKey); var keyPair = DotNetUtilities.GetKeyPair(provider); var c = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding"); c.Init(true, keyPair.Private); //第一个参数为true表示加密,为false表示解密;第二个参数表示密钥 var hash = GetHash(values.ToUrlForSign()); var byteData = Encoding.UTF8.GetBytes(hash); return(Convert.ToBase64String(c.DoFinal(byteData))); }
public string MakeSign(SettleObject values) { var str = $"{values.ToUrlForSign()}&key={_options.WeChat.Key}"; using (var md5 = MD5.Create()) { var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); var sb = new StringBuilder(); foreach (var b in hash) { sb.Append(b.ToString("x2")); } return(sb.ToString().ToUpperInvariant()); } }
public string MakeSign(SettleObject values) { var code = GenMerchantCode(_options.CmbPay.Key, values.GetValue <string>("Date"), _options.CmbPay.BranchId, _options.CmbPay.CoNo, values.GetValue <string>("BillNo"), values.GetValue <string>("Amount"), values.GetValue <string>("MerchantPara"), _options.CmbPay.PayNotifyUrl, "", "", strReserved: GetstrReserved(values)); return(code); }
private string GetstrReserved(SettleObject values) { var userId = values.GetValue <string>("UserId"); var sb = new StringBuilder(); sb.Append("<Protocol>"); sb.Append($"<PNo>{userId}</PNo>"); sb.Append($"<TS>{DateTime.Now:yyyyMMddHHmmss}</TS>"); sb.Append($"<MchNo>{_options.CmbPay.MchNo}</MchNo>"); sb.Append($"<Seq>{userId}</Seq>"); sb.Append($"<URL>{values.GetValue<string>("MerchantRetUrl")}</URL>"); sb.Append("<Para></Para>"); sb.Append("<MUID></MUID>"); sb.Append("<Mobile></Mobile>"); sb.Append("<LBS></LBS>"); sb.Append("<RskLvl></RskLvl>"); sb.Append("</Protocol>"); return(sb.ToString()); }
public async Task <string> HandlePaymentCallbackAsync(Func <PaymentCallbackResponse, Task> handle, string input) { var inputData = new SettleObject(); inputData.FromFormData(input, false); if (!CheckSign(inputData)) { throw new SettleException("招行一网通支付异步回调验签失败"); } var r = new PaymentCallbackResponse { OrderId = inputData.GetValue <long>("BillNo"), ProviderId = inputData.GetValue <string>("Msg")?.Substring(0, 38), Success = inputData.GetValue <string>("Succeed").ToLower() == "y" }; await handle.Invoke(r); return("success"); }
public string MakeSign(SettleObject values) { return(SecretUtil.RsaSign256(values.ToUrlForSign(), Config.AlipayPrivate)); }