Ejemplo n.º 1
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");
 }
Ejemplo n.º 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
            }));
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
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"));
 }
Ejemplo n.º 5
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));
        }