public static JObject createUrl(string from, string fromNo, string fee, string subject, string currentHost) { var now = DateTime.Now.ToString("yyyyMMddHHmmssfff"); var out_trade_no = now + CommonBusiness.CreateRandom(); //付款金额,必填 var total_fee = (double.Parse(fee)).ToString(); //订单名称,必填 if (string.IsNullOrEmpty(subject)) { subject = "微信支付"; } var content = GetUnifiedOrderResult(out_trade_no, total_fee, subject); // 本地数据维护 微信单位为分 var result = TradeBusiness.AddTrade(out_trade_no, from, fromNo, PaymentType.WechatPay, fee, subject, null, "0"); if (!(bool)result["Flg"]) { throw new Exception("本地数据维护失败"); } return(new JObject( new JProperty("Trade", ((JObject)result["Object"])["result"]), new JProperty("Content", content))); }
public static JObject createForm(string from, string fromNo, string fee, string subject, string returnUrl) { ////////////////////////////////////////////请求参数//////////////////////////////////////////// //商户订单号,商户网站订单系统中唯一订单号,必填 var now = DateTime.Now.ToString("yyyyMMddHHmmssfff"); var txnTime = DateTime.Now.ToString("yyyyMMddHHmmss"); var out_trade_no = now + CommonBusiness.CreateRandom(); //订单名称,必填 if (string.IsNullOrEmpty(subject)) { subject = "银联付款"; } //付款金额,必填 var total_fee = fee; //商品描述,可空 var body = string.Empty; //////////////////////////////////////////////////////////////////////////////////////////////// /** * 重要:联调测试时请仔细阅读注释! * * 产品:跳转网关支付产品<br> * 交易:消费:前台跳转,有前台通知应答和后台通知应答<br> * 日期: 2015-09<br> * 版本: 1.0.0 * 版权: 中国银联<br> * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br> * 提示:该接口参考文档位置:open.unionpay.com帮助中心 下载 产品接口规范 《网关支付产品接口规范》,<br> * 《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br> * 《全渠道平台接入接口规范 第3部分 文件接口》(对账文件格式说明)<br> * 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案: * 调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案 * 测试过程中产生的6位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案 * 2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。 * 交易说明:1)以后台通知或交易状态查询交易确定交易成功,前台通知不能作为判断成功的标准. * 2)交易状态查询交易(Form_6_5_Query)建议调用机制:前台类交易建议间隔(5分、10分、30分、60分、120分)发起交易查询,如果查询到结果成功,则不用再查询。(失败,处理中,查询不到订单均可能为中间状态)。也可以建议商户使用payTimeout(支付超时时间),过了这个时间点查询,得到的结果为最终结果。 */ Dictionary <string, string> param = new Dictionary <string, string>(); //以下信息非特殊情况不需要改动 param["version"] = "5.0.0"; //版本号 param["encoding"] = "UTF-8"; //编码方式 param["txnType"] = "01"; //交易类型 param["txnSubType"] = "01"; //交易子类 param["bizType"] = "000201"; //业务类型 param["signMethod"] = "01"; //签名方法 param["channelType"] = "08"; //渠道类型 param["accessType"] = "0"; //接入类型 param["frontUrl"] = SDKConfig.FrontUrl; //前台通知地址 param["backUrl"] = SDKConfig.BackUrl; //后台通知地址 param["currencyCode"] = "156"; //交易币种 //TODO 以下信息需要填写 param["merId"] = "777290058110048"; //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数 param["orderId"] = out_trade_no; //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则 param["txnTime"] = txnTime; //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss") param["txnAmt"] = total_fee; //交易金额,单位分,此处默认取demo演示页面传递的参数 //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据 //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_purchase.htm AcpService.Sign(param, System.Text.Encoding.UTF8); // 本地数据维护 银联单位为分 var result = TradeBusiness.AddTrade(out_trade_no, from, fromNo, PaymentType.Alipay, fee, subject, returnUrl, "0"); if (!(bool)result["Flg"]) { throw new Exception("本地数据维护失败"); } var content = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, System.Text.Encoding.UTF8);// 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向 return(new JObject( new JProperty("Trade", ((JObject)result["Object"])["result"]), new JProperty("Content", content))); }
public static JObject createForm(PaymentType paymentType, string from, string fromNo, string fee, string subject, string installmentTimes, bool isPC = false) { ////////////////////////////////////////////请求参数//////////////////////////////////////////// //商户订单号,商户网站订单系统中唯一订单号,必填 var now = DateTime.Now; var out_trade_no = now.ToString("yyyyMMddHHmmssfff") + CommonBusiness.CreateRandom(); var orderDate = now.ToString("yyyyMMddHHmmss"); //订单名称,必填 if (string.IsNullOrEmpty(subject)) { subject = "工行支付"; } //付款金额,必填 var total_fee = (double.Parse(fee)).ToString(); if (!isPC) { var tranData = CreateTranData(orderDate, out_trade_no, total_fee, installmentTimes); // 本地数据维护 支付宝单位为元 支付宝类型统一为alipay 不好区分 var result = TradeBusiness.AddTrade(out_trade_no, from, fromNo, PaymentType.ICBC, total_fee, subject, string.Empty, "0"); if (!(bool)result["Flg"]) { throw new Exception("本地数据维护失败"); } var bytes = Encoding.GetEncoding("gbk").GetBytes(tranData); var translateString = Convert.ToBase64String(bytes); var form = new StringBuilder(); var signs = CBCPayOnline.GetCheckInfo(tranData); form.Append("<h3>页面跳转中。。。</h3>"); //form.Append("<form style=\"display:none;\" id=\"payForm\" action=\"http://wap2.icbc.com.cn/servlet/ICBCWAPEBizServlet\" > "); form.Append("<form style=\"display:none;\" id=\"payForm\" action=\"https://mywap2.icbc.com.cn/ICBCWAPBank/servlet/ICBCWAPEBizServlet\" > "); form.Append("<INPUT NAME=\"interfaceName\" TYPE=\"text\" value=\"ICBC_WAPB_B2C\">"); form.Append("<INPUT NAME=\"interfaceVersion\" TYPE=\"text\" value=\"1.0.0.6\">"); form.Append("<INPUT NAME=\"tranData\" TYPE=\"text\" value=\"" + translateString + "\">"); form.Append("<INPUT NAME=\"merSignMsg\" TYPE=\"text\" value=\"" + signs[0] + "\">"); form.Append("<INPUT NAME=\"merCert\" TYPE=\"text\" value=\"" + signs[1] + "\">"); form.Append("<INPUT NAME=\"clientType\" TYPE=\"text\" value=\"0\">"); form.Append("</form>"); form.Append("<script>document.forms['payForm'].submit();</script>"); return(new JObject( new JProperty("Trade", ((JObject)result["Object"])["result"]), new JProperty("Content", form.ToString()))); } else { var tranData = CreateTranData_PC(orderDate, out_trade_no, total_fee, installmentTimes); // 本地数据维护 支付宝单位为元 支付宝类型统一为alipay 不好区分 var result = TradeBusiness.AddTrade(out_trade_no, from, fromNo, PaymentType.ICBC, total_fee, subject, string.Empty, "0"); if (!(bool)result["Flg"]) { throw new Exception("本地数据维护失败"); } var bytes = Encoding.GetEncoding("gbk").GetBytes(tranData); var translateString = Convert.ToBase64String(bytes); var form = new StringBuilder(); var signs = CBCPayOnline.GetCheckInfo(tranData); form.Append("<h3>页面跳转中。。。</h3>"); //form.Append("<form style=\"display:none;\" id=\"payForm\" action=\"http://wap2.icbc.com.cn/servlet/ICBCWAPEBizServlet\" > "); form.Append("<form style=\"display:none;\" id=\"payForm\" action=\"https://B2C.icbc.com.cn/servlet/ICBCINBSEBusinessServlet\" > "); form.Append("<INPUT NAME=\"interfaceName\" TYPE=\"text\" value=\"ICBC_PERBANK_B2C\">"); form.Append("<INPUT NAME=\"interfaceVersion\" TYPE=\"text\" value=\"1.0.0.11\">"); form.Append("<INPUT NAME=\"tranData\" TYPE=\"text\" value=\"" + translateString + "\">"); form.Append("<INPUT NAME=\"merSignMsg\" TYPE=\"text\" value=\"" + signs[0] + "\">"); form.Append("<INPUT NAME=\"merCert\" TYPE=\"text\" value=\"" + signs[1] + "\">"); //form.Append("<INPUT NAME=\"clientType\" TYPE=\"text\" value=\"0\">"); form.Append("</form>"); form.Append("<script>document.forms['payForm'].submit();</script>"); return(new JObject( new JProperty("Trade", ((JObject)result["Object"])["result"]), new JProperty("Content", form.ToString()))); } }
public static JObject createForm(PaymentType paymentType, string from, string fromNo, string fee, string subject, string returnUrl, string showUrl) { ////////////////////////////////////////////请求参数//////////////////////////////////////////// //商户订单号,商户网站订单系统中唯一订单号,必填 var now = DateTime.Now.ToString("yyyyMMddHHmmssfff"); var out_trade_no = now + CommonBusiness.CreateRandom(); //订单名称,必填 if (string.IsNullOrEmpty(subject)) { subject = "alipay"; } //付款金额,必填 var total_fee = (double.Parse(fee) / 100).ToString(); //商品描述,可空 var body = string.Empty; //////////////////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 var sParaTemp = new SortedDictionary <string, string>(); if (paymentType == PaymentType.Alipay) { sParaTemp.Add("service", Config.directService); sParaTemp.Add("anti_phishing_key", Config.anti_phishing_key); sParaTemp.Add("exter_invoke_ip", Config.exter_invoke_ip); } else { sParaTemp.Add("service", Config.service); sParaTemp.Add("show_url", showUrl); } sParaTemp.Add("partner", Config.partner); sParaTemp.Add("seller_id", Config.seller_id); sParaTemp.Add("_input_charset", Config.input_charset.ToLower()); sParaTemp.Add("payment_type", Config.payment_type); sParaTemp.Add("notify_url", Config.notify_url); sParaTemp.Add("return_url", Config.return_url); sParaTemp.Add("out_trade_no", out_trade_no); sParaTemp.Add("subject", subject); sParaTemp.Add("total_fee", total_fee); sParaTemp.Add("body", body); //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1 //如sParaTemp.Add("参数名","参数值"); // 本地数据维护 支付宝单位为元 支付宝类型统一为alipay 不好区分 var result = TradeBusiness.AddTrade(out_trade_no, from, fromNo, PaymentType.Alipay, fee, subject, returnUrl, "0"); if (!(bool)result["Flg"]) { throw new Exception("本地数据维护失败"); } //建立请求 //var content = Submit.BuildRequest(sParaTemp, "get", "确认"); //return new JObject( // new JProperty("Trade", ((JObject)result["Object"])["result"]), // new JProperty("Content", content)); DefaultAopClient client = new DefaultAopClient(ConfigurationManager.AppSettings["alipay.port"], ConfigurationManager.AppSettings["alipay.appId"], ConfigurationManager.AppSettings["alipay.privateKey"]); client.return_url = Config.return_url; AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request // alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); alipayRequest.SetNotifyUrl(Config.notify_url);//在公共参数中设置回跳和通知地址 alipayRequest.BizContent = "{" + string.Format(" \"out_trade_no\":\"{0}\"," + " \"total_amount\":{1}," + " \"subject\":\"{2}\"," + " \"seller_id\":\"{3}\"," + " \"product_code\":\"QUICK_WAP_PAY\"", out_trade_no, total_fee, subject, Config.seller_id) + " }"; //填充业务参数 var form = client.pageExecute(alipayRequest).Body; //调用SDK生成表单 if (form.IndexOf("<form id='alipaysubmit'") > -1) { form = form.Replace("<form id='alipaysubmit'", "<form style='display:none;' id='alipaysubmit'"); } form = "<h3>页面跳转中。。。</h3>" + form; return(new JObject( new JProperty("Trade", ((JObject)result["Object"])["result"]), new JProperty("Content", form))); }