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 returnSign = values.GetValue <string>("sign"); var calSign = MakeSign(values); return(calSign == returnSign); }
public bool CheckSign(SettleObject values) { var data = values.ToUrlForSign(true); var sign = values.GetValue <string>("sign"); return(CheckSign(data, sign)); }
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); }
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"); }
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 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 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))); }