1、ASP支付宝接口实现支付宝有一个类文件叫 AliPay 是一些加密算法之类的东西,包括构造URL要吧看一下这个类的全部内容using System.Web; using System.Text; using System.Security.Cryptography; using System.IO; using System.Net; using System; / / New Interface for AliPay / namespace Gateway public class AliPay / / 与ASP兼容的MD5加密算法 / public static string GetMD5
2、(string s, string _input_charset) MD5 md5 = new MD5CryptoServiceProvider(); byte t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s); StringBuilder sb = new StringBuilder(32); for (int i = 0; i t.Length; i+) sb.Append(ti.ToString(x).PadLeft(2, 0); return sb.ToString(); / / 冒泡排序法 / 按
3、照字母序列从a到z的顺序排列 / public static string BubbleSort(string r) int i, j; /交换标志 string temp; bool exchange; for (i = 0; i = i; j-) /交换条件 if (System.String.CompareOrdinal(rj + 1, rj) 0) temp = rj + 1; rj + 1 = rj; rj = temp; exchange = true; /发生了交换,故将交换标志置为真 if (!exchange) /本趟排序未发生交换,提前终止算法 break; return
4、r; / / 生成URL链接或加密结果 / / 参数加密数组 / 编码格式 / 加密类型 / 安全校验码 / 字符串URL或加密结果 public static string CreatUrl( /string gateway,/GET方式传递参数时请去掉注释 string para, string _input_charset, string sign_type, string key ) int i; /进行排序; string Sortedstr = BubbleSort(para); /构造待md5摘要字符串 ; StringBuilder prestr = new StringBui
5、lder(); for (i = 0; i Sortedstr.Length; i+) if (i = Sortedstr.Length - 1) prestr.Append(Sortedstri); else prestr.Append(Sortedstri + &); prestr.Append(key); /生成Md5摘要; string sign = GetMD5(prestr.ToString(), _input_charset); /以下是POST方式传递参数 return sign; /以下是GET方式传递参数 /构造支付Url; / char delimiterChars =
6、=; / StringBuilder parameter = new StringBuilder(); / parameter.Append(gateway); / for (i = 0; i Sortedstr.Length; i+) / /UTF-8格式的编码转换 / parameter.Append(Sortedstri.Split(delimiterChars)0 + = + HttpUtility.UrlEncode(Sortedstri.Split(delimiterChars)1) + &); / / / parameter.Append(sign= + sign + &sign
7、_type= + sign_type); / / /返回支付Url; / return parameter.ToString(); /获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求 public static string Get_Http(string a_strUrl, int timeout) string strResult; try HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl); myReq.Timeout = timeout; HttpWebResponse HttpWRes
8、p = (HttpWebResponse)myReq.GetResponse(); Stream myStream = HttpWResp.GetResponseStream(); StreamReader sr = new StreamReader(myStream, Encoding.Default); StringBuilder strBuilder = new StringBuilder(); while (-1 != sr.Peek() strBuilder.Append(sr.ReadLine(); strResult = strBuilder.ToString(); catch
9、(Exception exp) strResult = 错误: + exp.Message; return strResult; 而我们一般不用管这个类,只要保证能调用 的到就行了,不用管他 我们要做的很少,他是怎么工作的呢,这是开发文档里的工作图其实我们要处理的只有三个Aspx的文件,先看第一个吧 Default.aspx这是一个请求的界面using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; u
10、sing System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Gateway; public partial class _Default : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) protected void BtnAlipay_Click(object sender, EventArgs e) /业务参数赋值; strin
11、g gateway = /支付接口 string service = create_direct_pay_by_user; /服务名称,这个是识别是何接口实现何功能的标识,请勿修改 string seller_email = 写自己的; /商家签约时的支付宝帐号,即收款的支付宝帐号 string sign_type = MD5; /加密类型,签名方式“不用改” string key = 写自己的; /安全校验码,与partner是一组,获取方式是:用签约时支付宝帐号登陆支付宝网站,在商家服务我的商家里即可查到。 string partner = 写自己的; /商户ID,合作身份者ID,合作伙伴
12、ID string _input_charset = utf-8; /编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。 string show_url = /展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。 string out_trade_no = TxtOrderno.Text.Trim(); /客户自己的订单号,订单号必须在自身订单系统中保持唯一性 string subject = 4.0系统支付宝充值; /商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单 string body = 商户:
13、 + TxtOrderno.Text.Trim() + 通过支付宝给自己充值: + TxtTotal_fee.Text.Trim() + 元; /商品描述,即备注 string total_fee = TxtTotal_fee.Text.Trim(); /商品价格,也可称为订单的总金额 /服务器通知url(Alipay_Notify.aspx文件所在路经),必须是完整的路径地址 string notify_url = http:/0.0.6.108/Alipay/Alipay_Notify.aspx; /服务器返回url(Alipay_Return.aspx文件所在路经),必须是完整的路径地址
14、 string return_url = http:/0.0.6.108/Alipay/Alipay_Return.aspx; /构造数组; /以下数组即是参与加密的参数,若参数的值不允许为空,若该参数为空,则不要成为该数组的元素 string para = service=+service, partner= + partner, seller_email= + seller_email, out_trade_no= + out_trade_no, subject= + subject, body= + body, total_fee= + total_fee, show_url= + sh
15、ow_url, payment_type=1, notify_url= + notify_url, return_url= + return_url, _input_charset=+_input_charset ; /支付URL生成 string aliay_url = AliPay.CreatUrl( /gateway,/GET方式传递参数时请去掉注释 para, _input_charset, sign_type, key ); /以下是GET方式传递参数 /Response.Redirect(aliay_url); /以下是POST方式传递参数 Response.Write(form
16、name=alipaysubmit method=post action= Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.Write(); Response.W
17、rite(); Response.Write(document.alipaysubmit.submit(); Response.Write(); 下面的操作就是在支付平台的完成了, 跟咱的程序没有关系了现在我们应该想,那付完钱之后呢?我们有两个界面来处理这个问题一个是Alipay_Return.aspxusing System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web
18、.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; / / 创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。 / 该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是
19、支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。 / public partial class Alipay_Return : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) string alipayNotifyURL = /string alipayNotifyURL = string key = 写自己的; /partner 的对应交易安全校验码(必须填写) string partner = 写自己的; /partner合作伙伴id(必须填写) string _input_c
20、harset = utf-8;/编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。 alipayNotifyURL = alipayNotifyURL + &partner= + partner + ify_id= + Request.QueryStringnotify_id; /获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的 string responseTxt = AliPay.Get_Http(alipayNotifyURL, 120000); /*加密签名程序开始/* int i; NameValueCollecti
21、on 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;
22、 i Sortedstr.Length; i+) if (Request.FormSortedstri != & Sortedstri != sign & Sortedstri != sign_type) if (i = Sortedstr.Length - 1) prestr.Append(Sortedstri + = + Request.QueryStringSortedstri); else prestr.Append(Sortedstri + = + Request.QueryStringSortedstri + &); prestr.Append(key); /生成Md5摘要; st
23、ring mysign = AliPay.GetMD5(prestr.ToString(), _input_charset); /*加密签名程序结束* string sign = Request.QueryStringsign; / Response.Write(prestr.ToString(); /调试用,支付宝服务器返回时的完整路径。 if (mysign = sign & responseTxt = true) /验证支付发过来的消息,签名是否正确 /更新自己数据库的订单语句,请自己填写一下 string strOrderNO = Request.QueryStringout_trad
24、e_no;/订单号 string strPrice = Request.QueryStringtotal_fee;/金额 string strTradeStatus = Request.QueryStringTRADE_STATUS;/订单状态 /生成对象 /OfficeFinanceServices objOfficeFinanceServices = new OfficeFinanceServices(); /订单信息 string login = strOrderNO.Split(new string _ , StringSplitOptions.RemoveEmptyEntries); /查询当前的余额 /decimal objdm = objOfficeFinanceServices.OfficeFinanceSelect(Convert.ToInt32(login0.ToString().Trim(), true); /OfficeFinance objofficeFinance = new OfficeFinance(); /objofficeFinance.ofId = Convert.ToInt32(login0.ToSt
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1