public ActionResult TenpayBase(SitePayAPI p_spapi) { SitePayAPI m_sp = SitePayAPI.GetModel(t => t.ApiType == "财付通"); if (IsGet) { SetSaveFormCollection = b_BLL_SitePayAPI.NameValueCollectionEx(ref m_sp); } if (IsPost) try { p_spapi.id = m_sp.id; b_BLL_SitePayAPI.AESitePayAPI(this, true, ref p_spapi); } catch (Exception ce) { IsSaveForm = true; ExceptionEx.MyExceptionLog.WriteLog(this, ce); } return View(p_spapi ?? new SitePayAPI()); }
static Config() { //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ SitePayAPI m_entity = SitePayAPI.GetModel(t => t.ApiType == "支付宝"); //合作身份者ID,以2088开头由16位纯数字组成的字符串 partner = m_entity.AppIdentity; //交易安全检验码,由数字和字母组成的32位字符串 key = m_entity.AppKey; //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ //字符编码格式 目前支持 gbk 或 utf-8 input_charset = "utf-8"; //签名方式,选择项:RSA、DSA、MD5 sign_type = "MD5"; }
public AlipayConfig() { //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ SitePayAPI m_pay = SitePayAPI.GetModel(t => t.ApiType == "支付宝"); //合作身份者ID,以2088开头由16位纯数字组成的字符串 partner = m_pay.AppIdentity; //交易安全检验码,由数字和字母组成的32位字符串 key = m_pay.AppKey; //签约支付宝账号或卖家支付宝帐户 seller_email = m_pay.Account; //付完款后跳转的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数 return_url = WebCacheHelper.GetSiteInfo().WebAddress + "/Alipay/Alipay_Return"; //交易过程中服务器通知的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数 notify_url = WebCacheHelper.GetSiteInfo().WebAddress + "/Alipay/Alipay_Notify"; //网站商品的展示地址,不允许加?id=123这类自定义参数 show_url = WebCacheHelper.GetSiteInfo().WebAddress; //收款方名称,如:公司名称、网站名称、收款人姓名等 mainname = "Site Name"; //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ //字符编码格式 目前支持 gbk 或 utf-8 input_charset = "utf-8"; //签名方式 不需修改 sign_type = "MD5"; //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http transport = "http"; }
/// <summary> /// 跳转支付函数 /// </summary> /// <param name="orderId"></param> /// <returns></returns> public ActionResult Checkout(string Order_UID, string Retaion_UID) { string HomeUrl = SiteInfo.GetModel(t => t.id != 0).WebAddress; SitePayAPI m_entity = SitePayAPI.GetModel(t => t.ApiType == "财付通"); v_mid = m_entity.AppIdentity.ToString2(); // 商户号,这里为测试商户号20000400,替换为自己的商户号即可 v_url = HomeUrl + "/CBPayMenForOrder/CBPayMen_Return";; // 商户自定义返回接收支付结果的页面 // MD5密钥要跟订单提交页相同,如Send.asp里的 key = "test" ,修改""号内 test 为您的密钥 string key = m_entity.AppKey.ToString2(); // 如果您还没有设置MD5密钥请登陆我们为您提供商户后台,地址:https://merchant3.chinabank.com.cn/ // 登陆后在上面的导航栏里可能找到“资料管理”,在资料管理的二级导航栏里有“MD5密钥设置” // 建议您设置一个16位以上的密钥或更高,密钥最多64位,但设置16位已经足够了 //应付金额 double?PayMoney = 0; //会员编号 string Member_UID = string.Empty; //订单编号集合 string OrderUIDLIST = string.Empty; //if (!string.IsNullOrEmpty(Retaion_UID)) //{ // List<Orders> order_list = Orders.GetModelList(t => t.O_Relation_UID == Retaion_UID).List; // foreach (var item in order_list) // { // PayMoney += item.O_PayMoney; // Member_UID = item.Member_UID; // OrderUIDLIST += item.O_UID + ","; // } //} //else //{ // Orders m_order = Orders.GetModel(t => t.O_UID == Order_UID); // PayMoney = m_order.O_PayMoney; // Member_UID = m_order.Member_UID; // OrderUIDLIST += m_order.O_UID + ","; //} //网站这边订单号 v_oid = OrderUIDLIST; //Request["v_oid"]; v_amount = PayMoney.ToString2(); if (v_oid == null || v_oid.Equals("")) { DateTime dt = DateTime.Now; string v_ymd = dt.ToString("yyyyMMdd"); // yyyyMMdd string timeStr = dt.ToString("HHmmss"); // HHmmss v_oid = v_ymd + v_mid + timeStr; } #region 支付 v_moneytype = "CNY"; if (PayMoney > 0 && !string.IsNullOrEmpty(OrderUIDLIST)) { string text = v_amount + v_moneytype + v_oid + v_mid + v_url + key; // 拼凑加密串 v_md5info = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(text, "md5").ToUpper(); remark1 = "支付订单:" + v_oid; // Request["remark1"]; remark2 = ""; //Request["remark2"]; StringBuilder sHtmlText = new StringBuilder(); sHtmlText.AppendLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); sHtmlText.AppendLine(" <html xmlns=\"http://www.w3.org/1999/xhtml\" >"); sHtmlText.AppendLine(" <head runat=\"server\">"); sHtmlText.AppendLine(" <title>订单提交</title>"); sHtmlText.AppendLine(" </head>"); sHtmlText.AppendLine(" <body >"); sHtmlText.AppendLine(" <body onLoad=\"javascript:document.E_FORM.submit()\">"); sHtmlText.AppendLine(" <form action=\"https://pay3.chinabank.com.cn/PayGate?encoding=UTF-8\" accept-charset=\"utf-8\" method=\"post\" name=\"E_FORM\">"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_md5info\" value=\"" + v_md5info + "\" size=\"100\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_mid\" value=\"" + v_mid + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_oid\" value=\"" + v_oid + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_amount\" value=\"" + v_amount + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_moneytype\" value=\"" + v_moneytype + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_url\" value=\"" + v_url + "\" />"); sHtmlText.AppendLine(" <!--以下几项项为网上支付完成后,随支付反馈信息一同传给信息接收页-->"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"remark1\" value=\"" + remark1 + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"remark2\" value=\"" + remark2 + "\" />"); //sHtmlText.AppendLine(" <!--以下几项只是用来记录客户信息,可以不用,不影响支付 -->"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_rcvname\" value=\"" + v_rcvname + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_rcvaddr\" value=\"" + v_rcvaddr + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_rcvtel\" value=\"" + v_rcvtel + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_rcvpost\" value=\"" + v_rcvpost + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_rcvemail\" value=\"" + v_rcvemail + "\" />"); sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_rcvmobile\" value=\"" + v_rcvmobile + "\" />"); //sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_ordername\" value=\"<%=v_ordername%>\" />"); //sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_orderaddr\" value=\"<%=v_orderaddr%>\" />"); //sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_ordertel\" value=\"<%=v_ordertel%>\" />"); //sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_orderpost\" value=\"<%=v_orderpost%>\" />"); //sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_orderemail\" value=\"<%=v_orderemail%>\" />"); //sHtmlText.AppendLine(" <input type=\"hidden\" name=\"v_ordermobile\" value=\"<%=v_ordermobile%>\" />"); sHtmlText.AppendLine(" </form>"); sHtmlText.AppendLine(" </body>"); sHtmlText.AppendLine(" </html>"); return(Content(sHtmlText.ToString())); } #endregion return(Content("该订单流水号不存在!")); }
/// <summary> /// 跳转支付函数 /// </summary> /// <param name="Order_UID"></param> /// <param name="Retaion_UID"></param> /// <returns></returns> public ActionResult Checkout_new(string Order_UID, string Retaion_UID, string bank) { SitePayAPI m_entity = SitePayAPI.GetModel(t => t.ApiType == "支付宝"); Model.SiteInfo siteinfo = Model.SiteInfo.GetModel(t => t.id != 0); ///////////////////////以下参数是需要设置的相关配置参数,设置后不会更改的/////////////////////////// AlipayConfig con = new AlipayConfig(); //########################################## ///////////////////////以下参数是需要通过下单时的订单数据传入进来获得//////////////////////////////// //应付金额 double?PayMoney = 0; //会员编号 string Member_UID = string.Empty; //订单编号集合 string OrderUIDLIST = string.Empty; //if (!string.IsNullOrEmpty(Retaion_UID)) //{ // List<Orders> order_list = Orders.GetModelList(t => t.O_Relation_UID == Retaion_UID).List; // string _dj_pay = string.Empty; // foreach (var item in order_list) // { // if (item.O_PayStyle == 3) // _dj_pay = "3"; // PayMoney += item.O_PayMoney; // Member_UID = item.Member_UID; // OrderUIDLIST += item.O_UID + ","; // } // PayMoney = string.IsNullOrEmpty(_dj_pay) ? PayMoney : PayMoney * 0.3; //} //else //{ // Orders m_order = Orders.GetModel(t => t.O_UID == Order_UID); // PayMoney = m_order.O_PayMoney; // PayMoney = m_order.O_PayStyle != 3 ? PayMoney : PayMoney * 0.3; // Member_UID = m_order.Member_UID; // OrderUIDLIST += m_order.O_UID + ","; //} if (PayMoney > 0 && !string.IsNullOrEmpty(OrderUIDLIST)) { ////////////////////////////////////////////请求参数//////////////////////////////////////////// //支付类型 string payment_type = "1"; //必填,不能修改 //服务器异步通知页面路径 string notify_url = siteinfo.WebAddress + "/AlipayForOrder/Alipay_Notify"; //需http://格式的完整路径,不能加?id=123这类自定义参数 //页面跳转同步通知页面路径 string return_url = siteinfo.WebAddress + "/AlipayForOrder/Alipay_Return"; //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ //卖家支付宝帐户 string seller_email = m_entity.Account; //必填 //商户订单号 string out_trade_no = OrderUIDLIST.Trim(); //商户网站订单系统中唯一订单号,必填 //订单名称 string subject = "会员[" + Member_UID + "] 支付订单"; //必填 //付款金额 string total_fee = PayMoney.ToDouble2().ToString("0.00"); //必填 //订单描述 string body = ""; //默认支付方式 string paymethod = "bankPay"; //必填 //默认网银 string defaultbank = string.IsNullOrEmpty(bank) ? "CCB" : bank; //必填,银行简码请参考接口技术文档 //商品展示地址 string show_url = con.Show_url; //需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html //防钓鱼时间戳 string anti_phishing_key = ""; //若要使用请调用类文件submit中的query_timestamp函数 //客户端的IP地址 string exter_invoke_ip = ""; //非局域网的外网IP地址,如:221.0.0.1 //////////////////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>(); sParaTemp.Add("partner", Config.Partner); sParaTemp.Add("_input_charset", Config.Input_charset.ToLower()); sParaTemp.Add("service", "create_direct_pay_by_user"); sParaTemp.Add("payment_type", payment_type); sParaTemp.Add("notify_url", notify_url); sParaTemp.Add("return_url", return_url); sParaTemp.Add("seller_email", seller_email); sParaTemp.Add("out_trade_no", out_trade_no); sParaTemp.Add("subject", subject); sParaTemp.Add("total_fee", total_fee); sParaTemp.Add("body", body); sParaTemp.Add("paymethod", paymethod); sParaTemp.Add("defaultbank", defaultbank); sParaTemp.Add("show_url", show_url); sParaTemp.Add("anti_phishing_key", anti_phishing_key); sParaTemp.Add("exter_invoke_ip", exter_invoke_ip); //建立请求 string sHtmlText = Submit.BuildRequest(sParaTemp, "get", "确认"); return(Content(sHtmlText)); } return(Content("该订单流水号不存在!")); }
/// <summary> /// 回调方法 /// </summary> /// <returns></returns> public ActionResult Tenpay_Return() { bool isSuccess = false; string AcitonCate = string.Empty; try { /* * attach=&bargainor_id=1208389301&cmdno=1&date=20120111&fee_type=1&pay_info=OK&pay_result=0&pay_time=1326291710&sign=0925C26EA436BAC80010E7F3F6C9FAE3&sp_billno=2220091839&total_fee=1&transaction_id=1208389301201201112220091839&ver=1 */ PayResponseHandler resHandler = new PayResponseHandler(System.Web.HttpContext.Current); SitePayAPI m_entity = SitePayAPI.GetModel(t => t.ApiType == "财付通"); resHandler.setKey(m_entity.AppKey); //判断签名 if (resHandler.isTenpaySign()) { string orderid = resHandler.getParameter("attach"); string cate = resHandler.getParameter("desc"); string total_fee = resHandler.getParameter("total_fee"); SqlTranEx.SqlTranExtensions _STE = new SqlTranEx.SqlTranExtensions(); #region 付款成功之后的操作 switch (cate) { } #endregion isSuccess = _STE.ExecuteSqlTran(); } } catch (Exception ex) { return(Content("error-4" + ex.Message.ToString())); } if (isSuccess) { if (AcitonCate == "充值") { return(RedirectToAction("MemberAccountInfo", "MSComm")); } else if (AcitonCate == "活动付款") { return(RedirectToAction("SignUpSuccess", "Home")); } else if (AcitonCate == "会员卡") { return(RedirectToAction("MemberCardLog", "MSComm")); } return(RedirectToAction("MemberAccountInfo", "MSComm")); } else { if (AcitonCate == "充值") { return(RedirectToAction("MemberAccountInfo", "MSComm")); } else if (AcitonCate == "活动付款") { return(RedirectToAction("SignUpFailed", "Home", new { msg = "支付失败,请重新核对支付信息后重新支付" })); } else if (AcitonCate == "会员卡") { return(RedirectToAction("MemberCardLog", "MSComm")); } return(RedirectToAction("SignUpFailed", "Home", new { msg = "支付失败,请重新核对支付信息后重新支付" })); } }
/// <summary> /// 回调地址 /// </summary> /// <returns></returns> public ActionResult Tenpay_Return() { bool isSuccess = false; try { /* * attach=&bargainor_id=1208389301&cmdno=1&date=20120111&fee_type=1&pay_info=OK&pay_result=0&pay_time=1326291710&sign=0925C26EA436BAC80010E7F3F6C9FAE3&sp_billno=2220091839&total_fee=1&transaction_id=1208389301201201112220091839&ver=1 */ PayResponseHandler resHandler = new PayResponseHandler(System.Web.HttpContext.Current); SitePayAPI m_entity = SitePayAPI.GetModel(t => t.ApiType == "财付通"); resHandler.setKey(m_entity.AppKey); //判断签名 if (resHandler.isTenpaySign()) { //交易单号---时间:2012-03-29 21:11 已更新 //string transaction_id = resHandler.getParameter("transaction_id"); // reqHandler.setParameter("attach", orderid); //订单ID string orderid = resHandler.getParameter("attach"); //金额金额,以分为单位 string total_fee = resHandler.getParameter("total_fee"); //支付结果 string pay_result = resHandler.getParameter("pay_result"); if (string.IsNullOrEmpty(orderid)) { return(Content("error-7")); } if (!"0".Equals(pay_result)) { return(Content("error-8")); } lock (this) { string[] OrderListUID = orderid.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); SqlTranEx.SqlTranExtensions _STE = new SqlTranEx.SqlTranExtensions(); //for (int i = 0; i < OrderListUID.Length; i++) //{ // Orders m_now_orders = Orders.GetModel(t => t.O_UID == OrderListUID[i].ToString2()); // if (!m_now_orders.IsNull && m_now_orders.O_IsPay == false) // { // #region 更改订单信息 // m_now_orders.O_IsPay = true; // m_now_orders.O_Status = CommonEnumHelper.OrderStatus.已付款.ToString2(); // m_now_orders.O_PayTime = DateTime.Now; // m_now_orders.Update(_STE); // #endregion // #region 更改商家帐户信息 // MemberAccount m_store_account = MemberAccount.GetModel(t => t.M_UID == m_now_orders.Store_UID); // if (m_store_account.IsNull) // return Content("Error"); // else // { // m_store_account.M_LockBalance += m_now_orders.O_StoreGetMoney; // m_store_account.Update(_STE); // } // #endregion // #region 更改会员经验值 // MemberAccount m_member_account = MemberAccount.GetModel(t => t.M_UID == m_now_orders.Member_UID); // #endregion // #region 增加会员账户消费记录信息 // MemberAccountLog m_mal = new MemberAccountLog(); //表名:MemberAccountLog 备注:会员账户消费记录 // m_mal.M_UID = m_now_orders.Member_UID; //M_UID[Type=string] - 会员唯一编号 // m_mal.MA_UID = Common.Globals.CreateNewUniqueID(); // m_mal.M_Cate = CommonEnumHelper.AccountCate.现金.ToString2(); //M_Cate[Type=string] - 分类(积分/现金) // m_mal.M_PayCate = CommonEnumHelper.AccountLogCate.支出.ToString2(); //M_PayCate[Type=string] - 收入/支出类型 // m_mal.M_ObjectMoney = m_now_orders.O_PayMoney; //M_ObjectMoney[Type=double?] - 操作金额 // m_mal.M_BalanceMoney = m_member_account.M_AvailableBalance; //M_BalanceMoney[Type=double?] - 账户余额 // m_mal.M_Remark = "支付订单(订单编号:" + m_now_orders.O_UID + ")"; //M_Remark[Type=string] - 备注 // m_mal.M_Status = ""; //M_Status[Type=string] - 当前状态 // m_mal.M_Time = DateTime.Now; //M_Time[Type=DateTime?] - 时间 // m_mal.Add(_STE); // #endregion // #region 增加商家账户消费记录信息 // MemberAccountLog m_mal_s = new MemberAccountLog(); //表名:MemberAccountLog 备注:会员账户消费记录 // m_mal_s.M_UID = m_now_orders.Store_UID; //M_UID[Type=string] - 会员唯一编号 // m_mal_s.MA_UID = Common.Globals.CreateNewUniqueID(); // m_mal_s.M_Cate = CommonEnumHelper.AccountCate.现金.ToString2(); //M_Cate[Type=string] - 分类(积分/现金) // m_mal_s.M_PayCate = CommonEnumHelper.AccountLogCate.收入.ToString2(); //M_PayCate[Type=string] - 收入/支出类型 // m_mal_s.M_ObjectMoney = m_now_orders.O_StoreGetMoney; //M_ObjectMoney[Type=double?] - 操作金额 // m_mal_s.M_BalanceMoney = m_store_account.M_AvailableBalance; //M_BalanceMoney[Type=double?] - 账户余额 // m_mal_s.M_Remark = "订单收款(订单编号:" + m_now_orders.O_UID + "),所得金额现为锁定状态,需等买家确认收货/消费后自动解锁"; //M_Remark[Type=string] - 备注 // m_mal_s.M_Status = ""; //M_Status[Type=string] - 当前状态 // m_mal_s.M_Time = DateTime.Now; //M_Time[Type=DateTime?] - 时间 // m_mal_s.Add(_STE); // #endregion // isSuccess = _STE.ExecuteSqlTran(); // } //} } } } catch (Exception ex) { return(Content(ex.ToString())); } if (isSuccess) { return(RedirectToAction("OrderPaySuccess", "Order")); } else { return(RedirectToAction("OrderPayFailure", "Order", new { msg = "订单支付失败,请重新核对订单信息及支付信息后重新支付" })); } }