Пример #1
0
        public bool CheckSign(SettleObject values)
        {
            var returnSign = values.GetValue <string>("sign");
            var calSign    = MakeSign(values);

            return(calSign == returnSign);
        }
Пример #2
0
        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
            }));
        }
Пример #3
0
        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());
        }
Пример #4
0
        public bool CheckSign(SettleObject values)
        {
            var data = values.ToUrlForSign(true);
            var sign = values.GetValue <string>("sign");

            return(CheckSign(data, sign));
        }
Пример #5
0
 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");
 }
Пример #6
0
        private SettleObject FromXml(string xml)
        {
            if (string.IsNullOrEmpty(xml))
            {
                throw new SettleException("xml为空!");
            }
            SettleObject values = FromXmlIntenal(xml);

            return(values);
        }
Пример #7
0
        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")));
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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)));
        }
Пример #10
0
 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"));
 }
Пример #11
0
        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));
        }
Пример #12
0
        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)));
        }
Пример #13
0
        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());
            }
        }
Пример #14
0
        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);
        }
Пример #15
0
        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());
        }
Пример #16
0
        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");
        }
Пример #17
0
 public string MakeSign(SettleObject values)
 {
     return(SecretUtil.RsaSign256(values.ToUrlForSign(), Config.AlipayPrivate));
 }