예제 #1
0
    protected void BtnAlipay_Click(object sender, EventArgs e)
    {
        ////////////////////////////////////////////请求参数////////////////////////////////////////////


        //商户订单号,商户网站订单系统中唯一订单号,必填
        string out_trade_no = WIDout_trade_no.Text.Trim();

        //订单名称,必填
        string subject = WIDsubject.Text.Trim();

        //付款金额,必填
        string total_fee = WIDtotal_fee.Text.Trim();

        //收银台页面上,商品展示的超链接,必填
        string show_url = WIDshow_url.Text.Trim();

        //商品描述,可空
        string body = WIDbody.Text.Trim();

        PayLog.PayLogWrite(Guid.NewGuid().ToString(), "0", out_trade_no, "paysend", "zfb", decimal.Parse(total_fee), DateTime.Now, "", subject, DateTime.Now);


        ////////////////////////////////////////////////////////////////////////////////////////////////

        //把请求参数打包成数组
        SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>();

        sParaTemp.Add("partner", Config.partner);
        sParaTemp.Add("seller_id", Config.seller_id);
        sParaTemp.Add("_input_charset", Config.input_charset.ToLower());
        sParaTemp.Add("service", Config.service);
        sParaTemp.Add("payment_type", Config.payment_type);
        sParaTemp.Add("notify_url", Config.notify_url);
        sParaTemp.Add("return_url", Config.return_url);
        sParaTemp.Add("out_trade_no", out_trade_no);
        sParaTemp.Add("subject", subject);
        sParaTemp.Add("total_fee", total_fee);
        sParaTemp.Add("show_url", show_url);
        //sParaTemp.Add("app_pay","Y");//启用此参数可唤起钱包APP支付。
        sParaTemp.Add("body", body);
        //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.2Z6TSk&treeId=60&articleId=103693&docType=1
        //如sParaTemp.Add("参数名","参数值");

        //建立请求
        string sHtmlText = Submit.BuildRequest(sParaTemp, "get", "确认");

        Response.Write(sHtmlText);
    }
예제 #2
0
    protected void Page_Load(object sender, EventArgs e)
    {
        SortedDictionary <string, string> sPara = GetRequestPost();

        if (sPara.Count > 0)//判断是否有带返回参数
        {
            Notify aliNotify    = new Notify();
            bool   verifyResult = aliNotify.Verify(sPara, Request.Form["notify_id"], Request.Form["sign"]);

            if (verifyResult)//验证成功
            {
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                //请在这里加上商户的业务逻辑程序代码


                //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

                //商户订单号

                string out_trade_no = Request.Form["out_trade_no"];

                //支付宝交易号

                string trade_no = Request.Form["trade_no"];

                //交易状态
                string trade_status = Request.Form["trade_status"];


                string remarks = "【支付宝服务器异步通知】[return_url.aspx]支付宝返回值(out_trade_no=" + Request.Form["out_trade_no"] + ",trade_no=" + Request.Form["trade_no"] + ",trade_status=" + Request.Form["trade_status"] + ")";

                StarTech.DBUtility.AdoHelper adoHelper = StarTech.DBUtility.AdoHelper.CreateHelper("DB_Instance");

                if (Request.Form["trade_status"] == "TRADE_FINISHED")
                {
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                    //如果有做过处理,不执行商户的业务程序

                    //注意:
                    //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
                    object objMoney = adoHelper.ExecuteSqlScalar(" select top 1 paymoney from T_Order_PayLog where payStatu='paysend' and orderId='" + out_trade_no + "' order by payTime desc");
                    if (objMoney != null)
                    {
                        adoHelper.ExecuteSqlNonQuery("update T_Order_Info set isPay=1 , payTime=getdate() where isPay=0 and orderId='" + out_trade_no + "'");

                        PayLog.PayLogWrite(Guid.NewGuid().ToString(), "0", out_trade_no, "pay", "zfb", decimal.Parse(objMoney.ToString()), DateTime.Now, trade_no, remarks, DateTime.Now);
                    }
                }
                else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
                {
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                    //如果有做过处理,不执行商户的业务程序

                    //注意:
                    //付款完成后,支付宝系统发送该交易状态通知
                    object objMoney = adoHelper.ExecuteSqlScalar(" select top 1 paymoney from T_Order_PayLog where payStatu='paysend' and orderId='" + out_trade_no + "' order by payTime desc");
                    if (objMoney != null)
                    {
                        adoHelper.ExecuteSqlNonQuery("update T_Order_Info set isPay=1 , payTime=getdate() where isPay=0 and orderId='" + out_trade_no + "'");
                        adoHelper.ExecuteSqlNonQuery("update T_Goods_Info set JobStatus='进行中' where goodsId=(select goodsId from T_Order_InfoDetail where orderId='" + out_trade_no + "')");
                        PayLog.PayLogWrite(Guid.NewGuid().ToString(), "0", out_trade_no, "pay", "zfb", decimal.Parse(objMoney.ToString()), DateTime.Now, trade_no, remarks, DateTime.Now);
                    }
                }
                else
                {
                    PayLog.PayLogWrite(Guid.NewGuid().ToString(), "0", out_trade_no, "other", "zfb", 0, DateTime.Now, trade_no, remarks, DateTime.Now);
                }

                //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

                Response.Write("success");  //请不要修改或删除

                /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
            else//验证失败
            {
                Response.Write("fail");
            }
        }
        else
        {
            Response.Write("无通知参数");
        }
    }