热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(转)支付宝及时到帐接口

支付宝有一个类文件叫AliPay是一些加密算法的东西usingSystem.Web;usingSystem.Text;usingSystem.Security.

支付宝有一个类文件叫 AliPay 是一些加密算法的东西

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(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 )
            {
                sb.Append(t.ToString("x").PadLeft(2, '0'));
            }
            return sb.ToString();
        }
 
        /// 
        /// 冒泡排序法
        /// 按照字母序列从a到z的顺序排列
        /// 
        public static string[] BubbleSort(string[] r)
        {
            int i, j; //交换标志
            string temp;
 
            bool exchange;
 
            for (i = 0; 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;
        }
 
        /// 
        /// 生成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 StringBuilder();
 
            for (i = 0; i )
            {
                if (i == Sortedstr.Length - 1)
                {
                    prestr.Append(Sortedstr);
 
                }
                else
                {
                    prestr.Append(Sortedstr + "&");
                }
 
            }
 
            prestr.Append(key);
 
            //生成Md5摘要;
            string sign = GetMD5(prestr.ToString(), _input_charset);
 
            //以下是POST方式传递参数
            return sign;
 
        }
 
        //获取远程服务器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;
        }
 
    }
}
View Code

支付提交信息页面:

using System;
using System.Data;
using System.Configuration;
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 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)
    {
        //业务参数赋值;
        string gateway = "https://www.alipay.com/cooperate/gateway.do?";    //支付接口
        string service = "create_direct_pay_by_user";                       //服务名称,这个是识别是何接口实现何功能的标识,请勿修改
 
        string seller_email = "写自己的";                     //商家签约时的支付宝帐号,即收款的支付宝帐号
        string sign_type = "MD5";                                           //加密类型,签名方式“不用改”
        string key = "写自己的";                    //安全校验码,与partner是一组,获取方式是:用签约时支付宝帐号登陆支付宝网站[url=http://www.alipay.com/]www.alipay.com[/url],在商家服务我的商家里即可查到。
        string partner = "写自己的";                                //商户ID,合作身份者ID,合作伙伴ID
        string _input_charset = "utf-8";                                    //编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。
 
        string show_url = "http://www.alipay.com/";                         //展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。
 
        string out_trade_no = TxtOrderno.Text.Trim();                       //客户自己的订单号,订单号必须在自身订单系统中保持唯一性
        string subject = "4.0系统支付宝充值";                            //商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单
        string body = "商户:" + TxtOrderno.Text.Trim() + "通过支付宝给自己充值:" + TxtTotal_fee.Text.Trim() + "";                                   //商品描述,即备注
        string total_fee = TxtTotal_fee.Text.Trim();                        //商品价格,也可称为订单的总金额
 
        //服务器通知url(Alipay_Notify.aspx文件所在路经),必须是完整的路径地址
        string notify_url = [url=http://0.0.6.108/Alipay/Alipay_Notify.aspx;]http://0.0.6.108/Alipay/Alipay_Notify.aspx;[/url]
        //服务器返回url(Alipay_Return.aspx文件所在路经),必须是完整的路径地址
        string return_url = [url=http://0.0.6.108/Alipay/Alipay_Return.aspx;]http://0.0.6.108/Alipay/Alipay_Return.aspx;[/url]
 
        //构造数组;
        //以下数组即是参与加密的参数,若参数的值不允许为空,若该参数为空,则不要成为该数组的元素
        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=" + show_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("");
        Response.Write("" + service + ">");
        Response.Write("" + partner + ">");
        Response.Write("" + seller_email + ">");
        Response.Write("" + out_trade_no + ">");
        Response.Write("" + subject + ">");
        Response.Write("" + body + ">");
        Response.Write("" + total_fee + ">");
        Response.Write("" + show_url + ">");
        Response.Write("" + return_url + ">");
        Response.Write("" + notify_url + ">");
        Response.Write("");
        Response.Write("" + aliay_url + ">");
        Response.Write("" + sign_type + ">");
        Response.Write("");
        Response.Write("");
    }
}
View Code

支付成功后,返回验证信息页面:

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;
 
/// 
/// 创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。
/// 该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
/// 
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 )
        {
            if (Request.Form[Sortedstr] != "" && Sortedstr != "sign" && Sortedstr != "sign_type")
            {
                if (i == Sortedstr.Length - 1)
                {
                    prestr.Append(Sortedstr + "=" + Request.QueryString[Sortedstr]);
                }
                else
                {
                    prestr.Append(Sortedstr + "=" + Request.QueryString[Sortedstr] + "&");
 
                }
            }
        }
 
        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"];//订单状态
 
            //更新数据库


            //交易成功提示
            Response.Write("商户:" + login[1].ToString().Trim() + "
金额:
" + strPrice + " 交易成功"); //成功,可美化该页面,提示信息 } else { //支付失败,提示信息 Response.Write("
Result:respOnseTxt=
" + responseTxt); Response.Write("
Result:mysign=
" + mysign); Response.Write("
Result:sign=
" + sign); Response.Write("支付失败"); } } }
View Code

 


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
author-avatar
jackdaosen900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有