在这之前就大家先下载一下c#版的及时到帐代码    这里是下载地址http://dev.alipay.com/devclub/mvnforum/viewthread_thread,4;jsessionid=595DB7442AAA5CD2FC849E7C2FBE51D7

 

先看一下程序的结构吧

支付宝详解

 

 

支付宝有一个类文件叫  AliPay 是一些加密算法之类的东西,包括构造URL

要吧看一下这个类的全部内容

 

using System.Web;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net;
using System;

/// <summary>
/// New Interface for AliPay
/// </summary>
namespace Gateway
{
    
public class AliPay
    {
        
/// <summary>
        
/// 与ASP兼容的MD5加密算法
        
/// </summary>
        public static string GetMD5(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(t[i].ToString(
"x").PadLeft(2'0'));
            }
            
return sb.ToString();
        }

        
/// <summary>
        
/// 冒泡排序法
        
/// 按照字母序列从a到z的顺序排列
        
/// </summary>
        public static string[] BubbleSort(string[] r)
        {
            
int i, j; //交换标志 
            string temp;

            
bool exchange;

            
for (i = 0; i < r.Length; i++//最多做R.Length-1趟排序 
            {
                exchange 
= false//本趟排序开始前,交换标志应为假

                
for (j = r.Length - 2; j >= i; j--)
                {
//交换条件
                    if (System.String.CompareOrdinal(r[j + 1], r[j]) < 0)
                    {
                        temp 
= r[j + 1];
                        r[j 
+ 1= r[j];
                        r[j] 
= temp;

                        exchange 
= true//发生了交换,故将交换标志置为真 
                    }
                }

                
if (!exchange) //本趟排序未发生交换,提前终止算法 
                {
                    
break;
                }
            }
            
return r;
        }

        
/// <summary>
        
/// 生成URL链接或加密结果
        
/// </summary>
        
/// <param name="para">参数加密数组</param>
        
/// <param name="_input_charset">编码格式</param>
        
/// <param name="sign_type">加密类型</param>
        
/// <param name="key">安全校验码</param>
        
/// <returns>字符串URL或加密结果</returns>
        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 StringBuilder();

            
for (i = 0; i < Sortedstr.Length; i++)
            {
                
if (i == Sortedstr.Length - 1)
                {
                    prestr.Append(Sortedstr[i]);

                }
                
else
                {
                    prestr.Append(Sortedstr[i] 
+ "&");
                }

            }

            prestr.Append(key);

            
//生成Md5摘要;
            string sign = GetMD5(prestr.ToString(), _input_charset);

            
//以下是POST方式传递参数
            return sign;

            
//以下是GET方式传递参数
            
//构造支付Url;
//            char[] delimiterChars = { '='};
//            StringBuilder parameter = new StringBuilder();
//            parameter.Append(gateway);
//            for (i = 0; i < Sortedstr.Length; i++)
//            {//UTF-8格式的编码转换
//                parameter.Append(Sortedstr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1]) + "&");
//            }
//
//            parameter.Append("sign=" + sign + "&sign_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 HttpWResp 
= (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 (Exception exp)
            {

                strResult 
= "错误:" + exp.Message;
            }

            
return strResult;
        }

    }
}

相关文章:

  • 2022-12-23
  • 2021-11-17
  • 2021-10-22
猜你喜欢
  • 2021-08-06
  • 2021-05-08
  • 2021-05-30
  • 2021-06-07
  • 2022-02-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案