/// <summary> /// 接收返回数据 /// </summary> /// <param name="p1_MerId"></param> /// <param name="keyValue"></param> /// <param name="r0_Cmd"></param> /// <param name="r1_Code"></param> /// <param name="rb_Order"></param> /// <param name="r2_TrxId"></param> /// <param name="pa_MP"></param> /// <param name="rc_Amt"></param> /// <param name="rq_CardNo"></param> /// <param name="hmac"></param> /// <returns>SZXCallbackResult</returns> //接收返回数据 校验 public static SZXCallbackResult VerifyCallback(string r0_Cmd, string r1_Code, string p1_MerId, string p2_Order, string p3_Amt, string p4_FrpId, string p5_CardNo, string p6_confirmAmount, string p7_realAmount, string p8_cardStatus, string p9_MP, string pb_BalanceAmt, string pc_BalanceAct, string hmac) { string sbOld = ""; sbOld += r0_Cmd; sbOld += r1_Code; sbOld += p1_MerId; sbOld += p2_Order; sbOld += p3_Amt; sbOld += p4_FrpId; sbOld += p5_CardNo; sbOld += p6_confirmAmount; sbOld += p7_realAmount; sbOld += p8_cardStatus; sbOld += p9_MP; sbOld += pb_BalanceAmt; sbOld += pc_BalanceAct; string nhmac = Digest.HmacSign(sbOld, keyValue); logHmac(p2_Order, sbOld, keyValue, hmac); if (nhmac == hmac) { return(new SZXCallbackResult(r0_Cmd, r1_Code, p1_MerId, p2_Order, p3_Amt, p4_FrpId, p5_CardNo, p6_confirmAmount, p7_realAmount, p8_cardStatus, p9_MP, pb_BalanceAmt, pc_BalanceAct, hmac, "")); } else { return(new SZXCallbackResult(r0_Cmd, r1_Code, p1_MerId, p2_Order, p3_Amt, p4_FrpId, p5_CardNo, p6_confirmAmount, p7_realAmount, p8_cardStatus, p9_MP, pb_BalanceAmt, pc_BalanceAct, hmac, Digest.HmacSign(sbOld, keyValue) + "<br>sbOld:" + sbOld)); } }
public SDKCallbackResult VerifySDKCallBack(string p1_MerId, string r0_Cmd, string r1_Code, string r2_TrxId, string r3_Amt, string r4_Cur, string r5_Pid, string r6_Order, string r7_Uid, string r8_MP, string r9_BType, string rb_BankId, string ro_BankOrderId, string rp_PayDate, string rq_CardNo, string ru_Trxtime, string hmac) { //ing ro_BankOrderId, string rp_PayDate, string rq_CardNo, string ru_Trxtime, string hmac) StringBuilder sb = new StringBuilder(); sb.Append(p1_MerId) .Append(r0_Cmd) .Append(r1_Code) .Append(r2_TrxId) .Append(r3_Amt) .Append(r4_Cur) .Append(r5_Pid) .Append(r6_Order) .Append(r7_Uid) .Append(r8_MP) .Append(r9_BType); var verifiedStr = Digest.HmacSign(sb.ToString(), "keyValue".ConfigValue()); if (verifiedStr.Equals(hmac)) { return(new SDKCallbackResult(p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, rb_BankId, ro_BankOrderId, rp_PayDate, rq_CardNo, ru_Trxtime, hmac, "")); } return(new SDKCallbackResult(p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, rb_BankId, ro_BankOrderId, rp_PayDate, rq_CardNo, ru_Trxtime, hmac, verifiedStr + "<br>sbOld:" + sb.ToString())); }
/// <summary> /// 验证返回结果 /// </summary> /// <param name="r0_Cmd"></param> /// <param name="r1_Code"></param> /// <param name="p1_MerId"></param> /// <param name="r2_TrxId"></param> /// <param name="p2_Order"></param> /// <param name="p3_Amt"></param> /// <param name="p4_cur"></param> /// <param name="rp_PayDate"></param> /// <param name="r9_BType"></param> /// <param name="pe_extInfo1"></param> /// <param name="pe_extInfo2"></param> /// <param name="pe_extInfo3"></param> /// <param name="pe_extInfo4"></param> /// <param name="errMsg"></param> /// <param name="hmac"></param> /// <returns></returns> public static BuyCallbackResult VerifyCallback(string p1_MerId, string r0_Cmd, string r1_Code, string r2_TrxId, string r3_Amt, string r4_Cur, string r5_Pid, string r6_Order, string r7_Uid, string r8_MP, string r9_BType, string rp_PayDate, string hmac) { string sbOld = ""; sbOld += p1_MerId; sbOld += r0_Cmd; sbOld += r1_Code; sbOld += r2_TrxId; sbOld += r3_Amt; sbOld += r4_Cur; sbOld += r5_Pid; sbOld += r6_Order; sbOld += r7_Uid; sbOld += r8_MP; sbOld += r9_BType; string nhmac = Digest.HmacSign(sbOld, keyValue); logstr(r6_Order, sbOld, nhmac); if (nhmac == hmac) { return(new BuyCallbackResult(p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, rp_PayDate, hmac, "")); } else { return(new BuyCallbackResult(p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, rp_PayDate, hmac, "交易签名被篡改")); } }
/// <summary> /// 退款 /// </summary> /// <param name="p1_MerId">商户编号</param> /// <param name="keyValue">商户密钥</param> /// <param name="pb_TrxId">yeepay流水号</param> /// <param name="p3_Amt">退款金额</param> /// <param name="p4_Cur">币种</param> /// <param name="p5_Desc">退款说明</param> /// <returns></returns> public static BuyRefundOrdResult RefundOrd(string pb_TrxId, string p3_Amt, string p4_Cur, string p5_Desc) { string sbOld = ""; sbOld += "RefundOrd"; sbOld += merchantId; sbOld += pb_TrxId; sbOld += p3_Amt; sbOld += p4_Cur; sbOld += p5_Desc; string hmac = Digest.HmacSign(sbOld, keyValue); logstr(pb_TrxId, sbOld, hmac); string para = ""; para += "?p0_Cmd=RefundOrd"; para += "&p1_MerId=" + merchantId; //加入商家ID para += "&pb_TrxId=" + pb_TrxId; para += "&p3_Amt=" + p3_Amt; //加入购买订单号码 para += "&p4_Cur=" + p4_Cur; para += "&p5_Desc=" + HttpUtility.UrlEncode(p5_Desc, System.Text.Encoding.GetEncoding("gb2312")); para += "&hmac=" + hmac; //加入校验码 logstr(pb_TrxId, queryRefundReqURL + para, ""); string reqResult = HttpUtils.SendRequest(queryRefundReqURL, para); //记录退款通讯返回 logstr(pb_TrxId, reqResult, ""); string r0_Cmd = FormatQueryString.GetQueryString("r0_Cmd", reqResult, '\n'); string r1_Code = FormatQueryString.GetQueryString("r1_Code", reqResult, '\n'); string r2_TrxId = FormatQueryString.GetQueryString("r2_TrxId", reqResult, '\n'); string r3_Amt = FormatQueryString.GetQueryString("r3_Amt", reqResult, '\n'); string r4_Cur = FormatQueryString.GetQueryString("r4_Cur", reqResult, '\n'); hmac = FormatQueryString.GetQueryString("hmac", reqResult, '\n'); //校验返回的hmac sbOld = ""; sbOld += r0_Cmd; sbOld += r1_Code; sbOld += r2_TrxId; sbOld += r3_Amt; sbOld += r4_Cur; string nhmac = Digest.HmacSign(sbOld, keyValue); logstr("退款返回流水号:" + r2_TrxId, sbOld, nhmac); if (hmac == nhmac) { BuyRefundOrdResult result = new BuyRefundOrdResult(r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, hmac, ""); return(result); } else { BuyRefundOrdResult result = new BuyRefundOrdResult(r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, hmac, "交易签名无效"); return(result); } }
public static global::viviapi.ETAPI.YeePay.Lib.com.yeepay.cmbn.SZXCallbackResult VerifyCallback(string keyValue, string r0_Cmd, string r1_Code, string p1_MerId, string p2_Order, string p3_Amt, string p4_FrpId, string p5_CardNo, string p6_confirmAmount, string p7_realAmount, string p8_cardStatus, string p9_MP, string pb_BalanceAmt, string pc_BalanceAct, string hmac) { string aValue = ""; aValue = ((((((aValue + r0_Cmd) + r1_Code + p1_MerId) + p2_Order + p3_Amt) + p4_FrpId + p5_CardNo) + p6_confirmAmount + p7_realAmount) + p8_cardStatus + p9_MP) + pb_BalanceAmt + pc_BalanceAct; string str2 = Digest.HmacSign(aValue, keyValue); logHmac(p2_Order, aValue, keyValue, hmac); if (str2 == hmac) { return(new global::viviapi.ETAPI.YeePay.Lib.com.yeepay.cmbn.SZXCallbackResult(r0_Cmd, r1_Code, p1_MerId, p2_Order, p3_Amt, p4_FrpId, p5_CardNo, p6_confirmAmount, p7_realAmount, p8_cardStatus, p9_MP, pb_BalanceAmt, pc_BalanceAct, hmac, "")); } return(new global::viviapi.ETAPI.YeePay.Lib.com.yeepay.cmbn.SZXCallbackResult(r0_Cmd, r1_Code, p1_MerId, p2_Order, p3_Amt, p4_FrpId, p5_CardNo, p6_confirmAmount, p7_realAmount, p8_cardStatus, p9_MP, pb_BalanceAmt, pc_BalanceAct, hmac, Digest.HmacSign(aValue, keyValue) + "<br>sbOld:" + aValue)); }
public static string CreateBuyHmac(string p2_Order, string p3_Amt, string p4_Cur, string p5_Pid, string p6_Pcat, string p7_Pdesc, string p8_Url, string p9_SAF, string pa_MP, string pd_FrpId, string pr_NeedResponse) { string sbOld = ""; //1 sbOld += "Buy"; sbOld += merchantId; sbOld += p2_Order; sbOld += p3_Amt; sbOld += p4_Cur; //2 sbOld += p5_Pid; sbOld += p6_Pcat; sbOld += p7_Pdesc; sbOld += p8_Url; sbOld += p9_SAF; //3 sbOld += pa_MP; sbOld += pd_FrpId; sbOld += pr_NeedResponse; //生成hmac string hmac = Digest.HmacSign(sbOld, keyValue); logstr(p2_Order, sbOld, hmac); string sForm = ""; sForm += "<form name='yeepay' action='" + nodeAuthorizationURL + "' method='post'> \r\n "; sForm += "<input type='hidden' name='p0_Cmd' value='Buy'>\r\n"; sForm += "<input type='hidden' name='p1_MerId' value='"+ merchantId + "'>\r\n"; sForm += "<input type='hidden' name='p2_Order' value='"+ p2_Order + "'>\r\n"; sForm += "<input type='hidden' name='p3_Amt' value='"+ p3_Amt + "'>\r\n"; sForm += "<input type='hidden' name='p4_Cur' value='"+ p4_Cur + "'>\r\n"; sForm += "<input type='hidden' name='p5_Pid' value='"+ p5_Pid + "'>\r\n"; sForm += "<input type='hidden' name='p6_Pcat' value='"+ p6_Pcat + "'>\r\n"; sForm += "<input type='hidden' name='p7_Pdesc' value='"+ p7_Pdesc + "'>\r\n"; sForm += "<input type='hidden' name='p8_Url' value='"+ p8_Url + "'>\r\n"; sForm += "<input type='hidden' name='p9_SAF' value='"+ p9_SAF + "'>\r\n"; sForm += "<input type='hidden' name='pa_MP' value='" + pa_MP + "'>\r\n"; sForm += "<input type='hidden' name='pd_FrpId' value='"+ pd_FrpId + "'>\r\n"; sForm += "<input type='hidden' name='pr_NeedResponse' value='"+ pr_NeedResponse + "'>\r\n"; sForm += "<input type='hidden' name='hmac' value='"+ hmac + "'>\r\n"; sForm += "</form>\r\n"; logstr(p2_Order, sForm, ""); return(hmac); }
public string getCallBackParams(NameValueCollection nvc) { hmacArray = buyReHmacArray; for (int i = 0; i < hmacArray.Length; i++) { hmacResource = hmacResource + nvc[hmacArray[i]]; } string hmac = Digest.HmacSign(hmacResource, keyvalue); //记录服务器返回的hmac和本地收到返回信息后生成的hmac log.createLog("Buy", "serverhmac" + ":" + nvc["hmac"], "localhmac" + ":" + "[" + hmac + "]"); return(hmac); }
/// <summary> /// 查询订单支付状态 /// </summary> /// <returns></returns> /// <remarks>2016-12-20 杨浩 创建</remarks> public override Result QueryOrderState(string orderId) { var result = new Result() { Status = false }; string key = "0627eb791eadb57cd947dc32e59e563e"; var payOrder = new OnlinePayOrder(key); payOrder.MerchantId = "120140222"; //商户号 payOrder.RequestId = "9942"; //订单号 string hmac = Digest.HmacSign(payOrder.MerchantId + payOrder.RequestId, key); var client = new com.ekhing.Web.HttpClient("https://api.ehking.com/onlinePay/query"); string data = "{\"merchantId\":\"" + payOrder.MerchantId + "\",\"requestId\":\"" + payOrder.RequestId + "\",\"hmac\":\"" + hmac + "\"}"; string responseStr = client.Post(data); var _result = JObject.Parse(responseStr); string status = _result["status"].ToString(); if (status == "SUCCESS") { string _hmac = _result["hmac"].ToString(); string requestId = _result["requestId"].ToString(); string serialNumber = _result["serialNumber"].ToString(); string orderAmount = _result["orderAmount"].ToString(); result.Status = true; } else if (status == "FAILED") { result.Message = _result["error"].ToString(); } return(result); }
public override BaseResult VerifyCallBack(HttpRequest request) { var result = new YeepayResult(); //var coll = (string.IsNullOrEmpty(request.Form["r6_Order"]) ? request.QueryString : request.Form); var list = Decode(request); result.TradeNum = list["r6_Order"]; result.Amount = Convert.ToDecimal(list["r3_Amt"]); result.NeedResponse = (list["r9_BType"] == "2"); result.Code = list["r1_Code"]; result.PayDate = Utils.StrToDate(list["rp_PayDate"], DateTime.Now); result.TrxId = list["r2_TrxId"]; if (result.Code != "1") { result.State = false; result.ErrMsg = "支付状态失败!"; return(result); } var qs = new[] { "p1_MerId", "r0_Cmd", "r1_Code", "r2_TrxId", "r3_Amt", "r4_Cur", "r5_Pid", "r6_Order", "r7_Uid", "r8_MP", "r9_BType" }; var nhmac = qs.Aggregate("", (current, t) => current + list[t]); var ourSign = Digest.HmacSign(nhmac, Configs.GetKey()); var sign = list["hmac"]; if (sign != ourSign) { result.State = false; result.ErrMsg = string.Format("签名验证失败--{0}|{1}", sign, ourSign); } else { result.State = true; } return(result); }
public static global::viviapi.ETAPI.YeePay.Lib.com.yeepay.cmbn.SZXResult AnnulCard(string keyValue, string p1_MerId, string p2_Order, string p3_Amt, string p4_verifyAmt, string p5_Pid, string p6_Pcat, string p7_Pdesc, string p8_Url, string pa_MP, string pa7_cardAmt, string pa8_cardNo, string pa9_cardPwd, string pd_FrpId, string pr_NeedResponse, string pz_userId, string pz1_userRegTime) { string aValue = ""; aValue = ((((((((aValue + "ChargeCardDirect") + p1_MerId + p2_Order) + p3_Amt + p4_verifyAmt) + p5_Pid + p6_Pcat) + p7_Pdesc + p8_Url) + pa_MP + pa7_cardAmt) + pa8_cardNo + pa9_cardPwd) + pd_FrpId + pr_NeedResponse) + pz_userId + pz1_userRegTime; string hmac = Digest.HmacSign(aValue, keyValue); logHmac(p2_Order, aValue, keyValue, hmac); string para = ""; para = (((((((((((((((((para + "?p0_Cmd=ChargeCardDirect") + "&p1_MerId=" + p1_MerId) + "&p2_Order=" + p2_Order) + "&p3_Amt=" + p3_Amt) + "&p4_verifyAmt=" + p4_verifyAmt) + "&p5_Pid=" + HttpUtility.UrlEncode(p5_Pid, Encoding.GetEncoding("gb2312"))) + "&p6_Pcat=" + HttpUtility.UrlEncode(p6_Pcat, Encoding.GetEncoding("gb2312"))) + "&p7_Pdesc=" + HttpUtility.UrlEncode(p7_Pdesc, Encoding.GetEncoding("gb2312"))) + "&p8_Url=" + HttpUtility.UrlEncode(p8_Url, Encoding.GetEncoding("gb2312"))) + "&pa_MP=" + HttpUtility.UrlEncode(pa_MP, Encoding.GetEncoding("gb2312"))) + "&pa7_cardAmt=" + HttpUtility.UrlEncode(pa7_cardAmt, Encoding.GetEncoding("gb2312"))) + "&pa8_cardNo=" + HttpUtility.UrlEncode(pa8_cardNo, Encoding.GetEncoding("gb2312"))) + "&pa9_cardPwd=" + HttpUtility.UrlEncode(pa9_cardPwd, Encoding.GetEncoding("gb2312"))) + "&pd_FrpId=" + pd_FrpId) + "&pr_NeedResponse=" + pr_NeedResponse) + "&pz_userId=" + pz_userId) + "&pz1_userRegTime=" + HttpUtility.UrlEncode(pz1_userRegTime, Encoding.GetEncoding("gb2312"))) + "&hmac=" + hmac; logURL(_nodeAuthorizationUrl + para); string reqResult = HttpUtils.SendRequest(_nodeAuthorizationUrl, para); logReqResult(reqResult); string str5 = FormatQueryString.GetQueryString("r0_Cmd", reqResult, '\n'); string str6 = FormatQueryString.GetQueryString("r1_Code", reqResult, '\n'); string str7 = FormatQueryString.GetQueryString("r6_Order", reqResult, '\n'); string str8 = FormatQueryString.GetQueryString("rq_ReturnMsg", reqResult, '\n'); return(new global::viviapi.ETAPI.YeePay.Lib.com.yeepay.cmbn.SZXResult(str5, str6, str7, str8, FormatQueryString.GetQueryString("hmac", reqResult, '\n'), _nodeAuthorizationUrl + para, reqResult)); }
/// <summary> /// 接收返回数据 /// </summary> /// <param name="p1_MerId"></param> /// <param name="keyValue"></param> /// <param name="r0_Cmd"></param> /// <param name="r1_Code"></param> /// <param name="rb_Order"></param> /// <param name="r2_TrxId"></param> /// <param name="pa_MP"></param> /// <param name="rc_Amt"></param> /// <param name="rq_CardNo"></param> /// <param name="hmac"></param> /// <returns>SZXCallbackResult</returns> //接收返回数据 校验 public static SZXCallbackResult VerifyCallback(string r0_Cmd, string r1_Code, string p1_MerId, string p2_Order, string p3_Amt, string p4_FrpId, string p5_CardNo, string p6_confirmAmount, string p7_realAmount, string p8_cardStatus, string p9_MP, string pb_BalanceAmt, string pc_BalanceAct, string hmac) { if (ub.GetSub("FinanceAmtType", "/Controls/finance.xml") == "1") { merchantId = ub.GetSub("FinanceSZXNo", "/Controls/finance.xml"); keyValue = ub.GetSub("FinanceSZXPass", "/Controls/finance.xml"); } string sbOld = ""; sbOld += r0_Cmd; sbOld += r1_Code; sbOld += p1_MerId; sbOld += p2_Order; sbOld += p3_Amt; sbOld += p4_FrpId; sbOld += p5_CardNo; sbOld += p6_confirmAmount; sbOld += p7_realAmount; sbOld += p8_cardStatus; sbOld += p9_MP; sbOld += pb_BalanceAmt; sbOld += pc_BalanceAct; string nhmac = Digest.HmacSign(sbOld, keyValue); logHmac(p2_Order, sbOld, keyValue, hmac); if (nhmac == hmac) { return(new SZXCallbackResult(r0_Cmd, r1_Code, p1_MerId, p2_Order, p3_Amt, p4_FrpId, p5_CardNo, p6_confirmAmount, p7_realAmount, p8_cardStatus, p9_MP, pb_BalanceAmt, pc_BalanceAct, hmac, "")); } else { return(new SZXCallbackResult(r0_Cmd, r1_Code, p1_MerId, p2_Order, p3_Amt, p4_FrpId, p5_CardNo, p6_confirmAmount, p7_realAmount, p8_cardStatus, p9_MP, pb_BalanceAmt, pc_BalanceAct, hmac, Digest.HmacSign(sbOld, keyValue) + "<br>sbOld:" + sbOld)); } }
public override string CreateUrl(ParameterInfo yeepay) { var info = yeepay as YeePayParasInfo; if (info == null) { return(""); } //签名 var sb = "Buy"; sb += Configs.GetPartnerId(); sb += info.OrderNum; sb += info.Amount.ToString("0.00"); sb += info.Cur; sb += info.ProName; sb += info.ProCate; sb += info.ProDesc; sb += info.ReturnUrl; sb += info.Saf; sb += info.ExtentInfo; sb += info.FrpId; sb += (info.NeedResponse ? "1" : "0"); var hmac = Digest.HmacSign(sb, Configs.GetKey()); var url = Configs.RequestPayUrl; url += string.Format(Configs.Paras, Configs.GetPartnerId(), HttpUtility.UrlEncode(info.OrderNum, Configs.DefCoding), info.Amount.ToString("0.00"), info.Cur, HttpUtility.UrlEncode(info.ProName, Configs.DefCoding), HttpUtility.UrlEncode(info.ProCate, Configs.DefCoding), HttpUtility.UrlEncode(info.ProDesc, Configs.DefCoding), HttpUtility.UrlEncode(info.ReturnUrl, Configs.DefCoding), info.Saf, HttpUtility.UrlEncode(info.ExtentInfo, Configs.DefCoding), info.FrpId, (info.NeedResponse ? "1" : "0"), hmac); return(url); }
/// <summary> /// 非银行卡支付支付请求(通讯) /// </summary> /// <param name="p1_MerId">商户编号</param> /// <param name="keyValue">商户密钥</param> /// <param name="p2_Order">订单号</param> /// <param name="p3_Amt">支付卡金额</param> /// <param name="p8_Url">回报Url</param> /// <param name="pa_MP">商户扩展参数</param> /// <param name="pa7_cardNo">支付卡序列号</param> /// <param name="pa8_cardPwd">支付卡密码</param> /// <param name="pd_FrpId">银行编码</param> /// <param name="pa0_Mode">支付卡支付传递模式</param> /// <param name="pr_NeedResponse">应答机制</param> /// <returns>SZXResult</returns> public static SZXResult AnnulCard(string p2_Order, string p3_Amt, string p4_verifyAmt, string p5_Pid, string p6_Pcat, string p7_Pdesc, string p8_Url, string pa_MP, string pa7_cardAmt, string pa8_cardNo, string pa9_cardPwd, string pd_FrpId, string pr_NeedResponse, string pz_userId, string pz1_userRegTime) { if (ub.GetSub("FinanceAmtType", "/Controls/finance.xml") == "1") { merchantId = ub.GetSub("FinanceSZXNo", "/Controls/finance.xml"); keyValue = ub.GetSub("FinanceSZXPass", "/Controls/finance.xml"); } string sbOld = ""; sbOld += "ChargeCardDirect"; sbOld += merchantId; sbOld += p2_Order; sbOld += p3_Amt; sbOld += p4_verifyAmt; sbOld += p5_Pid; sbOld += p6_Pcat; sbOld += p7_Pdesc; sbOld += p8_Url; sbOld += pa_MP; sbOld += pa7_cardAmt; sbOld += pa8_cardNo; sbOld += pa9_cardPwd; sbOld += pd_FrpId; sbOld += pr_NeedResponse; sbOld += pz_userId; sbOld += pz1_userRegTime; string hmac = Digest.HmacSign(sbOld, keyValue); logHmac(p2_Order, sbOld, keyValue, hmac); string para = ""; para += "?p0_Cmd=ChargeCardDirect"; para += "&p1_MerId=" + merchantId; para += "&p2_Order=" + p2_Order; para += "&p3_Amt=" + p3_Amt; para += "&p4_verifyAmt=" + p4_verifyAmt; para += "&p5_Pid=" + System.Web.HttpUtility.UrlEncode(p5_Pid, System.Text.Encoding.GetEncoding("gb2312")); para += "&p6_Pcat=" + System.Web.HttpUtility.UrlEncode(p6_Pcat, System.Text.Encoding.GetEncoding("gb2312")); para += "&p7_Pdesc=" + System.Web.HttpUtility.UrlEncode(p7_Pdesc, System.Text.Encoding.GetEncoding("gb2312")); para += "&p8_Url=" + System.Web.HttpUtility.UrlEncode(p8_Url, System.Text.Encoding.GetEncoding("gb2312")); para += "&pa_MP=" + System.Web.HttpUtility.UrlEncode(pa_MP, System.Text.Encoding.GetEncoding("gb2312")); para += "&pa7_cardAmt=" + System.Web.HttpUtility.UrlEncode(pa7_cardAmt, System.Text.Encoding.GetEncoding("gb2312")); para += "&pa8_cardNo=" + System.Web.HttpUtility.UrlEncode(pa8_cardNo, System.Text.Encoding.GetEncoding("gb2312")); para += "&pa9_cardPwd=" + System.Web.HttpUtility.UrlEncode(pa9_cardPwd, System.Text.Encoding.GetEncoding("gb2312")); para += "&pd_FrpId=" + pd_FrpId; para += "&pr_NeedResponse=" + pr_NeedResponse; para += "&pz_userId=" + pz_userId; para += "&pz1_userRegTime=" + System.Web.HttpUtility.UrlEncode(pz1_userRegTime, System.Text.Encoding.GetEncoding("gb2312")); para += "&hmac=" + hmac; logURL(nodeAuthorizationURL + para); string reqResult = HttpUtils.SendRequest(nodeAuthorizationURL, para); logReqResult(reqResult); string r0_Cmd = FormatQueryString.GetQueryString("r0_Cmd", reqResult, '\n'); string r1_Code = FormatQueryString.GetQueryString("r1_Code", reqResult, '\n'); string r6_Order = FormatQueryString.GetQueryString("r6_Order", reqResult, '\n'); string rq_ReturnMsg = FormatQueryString.GetQueryString("rq_ReturnMsg", reqResult, '\n'); hmac = FormatQueryString.GetQueryString("hmac", reqResult, '\n'); SZXResult result = new SZXResult(r0_Cmd, r1_Code, r6_Order, rq_ReturnMsg, hmac, nodeAuthorizationURL + para, reqResult); return(result); }
public string returnResult(string actionType, NameValueCollection nvc, string httpFlag) { string hmacResource = ""; string postParams = ""; string postUrl = ""; // 从Web.config文件里读取商户密钥 string keyvalue = ConfigurationSettings.AppSettings["KeyValue"]; if (actionType == "RefundExt") { // 从Web.config文件里读取通讯地址 postUrl = ConfigurationSettings.AppSettings["distributeRefundUrl"]; } else if (actionType == "IndirectRegister") { // 从Web.config文件里读取网关地址 postUrl = ConfigurationSettings.AppSettings["distributeRegisterUrl"]; } else { // 从Web.config文件里读取网关地址 postUrl = ConfigurationSettings.AppSettings["distributeUrl"]; } switch (actionType) { case "Buy": hmacArray = buyHmacArray; msgTitle = "分账支付"; break; case "QueryBalance": hmacArray = queryHmacArray; msgTitle = "余额查询"; break; case "RefundExt": hmacArray = refundHmacArray; msgTitle = "分账退款"; break; case "IndirectRegister": hmacArray = regMerchantHmacArray; msgTitle = "子商户注册"; break; case "PaymentConfirm": hmacArray = payConfirmHmacArray; msgTitle = "分账解冻"; break; } for (int i = 0; i < hmacArray.Length; i++) { hmacResource = hmacResource + nvc[hmacArray[i]]; postParams = postParams + hmacArray[i] + "=" + nvc[hmacArray[i]] + "&"; } log.createLog(actionType, "sbold:" + hmacResource, ""); string hmac = Digest.HmacSign(hmacResource, keyvalue); log.createLog(actionType, "keyvalue" + ":" + keyvalue, "hmac" + ":" + hmac); postParams = postParams + "hmac=" + hmac; if (httpFlag == "1") { // 记录重定向请求的url log.createLog(actionType, "requestUrl:" + postUrl + "?" + postParams, ""); return(postUrl + "?" + postParams); } // 服务器点对点通讯 else { StringBuilder strResult = new StringBuilder(); WebRequest req = WebRequest.Create(postUrl); // 记录通讯请求的url log.createLog(actionType, "requestUrl:" + postUrl + "?" + postParams, ""); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; byte[] tempBytes = Encoding.Default.GetBytes(postParams); req.ContentLength = tempBytes.Length; Stream newStream = req.GetRequestStream(); newStream.Write(tempBytes, 0, tempBytes.Length); newStream.Close(); WebResponse result = req.GetResponse(); Stream ReceiveStream = result.GetResponseStream(); Byte[] read = new Byte[512]; int bytes = ReceiveStream.Read(read, 0, 512); while (bytes > 0) { // 注意: // 下面假定响应使用 UTF-8 作为编码方式。 // 如果内容以 ANSI 代码页形式(例如,932)发送,则使用类似下面的语句: // Encoding encode = System.Text.Encoding.GetEncoding("shift-jis"); Encoding encode = System.Text.Encoding.Default;//.GetEncoding(encodingName); strResult.Append(encode.GetString(read, 0, bytes)); bytes = ReceiveStream.Read(read, 0, 512); } string resultStr = strResult.ToString(); // 记录通讯返回信息 log.createLog(actionType, "returnMsg:" + resultStr, ""); NameValueCollection reParams = new NameValueCollection(); string[] aryStr = resultStr.Split('\n'); foreach (string i in aryStr) { string[] aryParams = i.Split('='); reParams.Add(aryParams[0], aryParams[1]); } if (reParams["r1_Code"] == "1") { string returnStr = msgTitle + "成功!<br>" + resultStr; return(returnStr); } else { string returnStr = msgTitle + "失败!<br>" + resultStr + "<br>失败原因:<font color=red>" + showErrorCode(reParams["r1_Code"]) + "</font>"; return(returnStr); } } }
/// <summary> /// 海关报关 /// </summary> /// <returns></returns> /// <remarks>2015-10-12 杨浩 创建</remarks> public override Result ApplyToCustoms(SoOrder order) { Result result = new Result() { Status = false }; try { if (order != null) { var ehkingMerchantId = config.EhkingMerhantId; var ehkingKey = config.EhkingKey; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); string nodeAuthorizationURL = config.EhkingNodeAuthorizationUrl; string merchantId = ehkingMerchantId; string keyValue = ehkingKey; string serialNumber = onlinePayments.First().VoucherNo; string notifyUrl = "http://admin.singingwhale.cn/ajax/notifyReceipt";// config.EhkingCustomsAsyncUrl; string amount = "0"; string Freight = "0"; string GoodsAmount = "0"; string Tax = "0"; //var customsConfig = Hyt.BLL.Config.Config.Instance.GetCustomsConfig(); string dxpid = "DXPENT0000012770"; //if(!string.IsNullOrEmpty(customsConfig.DxpId)) // dxpid = customsConfig.DxpId; StringBuilder sbHmac = new StringBuilder(); sbHmac.Append(merchantId); sbHmac.Append(serialNumber); sbHmac.Append(notifyUrl); amount = (order.CashPay * 100).ToString("F0"); Freight = (order.FreightAmount * 100).ToString("F0"); GoodsAmount = (order.ProductAmount * 100).ToString("F0"); Tax = (order.TaxFee * 100).ToString("F0"); sbHmac.Append(receiveAddress.Name); sbHmac.Append(receiveAddress.IDCardNo); sbHmac.Append(receiveAddress.MobilePhoneNumber); sbHmac.Append(CustomsChannel); sbHmac.Append(amount); sbHmac.Append(Freight); sbHmac.Append(GoodsAmount); sbHmac.Append(Tax); sbHmac.Append(dxpid); string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue); HttpClient client = new HttpClient(nodeAuthorizationURL); string data = "{\"merchantId\":\"" + merchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"notifyUrl\":\"" + notifyUrl + "\"" + ",\"payer\": {" + "\"payerName\": \"" + receiveAddress.Name + "\"," + "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," + "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" + "}" + ",\"customsInfos\":[{\"customsChannel\":\"" + CustomsChannel + "\",\"amount\":\"" + amount + "\",\"freight\":\"" + Freight + "\",\"goodsAmount\":\"" + GoodsAmount + "\",\"tax\":\"" + Tax + "\",\"dxpid\":\"" + dxpid + "\"}],\"hmac\":\"" + hmac + "\"}"; BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data, "EhkingCustomsLog"); string responsestr = client.Post(data); var back = JObject.Parse(responsestr); if (back["status"].ToString() == "SUCCESS") { result.Message = "提交成功!"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息报关提交成功!", LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0); } else if (back["status"].ToString() == "FAILED") { result.Message = "提交失败!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsLog"); } else if (back["status"].ToString() == "ERROR") { if (back["error"].ToString() == "exception.record.exists.customsOrder")//已提交则设置状态为待处理 { result.Message = "此订单已提交,请查询!"; Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); } else { result.Message = "提交失败,错误代码:" + back["error"].ToString(); } BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsERRORLog"); result.Status = false; } else { result.Message = "其他异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCustomsLog"); } //推送国检 //Hyt.BLL.ApiPay.EhkingCip.PayProvider.ApplyToCustoms(order); } } catch (Exception ex) { result.Message = "报错!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsLog"); } return(result); }
/// <summary> /// /// </summary> /// <param name="orderinfo"></param> /// <param name="isNotify"></param> /// <param name="apiKey"></param> /// <returns></returns> public static string CreateNotifyUrl(OrderBankInfo orderinfo, bool isNotify, string apiKey) { string notifyUrl = string.Empty; if (orderinfo == null || string.IsNullOrEmpty(apiKey)) { return(notifyUrl); } notifyUrl = isNotify ? orderinfo.notifyurl : orderinfo.returnurl; string r1Code = "0";//支付结果 string p1MerId = orderinfo.userid.ToString(CultureInfo.InvariantCulture); const string r0Cmd = "Buy"; if (orderinfo.status == 2 || orderinfo.status == 8) { r1Code = "1"; } string r2TrxId = orderinfo.orderid; string r3Amt = "0"; if (orderinfo.realvalue.HasValue) { r3Amt = decimal.Round(orderinfo.realvalue.Value, 2).ToString(CultureInfo.InvariantCulture); } const string r4Cur = "RMB"; string r5Pid = orderinfo.cus_subject; string r6Order = orderinfo.userorder; const string r7Uid = ""; string r8Mp = orderinfo.attach; string r9BType = "1"; if (isNotify) { r9BType = "2"; } string systime = ""; if (orderinfo.completetime.HasValue) { systime = orderinfo.completetime.Value.ToString("yyyy-MM-dd HH:mm:ss"); } string sbOld = ""; sbOld += p1MerId; sbOld += r0Cmd; sbOld += r1Code; sbOld += r2TrxId; sbOld += r3Amt; sbOld += r4Cur; sbOld += r5Pid; sbOld += r6Order; sbOld += r7Uid; sbOld += r8Mp; sbOld += r9BType; string nhmac = Digest.HmacSign(sbOld, apiKey); var parms = new StringBuilder(); parms.AppendFormat("p1_MerId={0}", FormatQueryString(p1MerId)); parms.AppendFormat("&r0_Cmd={0}", FormatQueryString(r0Cmd)); parms.AppendFormat("&r1_Code={0}", FormatQueryString(r1Code)); parms.AppendFormat("&r2_TrxId={0}", FormatQueryString(r2TrxId));//易宝支付交易流水号 parms.AppendFormat("&r3_Amt={0}", FormatQueryString(r3Amt)); parms.AppendFormat("&r4_Cur={0}", FormatQueryString(r4Cur)); parms.AppendFormat("&r5_Pid={0}", FormatQueryString(r5Pid)); //商品名称 parms.AppendFormat("&r6_Order={0}", FormatQueryString(r6Order)); //商户订单号 parms.AppendFormat("&r7_Uid={0}", FormatQueryString(r7Uid)); parms.AppendFormat("&r8_MP={0}", FormatQueryString(r8Mp)); parms.AppendFormat("&r9_BType={0}", FormatQueryString(r9BType)); //为“1”: 浏览器重定向; 为“2”: 服务器点对点通讯. parms.AppendFormat("&rb_BankId={0}", FormatQueryString(orderinfo.paymodeId)); //支付通道编码 parms.AppendFormat("&ro_BankOrderId={0}", FormatQueryString(orderinfo.supplierOrder)); parms.AppendFormat("&rp_PayDate={0}", FormatQueryString(systime)); parms.AppendFormat("&ro_BankOrderId={0}", FormatQueryString(orderinfo.supplierOrder)); parms.AppendFormat("&rq_CardNo={0}", FormatQueryString(string.Empty)); parms.AppendFormat("&ru_Trxtime={0}", FormatQueryString(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); parms.AppendFormat("&hmac={0}", FormatQueryString(nhmac)); if (notifyUrl.IndexOf("?", System.StringComparison.Ordinal) > 0) { notifyUrl = notifyUrl + "&" + parms.ToString(); } else { notifyUrl = notifyUrl + "?" + parms.ToString(); } return(notifyUrl); }
/// <summary> /// 查询订单明细 /// </summary> /// <param name="p1_MerId">商户编号</param> /// <param name="keyValue">商户密钥</param> /// <param name="p2_Order">商户订单号</param> /// <returns>BuyQueryOrdDetailResult</returns> public static BuyQueryOrdDetailResult QueryOrdDetail(string p2_Order) { string sbOld = ""; sbOld += "QueryOrdDetail"; sbOld += merchantId; sbOld += p2_Order; string hmac = Digest.HmacSign(sbOld, keyValue); logstr(p2_Order, sbOld, hmac); string para = ""; para += "?p0_Cmd=QueryOrdDetail"; para += "&p1_MerId=" + merchantId; //加入商家ID para += "&p2_Order=" + p2_Order; //加入购买订单号码 para += "&hmac=" + hmac; //加入校验码 logstr(p2_Order, queryRefundReqURL + para, ""); string reqResult = HttpUtils.SendRequest(queryRefundReqURL, para); //记录查询通讯返回 logstr(p2_Order, reqResult, ""); string r0_Cmd = FormatQueryString.GetQueryString("r0_Cmd", reqResult, '\n'); string r1_Code = FormatQueryString.GetQueryString("r1_Code", reqResult, '\n'); string p1_MerId = FormatQueryString.GetQueryString("p1_MerId", reqResult, '\n'); string r2_TrxId = FormatQueryString.GetQueryString("r2_TrxId", reqResult, '\n'); string r3_Amt = FormatQueryString.GetQueryString("r3_Amt", reqResult, '\n'); string r4_Cur = FormatQueryString.GetQueryString("r4_Cur", reqResult, '\n'); string r5_Pid = FormatQueryString.GetQueryString("r5_Pid", reqResult, '\n'); string r6_Order = FormatQueryString.GetQueryString("r6_Order", reqResult, '\n'); string r8_MP = FormatQueryString.GetQueryString("r8_MP", reqResult, '\n'); string rb_PayStatus = FormatQueryString.GetQueryString("rb_PayStatus", reqResult, '\n'); string rc_RefundCount = FormatQueryString.GetQueryString("rc_RefundCount", reqResult, '\n'); string rd_RefundAmt = FormatQueryString.GetQueryString("rd_RefundAmt", reqResult, '\n'); hmac = FormatQueryString.GetQueryString("hmac", reqResult, '\n'); //查单返回校验hmac sbOld = ""; sbOld += r0_Cmd; sbOld += r1_Code; sbOld += p1_MerId; sbOld += r2_TrxId; sbOld += r3_Amt; sbOld += r4_Cur; sbOld += r5_Pid; sbOld += r6_Order; sbOld += r8_MP; sbOld += rb_PayStatus; sbOld += rc_RefundCount; sbOld += rd_RefundAmt; string nhmac = Digest.HmacSign(sbOld, keyValue); logstr(p2_Order, sbOld, nhmac); if (hmac == nhmac) { BuyQueryOrdDetailResult result = new BuyQueryOrdDetailResult(r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r8_MP, rb_PayStatus, rc_RefundCount, rd_RefundAmt, hmac, ""); return(result); } else { BuyQueryOrdDetailResult result = new BuyQueryOrdDetailResult(r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r8_MP, rb_PayStatus, rc_RefundCount, rd_RefundAmt, hmac, "交易签名无效"); return(result); } }
/// <summary> /// 海关支付报关查询 /// </summary> /// <param name="orderId">订单编号</param> /// <returns></returns> /// <remarks>2015-12-31 杨浩 创建</remarks public override Result CustomsQuery(int orderId) { Result result = new Result() { Status = false }; var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderId); var ehkingMerchantId = config.EhkingMerhantId; var ehkingKey = config.EhkingKey; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = orderId, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; if (onlinePayments.Count() <= 0) { result.Status = false; result.Message = "订单没有支付信息!"; } else { string responsestr = ""; string data = ""; try { string serialNumber = onlinePayments.First().VoucherNo; string url = "https://api.ehking.com/customs/query";//查询网关 string hmac = Digest.HmacSign(ehkingMerchantId + serialNumber, ehkingKey); HttpClient client = new HttpClient(url); data = "{\"merchantId\":\"" + ehkingMerchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"hmac\":\"" + hmac + "\"}"; responsestr = client.Post(data); var back = JObject.Parse(responsestr); var customsInfos = back.Property("customsInfos") != null ? back["customsInfos"][0] : back; OrderStatus.支付报关状态 status = OrderStatus.支付报关状态.失败; if (customsInfos["status"].ToString() == "SUCCESS") { result.Message = "SUCCESS"; result.Status = true; status = OrderStatus.支付报关状态.成功; } else if ("PROCESSING" == customsInfos["status"].ToString()) { result.Message = "海关正在审核...,稍后再查询!"; status = OrderStatus.支付报关状态.处理中; } else { //BLL.Log.LocalLogBo.Instance.Write("失败!" + responsestr, "CustomsQueryLog"); result.Message = "易宝返回状态:" + customsInfos["status"].ToString() + "(" + (back.Property("customsInfos") == null?customsInfos["error"].ToString():"") + ")"; } Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)status, 0, orderId); } catch (Exception ex) { result.Status = false; result.Message = "系统异常!"; BLL.Log.LocalLogBo.Instance.Write("\r\n报错!" + ex.Message + ";responsestr=" + responsestr + ";data=" + data, "CustomsQuery"); } } return(result); }
public static QueryOrdResult QueryOrder(string p1_MerId, string keyValue, string p2_Order) { string aValue = ""; aValue = (aValue + "QueryOrdDetail") + p1_MerId + p2_Order; string para = ""; para = (((para + "?p0_Cmd=QueryOrdDetail") + "&p1_MerId=" + p1_MerId) + "&p2_Order=" + p2_Order) + "&hmac=" + Digest.HmacSign(aValue, keyValue); string strUrl = HttpUtils.SendRequest(nodeAuthorizationURL, para); string str4 = FormatQueryString.GetQueryString("r0_Cmd", strUrl, '\n'); string returnCode = FormatQueryString.GetQueryString("r1_Code", strUrl, '\n'); string returnTrxId = FormatQueryString.GetQueryString("r2_TrxId", strUrl, '\n'); string returnAmt = FormatQueryString.GetQueryString("r3_Amt", strUrl, '\n'); string str8 = FormatQueryString.GetQueryString("r4_Cur", strUrl, '\n'); string returnPid = FormatQueryString.GetQueryString("r5_Pid", strUrl, '\n'); string returnOrder = FormatQueryString.GetQueryString("r6_Order", strUrl, '\n'); string returnAllPara = FormatQueryString.GetQueryString("r8_MP", strUrl, '\n'); string returnStatus = FormatQueryString.GetQueryString("rb_PayStatus", strUrl, '\n'); string returnRefundCount = FormatQueryString.GetQueryString("rc_RefundCount", strUrl, '\n'); string str14 = FormatQueryString.GetQueryString("rd_RefundAmt", strUrl, '\n'); string str15 = FormatQueryString.GetQueryString("hmac", strUrl, '\n'); return(new QueryOrdResult(returnCode, returnTrxId, returnAmt, returnPid, returnOrder, returnStatus, returnAllPara, returnAmt, returnRefundCount)); }
/// <summary> /// 广州电子口岸海关申报 /// </summary> /// <returns></returns> public override Result ApplyToCustomsDZ30(SoOrder order) { var result = base.ApplyToCustomsDZ30(order); try { if (order != null) { var ehkingMerchantId = config.EhkingMerhantId; var ehkingKey = config.EhkingKey; string EhkingNodeAuthorizationUrl = "https://api.ehking.com/customs/order"; string EhkingCustomsAsyncUrl = "http://admin.gaopin999.com/Account/NotifyReceiptDZ30"; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); string nodeAuthorizationURL = EhkingNodeAuthorizationUrl; //请求地址 string merchantId = ehkingMerchantId; //商户编号 string keyValue = ehkingKey; //商户密钥 string customsChannels = "GUANGZHOUSP"; //报关通道:GUANGZHOUSP(广州公共服务) string serialNumber = onlinePayments.First().VoucherNo; //支付流水号 string notifyUrl = EhkingCustomsAsyncUrl; //异步回调 string amount = "0"; //报关金额 string Freight = "0"; //运费 string GoodsAmount = "0"; //支付货款 string Tax = "0"; //税费 string insuredAmount = "0"; //保费 string merchantCommerceName = "广州鼎球生物科技有限公司"; //企业备案名称 string merchantCommerceCode = "C011111100393744"; //企业在海关的备案号 string storeHouse = ""; //商品所在仓 string customsCode = "5141"; //广州机场 5141;南沙旅检 5165;南沙货港 5167;番禺东发 5169;广州邮办 5145;黄埔开发区 5208;太平海关驻沙田办事处 5216;广州萝岗 5130;佛山海关快件监管现场 5185 string ciqCode = "442300"; //机场的国检组织机构代码是:000067;黄埔开发区的组织机构代码:000077,黄埔状元谷组织机构代码:443433 string functionCode = "BC"; //单向海关-CUS,单向国检-CIQ,同时发送-BC string businessType = "B2C"; //B2B2C,B2C StringBuilder sbHmac = new StringBuilder(); sbHmac.Append(merchantId); sbHmac.Append(serialNumber); sbHmac.Append(notifyUrl); amount = (order.CashPay * 100).ToString("F0"); Freight = (order.FreightAmount * 100).ToString("F0"); GoodsAmount = (order.ProductAmount * 100).ToString("F0"); Tax = (order.TaxFee * 100).ToString("F0"); sbHmac.Append(receiveAddress.Name); sbHmac.Append(receiveAddress.IDCardNo); sbHmac.Append(receiveAddress.MobilePhoneNumber); sbHmac.Append(customsChannels); sbHmac.Append(amount); sbHmac.Append(Freight); sbHmac.Append(GoodsAmount); sbHmac.Append(Tax); sbHmac.Append(insuredAmount); sbHmac.Append(merchantCommerceName); sbHmac.Append(merchantCommerceCode); sbHmac.Append(storeHouse); sbHmac.Append(customsCode); sbHmac.Append(ciqCode); sbHmac.Append(functionCode); sbHmac.Append(businessType); string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue); HttpClient client = new HttpClient(nodeAuthorizationURL); string data = "{\"merchantId\":\"" + merchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"notifyUrl\":\"" + notifyUrl + "\"" + ",\"payer\": {" + "\"payerName\": \"" + receiveAddress.Name + "\"," + "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," + "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" + "}" + ",\"customsInfos\":[{\"customsChannel\":\"" + customsChannels + "\",\"amount\":\"" + amount + "\",\"freight\":\"" + Freight + "\",\"goodsAmount\":\"" + GoodsAmount + "\",\"tax\":\"" + Tax + "\",\"insuredAmount\":\"" + insuredAmount + "\",\"merchantCommerceName\":\"" + merchantCommerceName + "\",\"merchantCommerceCode\":\"" + merchantCommerceCode + "\",\"storeHouse\":\"" + storeHouse + "\",\"customsCode\":\"" + customsCode + "\",\"ciqCode\":\"" + ciqCode + "\",\"functionCode\":\"" + functionCode + "\",\"businessType\":\"" + businessType + "\"}],\"hmac\":\"" + hmac + "\"}"; string responsestr = client.Post(data); BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data + ",------返回数据:" + responsestr, "EhkingCustomsDZ30Log"); var back = JObject.Parse(responsestr); if (back["status"].ToString() == "SUCCESS") { result.Message = "提交成功!"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息报关提交成功!", LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0); } else if (back["status"].ToString() == "FAILED") { result.Message = "提交失败!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsDZ30Log"); } else if (back["status"].ToString() == "ERROR") { if (back["error"].ToString() == "exception.record.exists.customsOrder")//已提交则设置状态为待处理 { //result.Message = "此订单已提交,请查询!"; //Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); result = CustomsQuery(order.SysNo); return(result); } else { result.Message = "提交失败,错误代码:" + back["error"].ToString(); } BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsDZ30ERRORLog"); result.Status = false; } else { result.Message = "其他异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCustomsDZ30Log"); } } } catch (Exception ex) { result.Message = "报错!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsDZ30Log"); } return(result); }
/// <summary> /// 海关报关 /// </summary> /// <returns></returns> /// <remarks>2016-12-26 周 创建</remarks> public static Result ApplyToCustoms(SoOrder order) { Result result = new Result() { Status = false }; try { if (order != null) { var ehkingMerchantId = EhkingMerhantId; var ehkingKey = EhkingKey; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); string merchantId = ehkingMerchantId; //商户号 string paySerialNumber = onlinePayments.First().VoucherNo; //支付流水号 string notifyUrl = "http://admin.gaopin999.com/Account/NotifyReceiptCip"; //支付成功后易汇金支付会向该地址发送两次成功通知,该地址可以带参数 string nodeAuthorizationURL = EhkingNodeAuthorizationUrl; string keyValue = ehkingKey; string amount = "0"; StringBuilder sbHmac = new StringBuilder(); sbHmac.Append(merchantId); sbHmac.Append(paySerialNumber); sbHmac.Append(notifyUrl); amount = (order.OrderAmount * 100).ToString("F0"); sbHmac.Append(receiveAddress.Name); //用户姓名 sbHmac.Append(receiveAddress.IDCardNo); //证件号码 sbHmac.Append(receiveAddress.MobilePhoneNumber); //手机号码 sbHmac.Append(CustomsChannel); //海关通道 sbHmac.Append(ciqCode); //国检组织代码 sbHmac.Append(amount); //支付金额,单位:分 sbHmac.Append(commerceCode); //国检备案号 sbHmac.Append(commerceName); //国检组织代码 string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue); HttpClient client = new HttpClient(nodeAuthorizationURL); string data = "{\"merchantId\":\"" + merchantId + "\",\"paySerialNumber\":\"" + paySerialNumber + "\",\"notifyUrl\":\"" + notifyUrl + "\"" + ",\"payer\": {" + "\"payerName\": \"" + receiveAddress.Name + "\"," + "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," + "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" + "}" + ",\"ciqInfos\":[{\"ciqChannel\":\"" + CustomsChannel + "\",\"ciqCode\":\"" + ciqCode + "\",\"amount\":\"" + amount + "\",\"commerceCode\":\"" + commerceCode + "\",\"commerceName\":\"" + commerceName + "\"}],\"hmac\":\"" + hmac + "\"}"; string responsestr = client.Post(data); BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data + ",-------返回数据:" + responsestr, "EhkingCipLog"); var back = JObject.Parse(responsestr); if (back["status"].ToString() == "SUCCESS") { result.Message = "提交成功!"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付申报国检状态.处理中, 4, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "订单编号:" + order.SysNo + ",支付信息报检提交成功!", LogStatus.系统日志目标类型.订单支付申报国检, order.SysNo, 0); } else if (back["status"].ToString() == "FAILED") { result.Message = "提交失败!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCipERRORLog"); } else if (back["status"].ToString() == "ERROR") { if (back["error"].ToString() == "exception.record.exists") { //Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付申报国检状态.处理中, 4, order.SysNo); result = CustomsQuery(order.SysNo); return(result); } else { result.Message = "提交失败,错误代码:" + back["error"].ToString(); } BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCipERRORLog"); result.Status = false; } else { result.Message = "其他异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCipLog"); } } } catch (Exception ex) { result.Message = "报错!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsLog"); } return(result); }