//特别提示：本程序未在.NET环境进行测试，如有问题，请及时反馈给我们，谢谢！
//#############################################################
//#               贺喜支付平台支付接口接收程序
//#                          v2.2.NET
//#                   http://www.168reg.cn
//#
//#  版权所有: 株洲市和谐网络科技发展有限公司
//#
//#  主页地址: http://www.168reg.cn
//#  技术支持: support@168reg.cn
//#  技 术 QQ: 359465724
//#  技术QQ群：8246422，7048987
//#
//#############################################################
//# ·郑重声明:
//# ·此程序不得随意公开发布、销售或进行其他非法转让。
//# ·如对此程序有任何疑问，请在管理区留言。
//#############################################################

//本文件功能介绍：
//1、根据自己的密钥设置验证返回的加密字符串是否正确。
//2、显示定单成功页面（可自行进行美化）。
//3、如果返回的提交有错误，即显示错误信息。
//4、为了增强反馈定单的安全性，系统返回的加密字符串由“支付平台定单号+商户订单号+自定义字段1+自定义字段2+成功支付金额+支付方式编号+商户编号+定单支付状态+商户密钥+支付模式”经过MD5加密后产生的。下面的程序已经完成了此加密字符串的验证。
//5、为了防止黑客通过不正常的手段恶意反馈(刷新)成功页面，请您在此程序中加入验证定单号的功能，即每一个成功定单只能反馈一次此页面。
//6、反馈的数据您都可以充分利用并添加到您自己的数据库中。
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;


public partial class payreceive : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
			/*初始化定义参数*/

			//商户编号，请把您的商户编号替换掉这里的0值。
        String reg_userid = ConfigurationManager.AppSettings["reg_userid"];

			//商户密钥，请把您的商户密钥替换掉这里的空值。
			String reg_key=ConfigurationManager.AppSettings["reg_key"];

    	//您可以充分利用以下反馈信息并添加到您自己的数据库中。
	    String v_orderid = Request["v_orderid"];
	    String v_orderdate = Request["v_orderdate"];
	    String v_price = Request["v_price"];
	    String v_billno = Request["v_billno"];
	    String v_custom1 = Request["v_custom1"];
	    String v_custom2 = Request["v_custom2"];
	    String v_mobileno = Request["v_mobileno"];
        String v_servicename = Request["v_servicename"];
	    String v_payvia = Request["v_payvia"];
	    String v_payviastr = Request["v_payviastr"];
	    String v_md5 = Request["v_md5"];
	    String v_pstatus = Request["v_pstatus"];
	    String v_pstring = Request["v_pstring"];
	    String v_paymode = Request["v_paymode"];
    	
	    if(v_orderid != null && v_pstatus.Equals("1")){
				//-----------重新计算md5的值，验证返回的数字签名是否正确------------------------------------------------
				String md5text = v_orderid+v_billno+v_custom1+v_custom2+v_price+v_payvia+reg_userid+v_pstatus+reg_key+v_paymode;		//为正确数值串拼凑顺序
				string digestString = FormsAuthentication.HashPasswordForStoringInConfigFile(md5text, "MD5");  //计算MD5的值
		    if(v_md5 != null && v_md5.Equals(digestString)){
					    Response.Write("支付成功");
					    /*
						    建议在此对定单号和支付金额进行验证以防止用户刷新返回页面多次获得服务。
						    下面请放入定单成功后实时开通服务的代码或页面代码。
					    */

		    }else{
			    Response.Write("签名验证错误！");
		    }
	    }else{
		    Response.Write("无效的参数！");
	    }

    }
}
