Пример #1
0
        /// <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));
            }
        }
Пример #2
0
        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()));
        }
Пример #3
0
        /// <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, "交易签名被篡改"));
            }
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        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));
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        /// <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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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));
        }
Пример #11
0
        /// <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));
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
        /// <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);
        }
Пример #14
0
        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);
                }
            }
        }
Пример #15
0
        /// <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);
        }
Пример #16
0
        /// <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);
        }
Пример #17
0
        /// <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);
            }
        }
Пример #18
0
        /// <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);
        }
Пример #19
0
        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));
        }
Пример #20
0
        /// <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);
        }
Пример #21
0
        /// <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);
        }