コード例 #1
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());
        }
コード例 #2
0
        public bool CheckSign(SettleObject values)
        {
            var returnSign = values.GetValue <string>("sign");
            var calSign    = MakeSign(values);

            return(calSign == returnSign);
        }
コード例 #3
0
        public bool CheckSign(SettleObject values)
        {
            var data = values.ToUrlForSign(true);
            var sign = values.GetValue <string>("sign");

            return(CheckSign(data, sign));
        }
コード例 #4
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);
        }
コード例 #5
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");
        }
コード例 #6
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());
        }
コード例 #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 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)));
        }