Beispiel #1
0
        protected override bool CheckNotifyData()
        {
            if (HttpContext.Current.Request.HttpMethod == "POST")
            {
                // 使用Dictionary保存参数
                Dictionary <string, string> resData = new Dictionary <string, string>();

                NameValueCollection coll = HttpContext.Current.Request.Form;

                string[] requestItem = coll.AllKeys;

                for (int i = 0; i < requestItem.Length; i++)
                {
                    resData.Add(requestItem[i], HttpContext.Current.Request.Form[requestItem[i]]);
                }

                // 返回报文中不包含UPOG,表示Server端正确接收交易请求,则需要验证Server端返回报文的签名
                if (AcpService.Validate(resData, Encoding.UTF8))
                {
                    Order.OrderNo     = resData.ContainsKey("orderId") ? resData["orderId"] : "";
                    Order.OrderAmount = resData.ContainsKey("txnAmt") ? Convert.ToDouble(GetGatewayParameterValue("txnAmt")) * 0.01 : 0.0;
                    Order.TradeNo     = resData.ContainsKey("queryId") ? resData["queryId"] : "";
                    if (resData["respMsg"].ToLower().Contains("success"))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.HttpMethod == "POST")
            {
                // 使用Dictionary保存参数
                Dictionary <string, string> resData = new Dictionary <string, string>();

                NameValueCollection coll = Request.Form;

                string[] requestItem = coll.AllKeys;

                for (int i = 0; i < requestItem.Length; i++)
                {
                    resData.Add(requestItem[i], Request.Form[requestItem[i]]);
                }

                //商户端根据返回报文内容处理自己的业务逻辑 ,DEMO此处只输出报文结果
                StringBuilder builder = new StringBuilder();
                LogHelper.Info("FrontRcvResponse", "receive front notify: " + SDKUtil.CreateLinkString(resData, false, true, System.Text.Encoding.UTF8));

                builder.Append("<tr><td align=\"center\" colspan=\"2\"><b>商户端接收银联返回报文并按照表格形式输出结果</b></td></tr>");

                for (int i = 0; i < requestItem.Length; i++)
                {
                    builder.Append("<tr><td width=\"30%\" align=\"right\">" + requestItem[i] + "</td><td style='word-break:break-all'>" + Request.Form[requestItem[i]] + "</td></tr>");
                }

                if (AcpService.Validate(resData, System.Text.Encoding.UTF8))
                {
                    builder.Append("<tr><td width=\"30%\" align=\"right\">商户端验证银联返回报文结果</td><td>验证签名成功.</td></tr>");

                    string respcode = resData["respCode"]; //00、A6为成功,其余为失败。其他字段也可按此方式获取。

                    //如果卡号我们业务配了会返回且配了需要加密的话,请按此方法解密
                    //if(resData.ContainsKey("accNo"))
                    //{
                    //    string accNo = SecurityUtil.DecryptData(resData["accNo"], System.Text.Encoding.UTF8);
                    //}

                    //customerInfo子域的获取
                    if (resData.ContainsKey("customerInfo"))
                    {
                        Dictionary <string, string> customerInfo = AcpService.ParseCustomerInfo(resData["customerInfo"], System.Text.Encoding.UTF8);
                        if (customerInfo.ContainsKey("phoneNo"))
                        {
                            string phoneNo = customerInfo["phoneNo"]; //customerInfo其他子域均可参考此方式获取
                        }
                        foreach (KeyValuePair <string, string> pair in customerInfo)
                        {
                            builder.Append(pair.Key + "=" + pair.Value + "<br>\n");
                        }
                    }
                }
                else
                {
                    builder.Append("<tr><td width=\"30%\" align=\"right\">商户端验证银联返回报文结果</td><td>验证签名失败.</td></tr>");
                }
                Html = builder.ToString();
            }
        }
Beispiel #3
0
        public string BuildPaymentForm()
        {
            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"]     = Merchant.NotifyUrl.ToString(); //前台通知地址
            param["backUrl"]      = Merchant.ReturnUrl.ToString(); //后台通知地址
            param["currencyCode"] = "156";                         //交易币种

            //TODO 以下信息需要填写
            param["merId"]   = Merchant.Partner;                             //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            param["orderId"] = Order.OrderNo;                                //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = Order.PaymentDate.ToString("yyyyMMddHHmmss"); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]  = (Order.OrderAmount * 100).ToString();         //交易金额,单位分,此处默认取demo演示页面传递的参数
            //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据

            //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_purchase.htm

            AcpService.Sign(param, System.Text.Encoding.UTF8);
            string html = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, System.Text.Encoding.UTF8); // 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向

            System.Web.HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;                                // 指定输出编码
            return(html);
        }
Beispiel #4
0
        private void initParams(int money)
        {
            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";              //交易币种

            string orderId = generateOrderSeriesNum();
            string time    = DateTime.Now.ToString("yyyyMMddHHmmss");

            GetUData.OrderId   = orderId;
            GetUData.Timestamp = time;

            param["merId"]   = "777290058131265"; //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            param["orderId"] = orderId;           //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = time;              //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]  = money.ToString();  //交易金额,单位分,此处默认取demo演示页面传递的参数

            addOrderInfo(orderId, (money / 100).ToString());

            AcpService.Sign(param, System.Text.Encoding.UTF8);
            string html = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, System.Text.Encoding.UTF8); // 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向

            Response.ContentEncoding = Encoding.UTF8;                                                               // 指定输出编码
            Response.Write(html);
        }
Beispiel #5
0
        /// <summary>
        ///     网银
        /// </summary>
        /// <returns></returns>
        public ActionResult UnionpayPcPay()
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<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";              //交易币种
            //获取订单信息
            //var order = await _cmsOrderLogic.GetByIdAsync(Request.Form["hiddenOrderId"]);
            //TODO 以下信息需要填写
            param["merId"] = Request.Form["merId"];                              //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            //param["hiddenOrderId"] = Request.Form["hiddenOrderId"];
            param["orderId"] = Request.Form["orderId"];                          //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = Request.Form["txnTime"];                          //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]  = (Convert.ToDecimal(0.01 * 100).ToString("#.##")); //交易金额,单位分,此处默认取demo演示页面传递的参数
            if (param["txnAmt"] == "")                                           // 如果为空或者小于0.01那么默认为0.01
            {
                param["txnAmt"] = "1";
            }
            //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据

            //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_purchase.htm

            AcpService.Sign(param, Encoding.UTF8);
            string html = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, Encoding.UTF8); // 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向

            Response.ContentEncoding = Encoding.UTF8;                                                   // 指定输出编码
            return(Content(html));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 对控件给商户APP返回的应答信息验签,前段请直接把string型的json串post上来
             */
            StreamReader reader = new StreamReader(Request.InputStream);
            string       data   = reader.ReadToEnd();

            Response.Write(AcpService.ValidateAppResponse(data, Encoding.UTF8)?"true":"false");
        }
Beispiel #7
0
        public Dictionary <string, string> BuildPayParams()
        {
            //组装请求报文
            Dictionary <string, string> param = new Dictionary <string, string>();

            // 版本号
            param.Add("version", "5.0.0");
            // 字符集编码 默认"UTF-8"
            param.Add("encoding", "UTF-8");
            // 签名方法 01 RSA
            param.Add("signMethod", "01");
            // 交易类型 01-消费
            param.Add("txnType", "01");
            // 交易子类型 01:自助消费 02:订购 03:分期付款
            param.Add("txnSubType", "01");
            // 业务类型
            param.Add("bizType", "000201");
            // 渠道类型,07-PC,08-手机
            param.Add("channelType", "08");
            // 前台通知地址 ,控件接入方式无作用
            param.Add("frontUrl", Merchant.ReturnUrl.ToString());
            // 后台通知地址
            param.Add("backUrl", Merchant.NotifyUrl.ToString());
            // 接入类型,商户接入填0 0- 商户 , 1: 收单, 2:平台商户
            param.Add("accessType", "0");
            // 商户号码,请改成自己的商户号
            param.Add("merId", Merchant.Partner);
            // 商户订单号,8-40位数字字母
            param.Add("orderId", Order.OrderNo);
            // 订单发送时间,取系统时间
            param.Add("txnTime", Order.PaymentDate.ToString("yyyyMMddHHmmss"));
            // 交易金额,单位分
            param.Add("txnAmt", (Order.OrderAmount * 100).ToString());
            // 交易币种
            param.Add("currencyCode", "156");
            // 请求方保留域,透传字段,查询、通知、对账文件中均会原样出现
            // param.Add("reqReserved", "透传信息");
            // 订单描述,可不上送,上送时控件中会显示该信息
            // param.Add("orderDesc", "订单描述");

            AcpService.Sign(param, Encoding.UTF8);

            Dictionary <String, String> resmap   = AcpService.Post(param, SDKConfig.AppRequestUrl, Encoding.UTF8);
            Dictionary <string, string> resParam = new Dictionary <string, string>();

            resParam.Add("tn", resmap["tn"]);
            return(resParam);
        }
Beispiel #8
0
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            if (context.Request.HttpMethod == "POST")
            {
                // 使用Dictionary保存参数
                Dictionary <string, string> resData = new Dictionary <string, string>();

                NameValueCollection coll = context.Request.Form;

                string[] requestItem = coll.AllKeys;

                for (int i = 0; i < requestItem.Length; i++)
                {
                    resData.Add(requestItem[i], context.Request.Form[requestItem[i]]);
                }

                // 返回报文中不包含UPOG,表示Server端正确接收交易请求,则需要验证Server端返回报文的签名
                if (AcpService.Validate(resData, System.Text.Encoding.UTF8))
                {
                    //Response.Write("商户端验证返回报文签名成功\n");

                    string respcode = resData["respCode"]; //00、A6为成功,其余为失败。其他字段也可按此方式获取。

                    if (respcode == "00" || respcode == "A6")
                    {
                        int    orderId = WebCommon.GetIntPara(context, "orderId"); //订单ID
                        string rand    = WebCommon.GetStrPara(context, "rand");    //随机字符串
                        string sign    = WebCommon.GetStrPara(context, "sign");    //签名

                        if (orderId > 0 && !string.IsNullOrEmpty(rand) && !string.IsNullOrEmpty(sign))
                        {
                            if (func.GetSign(orderId, rand).ToLower() == sign.ToLower())
                            {
                                tb_userOrder uo = new tb_userOrderHandle().GetInfo(orderId);

                                if (uo != null && !uo.payStatus)
                                {
                                    new payExtentions().UpdateOrderPayStats(uo);
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #9
0
        /// <summary>
        /// 回传界面
        /// </summary>
        /// <returns></returns>
        public ViewResultBase UnionpayPcPayReturn()
        {
            // 使用Dictionary保存参数
            Dictionary <string, string> resData = new Dictionary <string, string>();
            NameValueCollection         coll    = Request.Form;

            string[] requestItem = coll.AllKeys;

            for (int i = 0; i < requestItem.Length; i++)
            {
                resData.Add(requestItem[i], Request.Form[requestItem[i]]);
            }
            // 返回报文中不包含UPOG,表示Server端正确接收交易请求,则需要验证Server端返回报文的签名
            if (AcpService.Validate(resData, Encoding.UTF8))
            {
                //Response.Write("商户端验证返回报文签名成功\n");
                //获取隐藏订单Id

                string code    = resData["respCode"]; //00、A6为成功,其余为失败。其他字段也可按此方式获取。
                var    orderId = resData["orderId"];  //订单号

                if (code == "00" || code == "A6")
                {
                    //viewModel.IsSuccess = true;
                    ////更新订单信息
                    //OperateStatus status = await _orderLogic.PaymentSuccessful(new PayTypeOutpu { Id = order.OrderId, Paytype = 0 });
                    //Log.Info("代码位置:" + this.GetType() + ".OrderComplete", "--支付成功,商户订单号:" + viewModel.Code, "银联");
                    //if (status.ResultSign == ResultSign.Error)
                    //{
                    //    Log.Info("代码位置:" + this.GetType() + ".OrderComplete", "--支付失败,商户订单号:" + viewModel.Code, "银联");
                    //    viewModel.IsSuccess = false;
                    //    viewModel.Message = status.Message + ",订单号:" + viewModel.Code;
                    //}
                }
            }
            else
            {
                Response.Write("验证签名失败");
            }
            return(View());
        }
Beispiel #10
0
        public bool QueryNow()
        {
            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = "5.0.0";  //版本号
            param["encoding"]    = "UTF-8";  //编码方式
            param["signMethod"]  = "01";     //签名方法
            param["txnType"]     = "00";     //交易类型
            param["txnSubType"]  = "00";     //交易子类
            param["bizType"]     = "000000"; //业务类型
            param["accessType"]  = "0";      //接入类型
            param["channelType"] = "07";     //渠道类型

            //TODO 以下信息需要填写
            param["orderId"] = Order.OrderNo;                                 //请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数
            param["merId"]   = Merchant.Partner;                              //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"] = Order.PaymentDate.ToString("yyyyMMddHHmmss");; //请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数

            AcpService.Sign(param, System.Text.Encoding.UTF8);                // 签名
            string url = SDKConfig.SingleQueryUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        string origRespCode = rspData["origRespCode"]; //其他应答参数也可用此方法获取
                        //处理被查询交易的应答码逻辑
                        if ("00" == origRespCode)
                        {
                            //交易成功,更新商户订单状态
                            //TODO
                            //Response.Write("交易成功。<br>\n");
                            return(true);
                        }
                        else if ("03" == origRespCode ||
                                 "04" == origRespCode ||
                                 "05" == origRespCode)
                        {
                            //需再次发起交易状态查询交易
                            //TODO
                            //Response.Write("稍后查询。<br>\n");
                            return(false);
                        }
                        else
                        {
                            //其他应答码做以失败处理
                            //TODO
                            // Response.Write("交易失败:" + rspData["origRespMsg"] + "。<br>\n");
                            return(false);
                        }
                    }
                    else if ("03" == respcode ||
                             "04" == respcode ||
                             "05" == respcode)
                    {
                        //不明原因超时,后续继续发起交易查询。
                        //TODO
                        //Response.Write("处理超时,请稍后查询。<br>\n");
                        return(false);
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        //Response.Write("查询操作失败:" + rspData["respMsg"] + "。<br>\n");
                        return(false);
                    }
                }
            }
            else
            {
                //Response.Write("请求失败\n");
                return(false);
            }
            return(false);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<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 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在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"]      = SDKConfig.Version;    //版本号
            param["encoding"]     = "UTF-8";              //编码方式
            param["txnType"]      = "02";                 //交易类型
            param["txnSubType"]   = "01";                 //交易子类
            param["bizType"]      = "000201";             //业务类型
            param["signMethod"]   = SDKConfig.SignMethod; //签名方法
            param["channelType"]  = "08";                 //渠道类型
            param["accessType"]   = "0";                  //接入类型
            param["frontUrl"]     = SDKConfig.FrontUrl;   //前台通知地址
            param["backUrl"]      = SDKConfig.BackUrl;    //后台通知地址
            param["currencyCode"] = "156";                //交易币种

            //TODO 以下信息需要填写
            param["merId"]   = Request.Form["merId"].ToString();   //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]  = Request.Form["txnAmt"].ToString();  //交易金额,单位分,此处默认取demo演示页面传递的参数

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            //TODO 其他特殊用法请查看 pages/api_05_app/special_use_preauth.htm


            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SDKConfig.AppRequestUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            // HttpClient hc = new HttpClient(url);
            // int status = hc.Send(param, System.Text.Encoding.UTF8);
            // string result = hc.Result;

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //成功
                        //TODO
                        Response.Write("成功接收tn:" + rspData["tn"] + "<br>\n");
                        Response.Write("后续请将此tn传给手机开发,由他们用此tn调起控件后完成支付。<br>\n");
                        Response.Write("手机端demo默认从仿真获取tn,仿真只返回一个tn,如不想修改手机和后台间的通讯方式,【此页面请修改代码为只输出tn】。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
Beispiel #12
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<br>
             * 交易:退货交易:后台资金类交易,有同步应答和后台通知应答<br>
             * 日期: 2015-09<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《网关支付产品接口规范》<br>
             *              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br>
             * 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
             *                                  调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在 https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案
             *                          2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
             * 交易说明: 1)以后台通知或交易状态查询交易(Form_6_5_Query)确定交易成功,建议发起查询交易的机制:可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)
             *        2)退货金额不超过总金额,可以进行多次退货
             *        3)退货能对11个月内的消费做(包括当清算日),支持部分退货或全额退货,到账时间较长,一般1-10个清算日(多数发卡行5天内,但工行可能会10天),所有银行都支持
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = SDKConfig.Version;    //版本号
            param["encoding"]    = "UTF-8";              //编码方式
            param["signMethod"]  = SDKConfig.SignMethod; //签名方法
            param["txnType"]     = "04";                 //交易类型
            param["txnSubType"]  = "00";                 //交易子类
            param["bizType"]     = "000201";             //业务类型
            param["accessType"]  = "0";                  //接入类型
            param["channelType"] = "07";                 //渠道类型
            param["backUrl"]     = SDKConfig.BackUrl;    //后台通知地址

            //TODO 以下信息需要填写
            param["orderId"]   = Request.Form["orderId"].ToString();   //商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则,重新产生,不同于原消费,此处默认取demo演示页面传递的参数
            param["merId"]     = Request.Form["merId"].ToString();     //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["origQryId"] = Request.Form["origQryId"].ToString(); //原消费的queryId,可以从查询接口或者通知接口中获取,此处默认取demo演示页面传递的参数
            param["txnTime"]   = Request.Form["txnTime"].ToString();   //订单发送时间,格式为YYYYMMDDhhmmss,重新产生,不同于原消费,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]    = Request.Form["txnAmt"].ToString();    //交易金额,退货总金额需要小于等于原消费

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SDKConfig.BackTransUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            // HttpClient hc = new HttpClient(url);
            // int status = hc.Send(param, System.Text.Encoding.UTF8);
            // string result = hc.Result;

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询
                        //TODO
                        Response.Write("受理成功。<br>\n");
                    }
                    else if ("03" == respcode ||
                             "04" == respcode ||
                             "05" == respcode)
                    {
                        //后续需发起交易状态查询交易确定交易状态
                        //TODO
                        Response.Write("处理超时,请稍后查询。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
Beispiel #13
0
        public Refund BuildRefund(Refund refund)
        {
            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = "5.0.0";  //版本号
            param["encoding"]    = "UTF-8";  //编码方式
            param["signMethod"]  = "01";     //签名方法
            param["txnType"]     = "04";     //交易类型
            param["txnSubType"]  = "00";     //交易子类
            param["bizType"]     = "000201"; //业务类型
            param["accessType"]  = "0";      //接入类型
            param["channelType"] = "07";     //渠道类型
            param["backUrl"]     = "";       //后台通知地址

            //TODO 以下信息需要填写
            param["orderId"]   = refund.OutRefundNo;                            //商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则,重新产生,不同于原消费,此处默认取demo演示页面传递的参数
            param["merId"]     = Merchant.Partner;                              //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["origQryId"] = refund.TradeNo;                                //原消费的queryId,可以从查询接口或者通知接口中获取,此处默认取demo演示页面传递的参数
            param["txnTime"]   = refund.PaymentDate.ToString("yyyyMMddHHmmss"); //订单发送时间,格式为YYYYMMDDhhmmss,重新产生,不同于原消费,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]    = (refund.RefundAmount * 100).ToString();        //交易金额,退货总金额需要小于等于原消费

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SDKConfig.BackTransUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            // HttpClient hc = new HttpClient(url);
            // int status = hc.Send(param, System.Text.Encoding.UTF8);
            // string result = hc.Result;

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询
                        //TODO
                        refund.TradeNo      = rspData["origQryId"];
                        refund.RefundNo     = rspData["queryId"];
                        refund.RefundStatus = true;
                    }
                    else if ("03" == respcode ||
                             "04" == respcode ||
                             "05" == respcode)
                    {
                        //后续需发起交易状态查询交易确定交易状态
                        //TODO
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                    }
                }
                else
                {
                    //商户端验证返回报文签名失败
                    //TODO
                }
            }
            else
            {
                //请求失败
                //TODO
            }
            return(refund);
        }
Beispiel #14
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<br>
             * 交易:预授权:前台跳转,有前台通知应答和后台通知应答<br>
             * 日期: 2015-09<br>
             *
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 提示:该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《网关支付产品接口规范》,<br>
             *              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br>
             *              《全渠道平台接入接口规范 第3部分 文件接口》(对账文件格式说明)<br>
             * 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
             *                                  调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在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"]      = SDKConfig.Version;    //版本号
            param["encoding"]     = "UTF-8";              //编码方式
            param["txnType"]      = "02";                 //交易类型
            param["txnSubType"]   = "01";                 //交易子类
            param["bizType"]      = "000201";             //业务类型
            param["signMethod"]   = SDKConfig.SignMethod; //签名方法
            param["channelType"]  = "08";                 //渠道类型
            param["accessType"]   = "0";                  //接入类型
            param["frontUrl"]     = SDKConfig.FrontUrl;   //前台通知地址
            param["backUrl"]      = SDKConfig.BackUrl;    //后台通知地址
            param["currencyCode"] = "156";                //交易币种

            // 订单超时时间。
            // 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
            // 此时间建议取支付时的北京时间加15分钟。
            // 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
            param["payTimeout"] = DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss");


            //TODO 以下信息需要填写
            param["merId"]   = Request.Form["merId"].ToString();   //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]  = Request.Form["txnAmt"].ToString();  //交易金额,单位分,此处默认取demo演示页面传递的参数

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            param["riskRateInfo"] = "{commodityName=测试商品名称}";//

            //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_preauth.htm

            AcpService.Sign(param, System.Text.Encoding.UTF8);
            string html = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, System.Text.Encoding.UTF8); // 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向

            Response.ContentEncoding = Encoding.UTF8;                                                               // 指定输出编码
            Response.Write(html);
        }
Beispiel #15
0
    protected void Page_Load(object sender, EventArgs e)
    {
        decimal PayCash = decimal.Parse(Request["PayCash"]);

        string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(100000, 999999);

        if (PayCash <= 0)
        {
            Response.Write("充值金额需大于0");
            Response.End();
        }

        /**
         * 重要:联调测试时请仔细阅读注释!
         *
         * 产品:跳转网关支付产品<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"]   = "***************";                       //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
        param["orderId"] = out_trade_no;                            //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
        param["txnTime"] = DateTime.Now.ToString("yyyyMMddhhmmss"); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
        param["txnAmt"]  = (PayCash * 100).ToString();              //交易金额,单位分,此处默认取demo演示页面传递的参数
                                                                    //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据

        //充值记录
        OrderBLL mbll = new OrderBLL();

        mbll.Add(。。。。。。 "充值[银联]");

        //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_preauth.htm

        AcpService.Sign(param, System.Text.Encoding.UTF8);
        string html = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, System.Text.Encoding.UTF8); // 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向

        Response.ContentEncoding = Encoding.UTF8;                                                               // 指定输出编码
        Response.Write(html);
    }
Beispiel #16
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转产品<br>
             * 交易:消费:前台交易,有后台通知<br>
             * 日期: 2015-11<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 交易说明:1)确定交易成功机制:商户需开发后台通知接口或交易状态查询接口(Form03_6_5_Query)确定交易是否成功,建议发起查询交易的机制:可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)
             *       2)报文中必送卡号,消费后卡号就开通了。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息需要填写
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,可按自己规则产生,此处默认取demo演示页面传递的参数
            param["merId"]   = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,取系统时间,此处默认取demo演示页面传递的参数
            param["txnAmt"]  = Request.Form["txnAmt"].ToString();  //交易金额,单位分  ,此处默认取demo演示页面传递的参数
            //param["reserved"] = "{customPage=true}";//如果开通并支付页面需要使用嵌入页面的话,请上送此用法

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            //支付卡信息填写
            string accNo = "6226090000000048"; //卡号
            Dictionary <string, string> customerInfo = new Dictionary <string, string>();

            customerInfo["phoneNo"]    = "18100000000";     //手机号
            customerInfo["smsCode"]    = "111111";          //短信验证码,测试环境不会真实收到短信,固定填111111
            customerInfo["certifTp"]   = "01";              //证件类型,01-身份证
            customerInfo["certifId"]   = "510265790128303"; //证件号,15位身份证不校验尾号,18位会校验尾号,请务必在前端写好校验代码
            customerInfo["customerNm"] = "张三";              //姓名
            //customerInfo["cvn2"] = "248"; //cvn2
            //customerInfo["expired"] = "1912"; //有效期,YYMM格式,持卡人卡面印的是MMYY的,请注意代码设置倒一下

            //param["accNo"] = accNo; //卡号,旧规范请按此方式填写
            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,旧规范请按此方式填写
            param["accNo"]        = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8);                       //卡号,新规范请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,新规范请按此方式填写

            // 订单超时时间。
            // 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
            // 此时间建议取支付时的北京时间加15分钟。
            // 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
            param["payTimeout"] = DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss");


            //以下信息非特殊情况不需要改动
            param["version"]       = SdkConfig.Version;             //版本号
            param["encoding"]      = "UTF-8";                       //编码方式
            param["signMethod"]    = SdkConfig.SignMethod;          //签名方法
            param["txnType"]       = "01";                          //交易类型
            param["txnSubType"]    = "01";                          //交易子类
            param["bizType"]       = "000301";                      //业务类型
            param["accessType"]    = "0";                           //接入类型
            param["channelType"]   = "07";                          //渠道类型
            param["currencyCode"]  = "156";                         //交易币种,境内商户勿改
            param["encryptCertId"] = AcpService.GetEncryptCertId(); //加密证书ID
            param["frontUrl"]      = SdkConfig.FrontUrl;            //前台通知地址
            param["backUrl"]       = SdkConfig.BackUrl;             //后台通知地址

            AcpService.Sign(param, System.Text.Encoding.UTF8);      // 签名
            string url  = SdkConfig.FrontTransUrl;
            string html = AcpService.CreateAutoFormHtml(url, param, System.Text.Encoding.UTF8);

            Response.ContentEncoding = Encoding.UTF8; // 指定输出编码
            Response.Write(html);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = SDKConfig.Version;              //版本号
            param["encoding"]    = "UTF-8";                        //编码方式
            param["txnType"]     = "95";                           //交易类型
            param["txnSubType"]  = "00";                           //交易子类
            param["bizType"]     = "000000";                       //业务类型
            param["signMethod"]  = SDKConfig.SignMethod;           //签名方法
            param["channelType"] = "08";                           //渠道类型
            param["certType"]    = "01";                           //01:敏感信息加密公钥(只有01可用)
            param["accessType"]  = "0";                            //
            //TODO 以下信息需要填写
            param["merId"]   = Request.Form["merId"].ToString();   //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")

            //TODO 其他特殊用法请查看 pages/api_05_app/special_use_purchase.htm

            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SDKConfig.AppRequestUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        int resultCode = AcpService.UpdateEncryptCert(rspData, System.Text.Encoding.UTF8);
                        if (resultCode == 1)
                        {
                            Response.Write("加密公钥更新成功");
                        }
                        else if (resultCode == 0)
                        {
                            Response.Write("加密公钥无更新");
                        }
                        else
                        {
                            Response.Write("加密公钥更新失败");
                        }
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转产品<br>
             * 交易:消费:后台资金类交易,有同步应答和后台通知应答<br>
             * 日期: 2015-09<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 交易说明:1)确定交易成功机制:商户需开发后台通知接口或交易状态查询接口(Form03_6_5_Query)确定交易是否成功,建议发起查询交易的机制:可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)
             *       2)交易要素卡号+短信验证码(默认验证短信,如果配置了不验证短信则不送短信验证码)
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息需要填写
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,可按自己规则产生,如上送短信验证码,请填写获取验证码时一样的orderId,此处默认取demo演示页面传递的参数
            param["merId"]   = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,取系统时间,如上送短信验证码,请填写获取验证码时一样的txnTime,此处默认取demo演示页面传递的参数
            param["txnAmt"]  = Request.Form["txnAmt"].ToString();  //交易金额,单位分,如上送短信验证码,请填写获取验证码时一样的txnAmt,此处默认取demo演示页面传递的参数

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            //支付卡信息填写
            string accNo = "6226090000000048"; //卡号
            Dictionary <string, string> customerInfo = new Dictionary <string, string>();

            customerInfo["phoneNo"] = "18100000000"; //手机号
            customerInfo["smsCode"] = "111111";      //短信验证码,测试环境不会真实收到短信,固定填111111

            //param["accNo"] = accNo; //卡号,旧规范请按此方式填写
            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,旧规范请按此方式填写
            param["accNo"]        = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8);                       //卡号,新规范请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,新规范请按此方式填写

            //以下信息非特殊情况不需要改动
            param["version"]       = SdkConfig.Version;             //版本号
            param["encoding"]      = "UTF-8";                       //编码方式
            param["signMethod"]    = SdkConfig.SignMethod;          //签名方法
            param["txnType"]       = "01";                          //交易类型
            param["txnSubType"]    = "01";                          //交易子类
            param["bizType"]       = "000301";                      //业务类型
            param["accessType"]    = "0";                           //接入类型
            param["channelType"]   = "07";                          //渠道类型
            param["currencyCode"]  = "156";                         //交易币种,境内商户勿改
            param["encryptCertId"] = AcpService.GetEncryptCertId(); //加密证书ID
            param["backUrl"]       = SdkConfig.BackUrl;             //后台通知地址

            AcpService.Sign(param, System.Text.Encoding.UTF8);      // 签名
            string url = SdkConfig.BackTransUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            //Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询
                        //TODO
                        Response.Write("受理成功。<br>\n");
                    }
                    else if ("03" == respcode ||
                             "04" == respcode ||
                             "05" == respcode)
                    {
                        //后续需发起交易状态查询交易确定交易状态
                        //TODO
                        Response.Write("处理超时,请稍后查询。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转token产品<br>
             * 交易:更新token号:后台交易,无通知<br>
             * 日期: 2015-09<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 交易说明: 同步应答确定交易成功。仅支持商户侧开通的方式。推荐直接使用开通接口来更新token,而非用这个接口更新。
             *
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //  以下信息需要填写
            param["orderId"]      = Request.Form["orderId"].ToString();                                               //商户订单号,8-32位数字字母,可按自己规则产生,如上送短信验证码,请填写获取验证码时一样的orderId,此处默认取demo演示页面传递的参数
            param["merId"]        = Request.Form["merId"].ToString();                                                 //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"]      = Request.Form["txnTime"].ToString();                                               //订单发送时间,取系统时间,如上送短信验证码,请填写获取验证码时一样的orderId,此处默认取demo演示页面传递的参数
            param["tokenPayData"] = "{trId=62000000001&token=" + Request.Form["token"].ToString() + "&tokenType=01}"; //token号从开通和开通查询借口获取,trId和开通接口时上送的相同

            //支付卡信息填写
            //贷记卡 必送:手机号、CVN2、有效期;验证码看业务配置(默认需要短信验证码)。
            //借记卡 必送:手机号;选送:证件类型+证件号、姓名;验证码看业务配置(默认需要短信验证码)。
            Dictionary <string, string> customerInfo = new Dictionary <string, string>();

            customerInfo["phoneNo"] = "18100000000"; //手机号
            //customerInfo["certifTp"] = "01"; //证件类型,01-身份证
            //customerInfo["certifId"] = "510265790128303"; //证件号,15位身份证不校验尾号,18位会校验尾号,请务必在前端写好校验代码
            //customerInfo["customerNm"] = "张三"; //姓名
            customerInfo["cvn2"]    = "248";    //cvn2
            customerInfo["expired"] = "1912";   //有效期,YYMM格式,持卡人卡面印的是MMYY的,请注意代码设置倒一下
            customerInfo["smsCode"] = "111111"; //短信验证码,测试环境不会真实收到短信,固定填111111。除了123456和654321固定反失败,其余固定成功。此接口获取验证码接口同开通的获取验证码接口。

            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,旧规范请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,新规范请按此方式填写

            //以下信息非特殊情况不需要改动
            param["version"]       = SDKConfig.Version;             //版本号
            param["encoding"]      = "UTF-8";                       //编码方式
            param["signMethod"]    = SDKConfig.SignMethod;          //签名方法
            param["txnType"]       = "79";                          //交易类型
            param["txnSubType"]    = "03";                          //交易子类
            param["bizType"]       = "000902";                      //业务类型
            param["accessType"]    = "0";                           //接入类型
            param["channelType"]   = "07";                          //渠道类型
            param["encryptCertId"] = AcpService.GetEncryptCertId(); //加密证书ID

            AcpService.Sign(param, System.Text.Encoding.UTF8);      // 签名
            string url = SDKConfig.SingleQueryUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //更新标记成功
                        //TODO
                        Response.Write("更新标记成功。<br>\n");
                        string tokenPayDataStr = rspData["tokenPayData"];
                        Dictionary <string, string> tokenPayData = SDKUtil.parseQString(tokenPayDataStr.Substring(1, tokenPayDataStr.Length - 2), System.Text.Encoding.UTF8);
                        if (tokenPayData.ContainsKey("token"))
                        {
                            string token = tokenPayData["token"]; //tokenPayData其他子域均可参考此方式获取
                        }
                        foreach (KeyValuePair <string, string> pair in tokenPayData)
                        {
                            Response.Write(pair.Key + "=" + pair.Value + "<br>\n");
                        }
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败\n");
                }
            }
            else
            {
                Response.Write("请求失败\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<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 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在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"]     = SdkConfig.Version;              //版本号
            param["encoding"]    = "UTF-8";                        //编码方式
            param["txnType"]     = "95";                           //交易类型
            param["txnSubType"]  = "00";                           //交易子类
            param["bizType"]     = "000000";                       //业务类型
            param["signMethod"]  = SdkConfig.SignMethod;           //签名方法
            param["channelType"] = "08";                           //渠道类型
            param["certType"]    = "01";                           //01:敏感信息加密公钥(只有01可用)
            param["accessType"]  = "0";                            //
            //TODO 以下信息需要填写
            param["merId"]   = Request.Form["merId"].ToString();   //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")

            //TODO 其他特殊用法请查看 Pages/Template/special_use_purchase.htm

            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SdkConfig.AppRequestUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            //Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        int resultCode = AcpService.UpdateEncryptCert(rspData, System.Text.Encoding.UTF8);
                        if (resultCode == 1)
                        {
                            Response.Write("加密公钥更新成功");
                        }
                        else if (resultCode == 0)
                        {
                            Response.Write("加密公钥无更新");
                        }
                        else
                        {
                            Response.Write("加密公钥更新失败");
                        }
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:代收产品<br>
             * 交易:交易状态查询交易:只有同步应答 <br>
             * 日期: 2015-09<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能及规范性等方面的保障<br>
             * 该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《代收产品接口规范》,<br>
             *              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范)<br>
             * 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
             *                                  调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案
             *                           2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
             * 交易说明:代收同步返回00,如果未收到后台通知建议发起查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03 04 05继续查询,否则终止查询)。【如果最终尚未确定交易是否成功请以对账文件为准】
             *        代收同步返03 04 05响应码及未得到银联响应(读超时)建议发起查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03 04 05继续查询,否则终止查询)。【如果最终尚未确定交易是否成功请以对账文件为准】
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = SdkConfig.Version;    //版本号
            param["encoding"]    = "UTF-8";              //编码方式
            param["signMethod"]  = SdkConfig.SignMethod; //签名方法
            param["txnType"]     = "00";                 //交易类型
            param["txnSubType"]  = "00";                 //交易子类
            param["bizType"]     = "000000";             //业务类型
            param["accessType"]  = "0";                  //接入类型
            param["channelType"] = "07";                 //渠道类型

            //TODO 以下信息需要填写
            param["orderId"] = Request.Form["orderId"].ToString(); //请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数
            param["merId"]   = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"] = Request.Form["txnTime"].ToString(); //请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数

            AcpService.Sign(param, System.Text.Encoding.UTF8);     // 签名
            string url = SdkConfig.SingleQueryUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            //Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        string origRespCode = rspData["origRespCode"]; //其他应答参数也可用此方法获取
                        //处理被查询交易的应答码逻辑
                        if ("00" == origRespCode)
                        {
                            //交易成功,更新商户订单状态
                            //TODO
                            Response.Write("交易成功。<br>\n");
                        }
                        else if ("03" == origRespCode ||
                                 "04" == origRespCode ||
                                 "05" == origRespCode)
                        {
                            //需再次发起交易状态查询交易
                            //TODO
                            Response.Write("稍后查询。<br>\n");
                        }
                        else
                        {
                            //其他应答码做以失败处理
                            //TODO
                            Response.Write("交易失败:" + rspData["origRespMsg"] + "。<br>\n");
                        }
                    }
                    else if ("03" == respcode || "04" == respcode || "05" == respcode)
                    {
                        //不明原因超时,后续继续发起交易查询。
                        //TODO
                        Response.Write("处理超时,请稍后查询。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("查询操作失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
            }
            else
            {
                Response.Write("请求失败\n");
            }
        }
Beispiel #22
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转token产品<br>
             * 交易:删除token号:后台交易,无通知<br>
             * 日期: 2015-09<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 交易说明: 同步应答确定交易成功。
             *        删除token后重新申请token号会发生变化。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //  以下信息需要填写
            param["orderId"]      = Request.Form["orderId"].ToString();                                  //商户订单号,8-32位数字字母,可按自己规则产生,此处默认取demo演示页面传递的参数
            param["merId"]        = Request.Form["merId"].ToString();                                    //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"]      = Request.Form["txnTime"].ToString();                                  //订单发送时间,取系统时间,此处默认取demo演示页面传递的参数
            param["tokenPayData"] = "{trId=62000000001&token=" + Request.Form["token"].ToString() + "}"; //token号从开通和开通查询借口获取,trId和开通接口时上送的相同

            //以下信息非特殊情况不需要改动
            param["version"]       = SDKConfig.Version;             //版本号
            param["encoding"]      = "UTF-8";                       //编码方式
            param["signMethod"]    = SDKConfig.SignMethod;          //签名方法
            param["txnType"]       = "74";                          //交易类型
            param["txnSubType"]    = "01";                          //交易子类
            param["bizType"]       = "000902";                      //业务类型
            param["accessType"]    = "0";                           //接入类型
            param["channelType"]   = "07";                          //渠道类型
            param["encryptCertId"] = AcpService.GetEncryptCertId(); //加密证书ID

            AcpService.Sign(param, System.Text.Encoding.UTF8);      // 签名
            string url = SDKConfig.SingleQueryUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //成功
                        //TODO
                        Response.Write("成功。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败\n");
                }
            }
            else
            {
                Response.Write("请求失败\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转token产品<br>
             * 交易:申请token号:后台交易<br>
             * 日期: 2015-11<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 交易说明:根据开通并付款交易的orderId申请,后台同步应答确定交易成功。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //  以下信息需要填写
            param["orderId"]      = Request.Form["orderId"].ToString(); //商户订单号,填写开通并支付交易的orderId,此处默认取demo演示页面传递的参数
            param["merId"]        = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"]      = Request.Form["txnTime"].ToString(); //订单发送时间,填写开通并支付交易的txnTime,此处默认取demo演示页面传递的参数
            param["tokenPayData"] = "{trId=62000000001&tokenType=01}";  //测试环境固定trId=62000000001&tokenType=01,生产环境由业务分配。测试环境因为所有商户都使用同一个trId,所以同一个卡获取的token号都相同,任一人发起更新token或者解除token请求都会导致原token号失效,所以之前成功、突然出现3900002报错时请先尝试重新开通一下。

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            //以下信息非特殊情况不需要改动
            param["version"]       = SDKConfig.Version;           //版本号
            param["encoding"]      = "UTF-8";                     //编码方式
            param["certId"]        = CertUtil.GetSignCertId();    //签名证书ID
            param["signMethod"]    = SDKConfig.SignMethod;        //签名方法
            param["txnType"]       = "79";                        //交易类型
            param["txnSubType"]    = "05";                        //交易子类
            param["bizType"]       = "000902";                    //业务类型
            param["accessType"]    = "0";                         //接入类型
            param["channelType"]   = "07";                        //渠道类型
            param["encryptCertId"] = CertUtil.GetEncryptCertId(); //加密证书ID

            AcpService.Sign(param, System.Text.Encoding.UTF8);    // 签名
            string url = SDKConfig.SingleQueryUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //申请token成功
                        //TODO
                        Response.Write("申请token成功。<br>\n");
                        string tokenPayDataStr = rspData["tokenPayData"];
                        Dictionary <string, string> tokenPayData = SDKUtil.parseQString(tokenPayDataStr.Substring(1, tokenPayDataStr.Length - 2), System.Text.Encoding.UTF8);
                        if (tokenPayData.ContainsKey("token"))
                        {
                            string token = tokenPayData["token"]; //tokenPayData其他子域均可参考此方式获取
                        }
                        foreach (KeyValuePair <string, string> pair in tokenPayData)
                        {
                            Response.Write(pair.Key + "=" + pair.Value + "<br>\n");
                        }
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败\n");
                }
            }
            else
            {
                Response.Write("请求失败\n");
            }
        }
Beispiel #24
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转产品<br>
             * 交易:后台开通:后台交易,只有同步应答<br>
             * 日期: 2015-11<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《代收产品接口规范》<br>
             *              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范)<br>
             * 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
             *                                  调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案
             *                          2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
             * 交易说明:同步交易,不需要接收后台通知或发起交易状态查询交易,同步应答确定交易成功。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //  以下信息需要填写
            param["orderId"]      = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,可按自己规则产生,如上送短信验证码,请填写获取验证码时一样的orderId,此处默认取demo演示页面传递的参数
            param["merId"]        = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"]      = Request.Form["txnTime"].ToString(); //订单发送时间,取系统时间,如上送短信验证码,请填写获取验证码时一样的txnTime,此处默认取demo演示页面传递的参数
            param["tokenPayData"] = "{trId=62000000001&tokenType=01}";  //测试环境固定trId=62000000001&tokenType=01,生产环境由业务分配。测试环境因为所有商户都使用同一个trId,所以同一个卡获取的token号都相同,任一人发起更新token或者解除token请求都会导致原token号失效,所以之前成功、突然出现3900002报错时请先尝试重新开通一下。

            //支付卡信息填写
            //贷记卡 必送:卡号、手机号、CVN2、有效期;验证码看业务配置(默认不要短信验证码)。
            //借记卡 必送:卡号、手机号;选送:证件类型+证件号、姓名;验证码看业务配置(默认不要短信验证码)。
            string accNo = "6226388000000095"; //卡号
            Dictionary <string, string> customerInfo = new Dictionary <string, string>();

            customerInfo["phoneNo"] = "18100000000"; //手机号
            //customerInfo["certifTp"] = "01"; //证件类型,01-身份证
            //customerInfo["certifId"] = "510265790128303"; //证件号,15位身份证不校验尾号,18位会校验尾号,请务必在前端写好校验代码
            //customerInfo["customerNm"] = "张三"; //姓名
            customerInfo["cvn2"]    = "248";    //cvn2
            customerInfo["expired"] = "1912";   //有效期,YYMM格式,持卡人卡面印的是MMYY的,请注意代码设置倒一下
            customerInfo["smsCode"] = "111111"; //短信验证码

            //param["accNo"] = accNo; //卡号,旧规范请按此方式填写
            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,旧规范请按此方式填写
            param["accNo"]        = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8);                       //卡号,新规范请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,新规范请按此方式填写

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            //以下信息非特殊情况不需要改动
            param["version"]       = SDKConfig.Version;             //版本号
            param["encoding"]      = "UTF-8";                       //编码方式
            param["signMethod"]    = SDKConfig.SignMethod;          //签名方法
            param["txnType"]       = "79";                          //交易类型
            param["txnSubType"]    = "00";                          //交易子类
            param["bizType"]       = "000902";                      //业务类型
            param["accessType"]    = "0";                           //接入类型
            param["channelType"]   = "07";                          //渠道类型
            param["encryptCertId"] = AcpService.GetEncryptCertId(); //加密证书ID

            AcpService.Sign(param, System.Text.Encoding.UTF8);      // 签名
            string url = SDKConfig.SingleQueryUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //后台开通成功
                        //TODO
                        Response.Write("后台开通成功。<br>\n");
                        string tokenPayDataStr = rspData["tokenPayData"];
                        Dictionary <string, string> tokenPayData = SDKUtil.parseQString(tokenPayDataStr.Substring(1, tokenPayDataStr.Length - 2), System.Text.Encoding.UTF8);
                        if (tokenPayData.ContainsKey("token"))
                        {
                            string token = tokenPayData["token"]; //tokenPayData其他子域均可参考此方式获取
                        }
                        foreach (KeyValuePair <string, string> pair in tokenPayData)
                        {
                            Response.Write(pair.Key + "=" + pair.Value + "<br>\n");
                        }
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败\n");
                }
            }
            else
            {
                Response.Write("请求失败\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<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 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案
             *                          2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
             * 交易说明: 对账文件的格式请参考《全渠道平台接入接口规范 第3部分 文件接口》
             *        对账文件示例见目录assets/对账文件样例下的802310048993424_20150905.zip
             *        解析落地后的对账文件可以参考BaseDemo.java中的parseZMFile();parseZMEFile();方法
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = SDKConfig.Version;    //版本号
            param["encoding"]    = "UTF-8";              //编码方式
            param["signMethod"]  = SDKConfig.SignMethod; //签名方法
            param["txnType"]     = "76";                 //交易类型
            param["txnSubType"]  = "01";                 //交易子类
            param["bizType"]     = "000000";             //业务类型
            param["accessType"]  = "0";                  //接入类型
            param["channelType"] = "07";                 //渠道类型
            param["fileType"]    = "00";                 //文件类型

            //TODO 以下信息需要填写
            param["merId"]      = Request.Form["merId"].ToString(); param["merId"] = Request.Form["merId"].ToString(); //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"]    = Request.Form["txnTime"].ToString();                                                  //订单发送时间,取北京时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数
            param["settleDate"] = Request.Form["settleDate"].ToString();                                               //清算日期,格式为MMDD,此处默认取demo演示页面传递的参数

            AcpService.Sign(param, System.Text.Encoding.UTF8);                                                         // 签名
            string url = SDKConfig.FileTransUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count == 0)
            {
                Response.Write("请求失败<br>\n");
                return;
            }

            if (!AcpService.Validate(rspData, System.Text.Encoding.UTF8)) //验签
            {
                Response.Write("商户端验证返回报文签名失败。<br>\n");
                return;
            }
            Response.Write("商户端验证返回报文签名成功。<br>\n");
            string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取

            if ("98" == respcode)
            {
                //TODO 文件不存在
                Response.Write("文件不存在。<br>\n");
                return;
            }
            else if ("00" != respcode)
            {
                //TODO 其他应答码做以失败处理
                Response.Write("失败:respcode=" + respcode + "。<br>\n");
                return;
            }

            Response.Write("返回成功。<br>\n");

            // 解析返回文件
            string fileContent = rspData["fileContent"];

            if (string.IsNullOrEmpty(fileContent))
            {
                Response.Write("fileContent为空,正常不会出现,请确定是否调错接口?<br>\n");
                return;
            }
            //Base64解码
            byte[] dBase64Byte = Convert.FromBase64String(fileContent);
            //解压缩
            byte[] fileByte = SecurityUtil.Inflater(dBase64Byte);

            string filePath = "D:/file/"; //TODO 【重要】请先确保此路径存在,且有权限写入

            if (AcpService.DeCodeFileContent(rspData, filePath))
            {
                Response.Write("文件成功保存到" + filePath + "目录下。<br>\n");
            }
            else
            {
                Response.Write("文件保存失败,请看下日志文件中的报错信息。<br>\n");
            }

            //=================================================================
            //TODO 下面是调用的方法是分析对账文件的样例代码,请按照自己的需要修改并集成到自己的代码中
            analyzeFile(filePath, rspData["fileName"]);
        }
Beispiel #26
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["userID"] == null || Session["loginID"] == null)
        {
            Response.Write("您还未登录");
            return;
        }

        int userID  = Convert.ToInt32(Session["userID"].ToString());
        int loginID = Convert.ToInt32(Session["loginID"].ToString());
        int orderId = WebCommon.GetIntPara(Context, "orderId");//订单ID

        tb_user            u           = new tb_userHandle().GetInfo(userID);
        tb_userLoginHandle loginHandle = new tb_userLoginHandle();
        tb_userLogin       uLogin      = loginHandle.GetInfo(loginID);

        if (u == null)
        {
            Response.Write("找不到用户信息");
            return;
        }
        else if (uLogin == null)
        {
            Response.Write("找不到登录信息");
            return;
        }
        else if (!uLogin.isMainEquimment)
        {
            Response.Write("此设备不是用户的主设备,不能进行该操作");
            return;
        }

        uLogin.endTime = DateTime.Now.AddDays(1);
        loginHandle.Upd(uLogin);

        if (orderId <= 0)
        {
            Response.Write("输入的订单ID不无效");
            return;
        }

        tb_userOrder uo = new tb_userOrderHandle().GetInfo(orderId);

        if (uo == null)
        {
            Response.Write("订单信息不存在");
            return;
        }
        else if (uo.userID != userID)
        {
            Response.Write("该订单不是您的");
            return;
        }
        else if (uo.payStatus)
        {
            Response.Write("该订单已支付");
            return;
        }
        else if (uo.currency != 1)
        {
            Response.Write("该订单不是使用人民币支付");
            return;
        }

        string rand = new StaticMethod().RandStr(10, 3);
        string sign = func.GetSign(orderId, rand);

        /**
         * 重要:联调测试时请仔细阅读注释!
         *
         * 产品:跳转网关支付产品<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 + "?sumPrice=" + uo.sumPrice.ToString();                               //前台通知地址
        param["backUrl"]      = SDKConfig.BackUrl + "?orderId=" + orderId.ToString() + "&rand=" + rand + "&sign=" + sign; //后台通知地址
        param["currencyCode"] = "156";                                                                                    //交易币种

        //TODO 以下信息需要填写
        param["merId"]   = Var.merId;                                        //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数
        param["orderId"] = uo.orderCode;                                     //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
        param["txnTime"] = DateTime.Now.ToString("yyyyMMddHHmmss");          //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
        param["txnAmt"]  = ((long)(100.0 * (double)uo.sumPrice)).ToString(); //交易金额,单位分,此处默认取demo演示页面传递的参数
        //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据

        //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_purchase.htm

        AcpService.Sign(param, System.Text.Encoding.UTF8);
        string html = AcpService.CreateAutoFormHtml(SDKConfig.FrontTransUrl, param, System.Text.Encoding.UTF8); // 将SDKUtil产生的Html文档写入页面,从而引导用户浏览器重定向

        Response.ContentEncoding = Encoding.UTF8;                                                               // 指定输出编码
        Response.Write(html);
    }
Beispiel #27
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转产品<br>
             * 交易:消费短信:后台交易,无通知<br>
             * 日期: 2015-11<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 交易说明: 金额  + 卡号  + 手机号phoneNo(customerInfo域),同步应答确定交易成功。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息需要填写
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,可按自己规则产生,此处默认取demo演示页面传递的参数
            param["merId"]   = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,取系统时间,此处默认取demo演示页面传递的参数
            param["txnAmt"]  = Request.Form["txnAmt"].ToString();  //交易金额,单位分,此处默认取demo演示页面传递的参数

            //支付卡信息填写
            string accNo = "6226090000000048"; //卡号
            Dictionary <string, string> customerInfo = new Dictionary <string, string>();

            customerInfo["phoneNo"] = "18100000000"; //手机号

            //param["accNo"] = accNo; //卡号,旧规范请按此方式填写
            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,旧规范请按此方式填写
            param["accNo"]        = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8);                       //卡号,新规范请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,新规范请按此方式填写

            //以下信息非特殊情况不需要改动
            param["version"]       = SDKConfig.Version;           //版本号
            param["encoding"]      = "UTF-8";                     //编码方式
            param["signMethod"]    = SDKConfig.SignMethod;        //签名方法
            param["txnType"]       = "77";                        //交易类型
            param["txnSubType"]    = "02";                        //交易子类
            param["bizType"]       = "000301";                    //业务类型
            param["accessType"]    = "0";                         //接入类型
            param["channelType"]   = "07";                        //渠道类型
            param["currencyCode"]  = "156";                       //交易币种,境内商户勿改
            param["encryptCertId"] = CertUtil.GetEncryptCertId(); //加密证书ID


            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SDKConfig.BackTransUrl;
            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //TODO
                        Response.Write("消费短信交易成功。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:跳转网关支付产品<br>
             * 交易:消费撤销类交易:后台消费撤销交易,有同步应答和后台通知应答<br>
             * 日期: 2015-09<br>
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《网关支付产品接口规范》<br>
             *              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<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)消费撤销仅能对当清算日的消费做,必须为全额,一般当日或第二日到账。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //以下信息非特殊情况不需要改动
            param["version"]     = "5.0.0";           //版本号
            param["encoding"]    = "UTF-8";           //编码方式
            param["signMethod"]  = "01";              //签名方法
            param["txnType"]     = "31";              //交易类型
            param["txnSubType"]  = "00";              //交易子类
            param["bizType"]     = "000201";          //业务类型
            param["accessType"]  = "0";               //接入类型
            param["channelType"] = "07";              //渠道类型
            param["backUrl"]     = SDKConfig.BackUrl; //后台通知地址

            //TODO 以下信息需要填写
            param["orderId"]   = Request.Form["orderId"].ToString();   //商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则,重新产生,不同于原消费,此处默认取demo演示页面传递的参数
            param["merId"]     = Request.Form["merId"].ToString();     //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["origQryId"] = Request.Form["origQryId"].ToString(); //原消费的queryId,可以从查询接口或者通知接口中获取,此处默认取demo演示页面传递的参数
            param["txnTime"]   = Request.Form["txnTime"].ToString();   //订单发送时间,格式为YYYYMMDDhhmmss,重新产生,不同于原消费,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss")
            param["txnAmt"]    = Request.Form["txnAmt"].ToString();    //交易金额,消费撤销时需和原消费一致,此处默认取demo演示页面传递的参数
            //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据

            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名
            string url = SDKConfig.BackTransUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            // HttpClient hc = new HttpClient(url);
            // int status = hc.Send(param, System.Text.Encoding.UTF8);
            // string result = hc.Result;

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询
                        //TODO
                        Response.Write("受理成功。<br>\n");
                    }
                    else if ("03" == respcode ||
                             "04" == respcode ||
                             "05" == respcode)
                    {
                        //后续需发起交易状态查询交易确定交易状态
                        //TODO
                        Response.Write("处理超时,请稍后查询。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败:" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要:联调测试时请仔细阅读注释!
             *
             * 产品:无跳转产品<br>
             * 交易:银联侧开通:前台交易,有前台通知后台通知<br>
             * 日期: 2015-11<br>
             * 版本: 1.0.0
             * 版权: 中国银联<br>
             * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
             * 该接口参考文档位置:open.unionpay.com帮助中心 下载  产品接口规范  《代收产品接口规范》<br>
             *              《平台接入接口规范-第5部分-附录》(内包含应答码接口规范)<br>
             * 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
             *                                  调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案
             *                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案
             *                          2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
             * 交易说明:后台通知或者发起开通查询交易确认卡是否已经开通。
             */

            Dictionary <string, string> param = new Dictionary <string, string>();

            //  以下信息需要填写
            param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,可按自己规则产生,此处默认取demo演示页面传递的参数
            param["merId"]   = Request.Form["merId"].ToString();   //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数
            param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,取系统时间,此处默认取demo演示页面传递的参数
            //param["reserved"] = "{customPage=true}";//如果开通页面需要使用嵌入页面的话,请上送此用法

            // 请求方保留域,
            // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
            // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
            // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
            //param["reqReserved"] = "透传信息1|透传信息2|透传信息3";
            // 2. 内容可能出现&={}[]"'符号时:
            // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
            // 2) 如果对账文件没有显示要求,可做一下base64(如下)。
            //    注意控制数据长度,实际传输的数据长度不能超过1024位。
            //    查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。
            //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以"));

            //支付卡信息填写
            //可选送卡号、手机号、证件类型+证件号、姓名,也可以都不送,在界面输入这些要素
            string accNo = "6226090000000048";//卡号
            Dictionary <string, string> customerInfo = new Dictionary <string, string>();

            customerInfo["phoneNo"]    = "18100000000";     //手机号
            customerInfo["certifTp"]   = "01";              //证件类型,01-身份证
            customerInfo["certifId"]   = "510265790128303"; //证件号,15位身份证不校验尾号,18位会校验尾号,请务必在前端写好校验代码
            customerInfo["customerNm"] = "张三";              //姓名

            //param["accNo"] = accNo; //卡号,旧规范请按此方式填写
            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,旧规范请按此方式填写
            param["accNo"]        = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8);                       //卡号,新规范请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息,新规范请按此方式填写

            // 订单超时时间。
            // 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
            // 此时间建议取支付时的北京时间加15分钟。
            // 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
            param["payTimeout"] = DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss");


            //以下信息非特殊情况不需要改动
            param["version"]       = SDKConfig.Version;             //版本号
            param["encoding"]      = "UTF-8";                       //编码方式
            param["signMethod"]    = SDKConfig.SignMethod;          //签名方法
            param["txnType"]       = "79";                          //交易类型
            param["txnSubType"]    = "00";                          //交易子类
            param["bizType"]       = "000301";                      //业务类型
            param["accessType"]    = "0";                           //接入类型
            param["channelType"]   = "07";                          //渠道类型
            param["encryptCertId"] = AcpService.GetEncryptCertId(); //加密证书ID
            param["frontUrl"]      = SDKConfig.FrontUrl;            //前台通知地址
            param["backUrl"]       = SDKConfig.BackUrl;             //后台通知地址

            AcpService.Sign(param, System.Text.Encoding.UTF8);      // 签名
            string url  = SDKConfig.FrontTransUrl;
            string html = AcpService.CreateAutoFormHtml(url, param, System.Text.Encoding.UTF8);

            Response.ContentEncoding = Encoding.UTF8; // 指定输出编码
            Response.Write(html);
        }
Beispiel #30
0
        /// <summary>
        /// 生成银行订单
        /// </summary>
        /// <param name="merId">商户号</param>
        /// <param name="orderId">订单ID</param>
        /// <param name="txnTime">订单时间</param>
        /// <param name="txtAmt">总金额分</param>
        /// <param name="R">是否成功生成银行订单</param>
        /// <returns></returns>
        public string GenerateBankOrder(string CommunityId, string orderId, string txnTime, string txnAmt, ref bool R, ref string BankOrderId)
        {
            string Result = "";

            R = false;
            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"]     = s.FrontUrl;                   //前台通知地址
            param["backUrl"]      = s.BackUrl;                    //后台通知地址
            param["currencyCode"] = "156";                        //交易币种

            param["merId"]   = s.merId.ToString();                //商户号
            param["orderId"] = orderId;                           //商户订单号,8-32位数字字母,不能含“-”或“_”
            param["txnTime"] = txnTime;                           //订单发送时间,格式为YYYYMMDDhhmmss,
            param["txnAmt"]  = txnAmt;                            //交易金额,单位分,此处默认取demo演示页面传递的参数

            param["reqReserved"] = CommunityId.ToString();        //自定义信息

            AcpService.Sign(param, System.Text.Encoding.UTF8, s); // 签名
            string url = s.AppRequestUrl;

            Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8, s);

            if (rspData.Count != 0)
            {
                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8, s))
                {
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //返回银行流水号
                        R           = true;
                        BankOrderId = rspData["tn"];
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        R      = false;
                        Result = "创建银行订单失败,订单号:" + orderId + ",时间:" + txnTime.ToString() + ",返回码:" + rspData["respMsg"].ToString();
                    }
                }
                else
                {
                    R      = false;
                    Result = "商户端验证返回报文签名失败";
                }
            }
            else
            {
                R      = false;
                Result = "请求失败";
            }

            return(Result);
        }