Пример #1
0
        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)));
        }
Пример #2
0
        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)));
        }
Пример #3
0
        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())));
            }
        }
Пример #4
0
        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)));
        }