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"); }
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 })); }
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); } }
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)); }