public object PayMerchScanDyna(AppPayRequest param) { try { int cid = param.CID; var storeId = param.StoreId; string mapcid = string.Empty; //查询门店支付授权 var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_A, out mapcid);//26=主扫支付apicode if (!authorization.Successed) { throw new MessageException(authorization.Message); } var payStoreId = authorization.Data.ToString();//中转第三方门店号 //验证用户信息 if (!string.IsNullOrEmpty(param.MemberId)) { var veriMemberIntegral = VeriMemberIntegral(param.MemberId, param.UseIntegral); if (!veriMemberIntegral.Successed) { throw new MessageException(veriMemberIntegral.Message); } } if (param.PayToken.Length == 0 || param.PayToken.Length > 128) { throw new MessageException("扫码二维码有误!"); } string out_trade_no = new AppPayOrderSn(cid, storeId).ToString(); string create_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var pay_notify_url = Pharos.Utility.Config.GetAppSettings("qctpaynotifyurl");//回调地址 var goods_name = ""; //var goods_desc = ""; //判断用户积分使用 #region 积分记录 IntegralFlows reduceIntegral = new IntegralFlows() { CompanyId = cid, StoreId = storeId, FlowSN = out_trade_no, Amount = param.TotalAmount, Integral = -param.UseIntegral, DiscountAmount = param.DiscountAmount, CardSN = param.CardSN, Received = param.Received, Remark = "", State = 0, CreateDate = DateTime.Now, MemberId = param.MemberId, Alias = param.Alias }; IntegralFlows addIntegral = new IntegralFlows() { CompanyId = cid, StoreId = storeId, FlowSN = out_trade_no, Amount = param.TotalAmount, Integral = param.GetIntegral, DiscountAmount = param.DiscountAmount, CardSN = param.CardSN, Received = param.Received, Remark = "", State = 0, CreateDate = DateTime.Now, MemberId = param.MemberId, Alias = param.Alias }; IntegralFlowsService.Add(reduceIntegral, false); IntegralFlowsService.Add(addIntegral); #endregion var reqParams = new SortedDictionary <string, object>(); reqParams.Add("charset", PayConst.CHARSET); reqParams.Add("method", PayConst.QCTTRADE_PAY_MERCHSCAN); reqParams.Add("mch_id", mapcid); reqParams.Add("store_id", payStoreId); reqParams.Add("device_id", param.Device_id); reqParams.Add("sign_type", PayConst.SIGNTYPE); reqParams.Add("version", PayConst.VERSION); reqParams.Add("out_trade_no", out_trade_no); reqParams.Add("create_date", create_date); reqParams.Add("total_amount", param.Received); reqParams.Add("buyer_pay_token", param.PayToken); reqParams.Add("pay_notify_url", pay_notify_url); reqParams.Add("buyer_mobile", ""); reqParams.Add("goods_name", goods_name); reqParams.Add("goods_desc", param.Remark); //签名 String sign = PayHelper.Sign(reqParams, authorization.Message); reqParams.Add("sign", sign); var obj = HttpClient.PayPost(Pharos.Utility.Config.GetAppSettings("qctscanpayurl"), reqParams); var result = JsonConvert.DeserializeObject <JObject>(obj); if (result.Property("return_code").Value.ToString() == "00000") { int state = 0; var rstate = result.Property("pay_status", true); switch (rstate) { default: case "NOTPAY": break; case "PAYSUCCESS": state = 1; break; case "PAYFAIL": state = 2; break; case "PAYCANCEL": state = 3; break; case "PAYTIMEOUT": state = 4; break; } AppPaymentRecords record = new AppPaymentRecords() { CompanyId = cid, StoreId = storeId, OrderSN = out_trade_no, TotalAmount = param.TotalAmount, DiscountAmount = param.DiscountAmount, Received = param.Received, ApiCode = PayConst.QCTAPICODE_A, PayChannel = result.Property("pay_channel", true), State = state, CreateDate = DateTime.Now, CreateUser = param.MemberId, ReturnData = obj, Alias = param.Alias, UserCode = param.UserCode, Remark = param.Remark }; AppPaymentRecordsService.Add(record); //成功 if (state == 1) { //更新会员积分信息 var diffIntegral = param.GetIntegral - param.UseIntegral; if (diffIntegral != 0) { UpdateMemberIntegral(param.MemberId, diffIntegral); } return(result.Property("receipt_amount", true)); } else {//状态不成功 return(result.Property("pay_status", true)); } } else { //失败 var errmsg = result.Property("return_msg").Value.ToString(); if (errmsg.Contains("支付渠道数据非法")) { errmsg = "请扫描微信或支付宝付款码!"; } throw new MessageException(errmsg); } } catch (Exception ex) { throw new MessageException(ex.Message); } }
public object PayBuyerScanDyna(AppPayRequest param) { try { int cid = param.CID; var storeId = param.StoreId; string mapcid = string.Empty; //查询门店支付授权 var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_P, out mapcid); if (!authorization.Successed) { throw new MessageException(authorization.Message); } var payStoreId = authorization.Data.ToString();//中转第三方门店号 if (!string.IsNullOrEmpty(param.MemberId)) { var veriMemberIntegral = VeriMemberIntegral(param.MemberId, param.UseIntegral); if (!veriMemberIntegral.Successed) { throw new MessageException(veriMemberIntegral.Message); } } string out_trade_no = new AppPayOrderSn(cid, storeId).ToString(); string create_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var pay_notify_url = Pharos.Utility.Config.GetAppSettings("qctpaynotifyurl");//回调地址 var goods_name = ""; //var goods_desc = ""; var reqParams = new SortedDictionary <string, object>(); reqParams.Add("charset", PayConst.CHARSET); reqParams.Add("method", PayConst.QCTTRADE_PAY_BUYERSCAN_DYNA); reqParams.Add("mch_id", mapcid); reqParams.Add("store_id", payStoreId); reqParams.Add("device_id", param.Device_id); reqParams.Add("sign_type", PayConst.SIGNTYPE); reqParams.Add("version", PayConst.VERSION); reqParams.Add("out_trade_no", out_trade_no); reqParams.Add("create_date", create_date); reqParams.Add("total_amount", param.Received); reqParams.Add("pay_notify_url", pay_notify_url); reqParams.Add("buyer_mobile", ""); reqParams.Add("goods_name", goods_name); reqParams.Add("goods_desc", param.Remark); //签名 String sign = PayHelper.Sign(reqParams, authorization.Message); reqParams.Add("sign", sign); var obj = HttpClient.PayPost(Pharos.Utility.Config.GetAppSettings("qctpayurl"), reqParams); var result = JsonConvert.DeserializeObject <JObject>(obj); if (result.Property("return_code").Value.ToString() == "00000") { //成功 //支付交易记录 AppPaymentRecords record = new AppPaymentRecords() { CompanyId = cid, StoreId = storeId, OrderSN = out_trade_no, TotalAmount = param.TotalAmount, DiscountAmount = param.DiscountAmount, Received = param.Received, ApiCode = PayConst.QCTAPICODE_P, State = 0, CreateDate = DateTime.Now, CreateUser = param.MemberId, Alias = param.Alias, UserCode = param.UserCode, Remark = param.Remark }; AppPaymentRecordsService.Add(record, false); //积分交易记录 //消耗 IntegralFlows reduceIntegral = new IntegralFlows() { CompanyId = cid, StoreId = storeId, FlowSN = out_trade_no, Amount = param.TotalAmount, Integral = -param.UseIntegral, DiscountAmount = param.DiscountAmount, CardSN = param.CardSN, Received = param.Received, Remark = "", State = 0, CreateDate = DateTime.Now, MemberId = param.MemberId, Alias = param.Alias }; //获取 IntegralFlows addIntegral = new IntegralFlows() { CompanyId = cid, StoreId = storeId, FlowSN = out_trade_no, Amount = param.TotalAmount, Integral = param.GetIntegral, DiscountAmount = param.DiscountAmount, CardSN = param.CardSN, Received = param.Received, Remark = "", State = 0, CreateDate = DateTime.Now, MemberId = param.MemberId, Alias = param.Alias }; //保存积分记录 IntegralFlowsService.Add(reduceIntegral, false); IntegralFlowsService.Add(addIntegral); return(new { OrderSN = out_trade_no, PayUrl = result.Property("pay_token").Value.ToString() }); } else { //失败 var errmsg = result.Property("return_msg").Value.ToString(); throw new MessageException(errmsg); } } catch (MessageException ex) { throw new MessageException(ex.Message); } catch (Exception ex) { throw new MessageException("支付失败,请稍后重试!"); } }