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;
using System.Collections.Specialized;
using System.IO;
using Gateway;
/// <summary>
/// 创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。
/// 该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
/// </summary>
public partial class Alipay_Return : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//string alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
string key = "写自己的"; //partner 的对应交易安全校验码(必须填写)
string partner = "写自己的"; //partner合作伙伴id(必须填写)
string _input_charset = "utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。
alipayNotifyURL = alipayNotifyURL + "&partner=" + partner + "¬ify_id=" + Request.QueryString["notify_id"];
//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
string responseTxt = AliPay.Get_Http(alipayNotifyURL, 120000);
//*******加密签名程序开始//*******
int i;
NameValueCollection coll;
//Load Form variables into NameValueCollection variable.
coll = Request.QueryString;
// Get names of all forms into a string array.
String[] requestarr = coll.AllKeys;
//进行排序;
string[] Sortedstr = AliPay.BubbleSort(requestarr);
//构造待md5摘要字符串 ;
StringBuilder prestr = new StringBuilder();
for (i = 0; i < Sortedstr.Length; i++)
{
if (Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type")
{
if (i == Sortedstr.Length - 1)
{
prestr.Append(Sortedstr[i] + "=" + Request.QueryString[Sortedstr[i]]);
}
else
{
prestr.Append(Sortedstr[i] + "=" + Request.QueryString[Sortedstr[i]] + "&");
}
}
}
prestr.Append(key);
//生成Md5摘要;
string mysign = AliPay.GetMD5(prestr.ToString(), _input_charset);
//*******加密签名程序结束*******
string sign = Request.QueryString["sign"];
// Response.Write(prestr.ToString()); //调试用,支付宝服务器返回时的完整路径。
if (mysign == sign && responseTxt == "true") //验证支付发过来的消息,签名是否正确
{
//更新自己数据库的订单语句,请自己填写一下
string strOrderNO = Request.QueryString["out_trade_no"];//订单号
string strPrice = Request.QueryString["total_fee"];//金额
string strTradeStatus = Request.QueryString["TRADE_STATUS"];//订单状态
//生成对象
//OfficeFinanceServices objOfficeFinanceServices = new OfficeFinanceServices();
//订单信息
string[] login = strOrderNO.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
////查询当前的余额
//decimal objdm = objOfficeFinanceServices.OfficeFinanceSelect(Convert.ToInt32(login[0].ToString().Trim()), true);
//OfficeFinance objofficeFinance = new OfficeFinance();
//objofficeFinance.ofId = Convert.ToInt32(login[0].ToString().Trim());
//objofficeFinance.ofOrid = "cz";
//objofficeFinance.ofTime = DateTime.Now;
//objofficeFinance.ofType = 1;
//objofficeFinance.ofAmount = Convert.ToDecimal(strPrice.ToString().Trim());
//objofficeFinance.ofRemainAmount = Convert.ToDecimal(strPrice.ToString().Trim()) + objdm;
//objofficeFinance.ofIsCurrentValue = 1;
//objofficeFinance.ofUserId = -10;
//objofficeFinance.ofNote1 = "支付宝上帐:" + strPrice.ToString().Trim() + "元";
//objofficeFinance.ofNote2 = "商户:" + login[1].ToString().Trim() + " 通过支付宝上帐金额:" + strPrice + "元";
//objOfficeFinanceServices.addOfficeFinanceOne(objofficeFinance);
Response.Write("商户:" + login[1].ToString().Trim() + "<br>金额:" + strPrice + " 交易成功"); //成功,可美化该页面,提示信息
////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + ",responseTxt=" + responseTxt + " 交易信息" + "商户:" + login[1].ToString().Trim() + "<br>金额:" + strPrice + " 交易成功";
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
}
else
{
Response.Write("------------------------------------------");
Response.Write("<br>Result:responseTxt=" + responseTxt);
Response.Write("<br>Result:mysign=" + mysign);
Response.Write("<br>Result:sign=" + sign);
Response.Write("支付失败");
////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + ",responseTxt=" + responseTxt;
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
//支付失败,提示信息
}
}
}
这个是当交易成功后要调用 的界面 在这里只要改动一下就行了, 其实我们要做的只是改一下这里,只要在这里更新一下你的数据库就行了,
代码
复制代码 代码如下: