Exemple #1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        int          id = WebCommon.GetIntPara(Context, "id");
        tb_userOrder uo = new tb_userOrderHandle().GetInfo(id);

        new payExtentions().UpdateOrderPayStats(uo);

        Response.Write("支付状态更新成功");
    }
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemple #3
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);
    }