支付宝接口(刚完成,应该是目前最好的了)

接口

支付宝的接口调用很不方便,刚做好一个封装,实现了虚拟交易和实物交易。
解决方案中有三个项目以及NDoc生成的文档,简单的序列图:CommonAliPay,封装的支付宝接口。
 TestAli,asp.net的测试项目
TestCommonAliPay,Nunit的测试项目。
调用方法:
1、引入CommonAliPay.dll
2、实现支付宝服务接口的方法调用方式:
 AliPay ap = new AliPay();
        string key = "";//填写自己的key
        string partner = "";//填写自己的Partner
        StandardGoods bp = new StandardGoods("trade_create_by_buyer", partner, key, "MD5", "卡2", Guid.NewGuid().ToString(), 2.551m, 1, "hao_ding2000@yahoo.com.cn", "hao_ding2000@yahoo.com.cn"
            , "EMS", 25.00m, "BUYER_PAY","1");
           bp.Notify_Url = "http://203.86.79.185/ali/notify.aspx";
        ap.CreateStandardTrade("https://www.alipay.com/cooperate/gateway.do", bp, this);上面是通用的调用方式。
下面是只支持虚拟货物的方式:
 string key = "";//填写自己的key
        string partner = "";//填写自己的Partner
        AliPay ap = new AliPay();
        DigitalGoods bp = new DigitalGoods("create_digital_goods_trade_p", partner, key, "MD5", "卡2", Guid.NewGuid().ToString(), 2.551m, 1, "hao_ding2000@yahoo.com.cn", "hao_ding2000@yahoo.com.cn");
        bp.Notify_Url = "http://203.86.79.185/ali/notify.aspx";
        ap.CreateDigitalTrade("https://www.alipay.com/cooperate/gateway.do", bp, this);3、实现支付宝通知接口方法的调用(支持虚拟和实物):
protected void Page_Load(object sender, EventArgs e)
    {
      
        string key = "";//填写自己的key
        string partner = "";//填写自己的Partner
         AliPay ap = new AliPay();
         string notifyid = Request.Form["notify_id"];
         Verify v = new Verify("notify_verify", partner, notifyid);
        ap.WaitSellerSendGoods+=new AliPay.ProcessNotifyEventHandler(ap_WaitSellerSendGoods);
        ap.WaitBuyerPay += new AliPay.ProcessNotifyEventHandler(ap_WaitBuyerPay);
        ap.ProcessNotify(this, "https://www.alipay.com/cooperate/gateway.do",key,v, "utf-8");
    }

    void ap_WaitBuyerPay(object sender, NotifyEventArgs e)
    {
        // //加入自己的处理逻辑
        Log4net.log.Error("wait buyer pay fire");
    }

  
    private void ap_WaitSellerSendGoods(object sender, NotifyEventArgs e)
    {
        //加入自己的处理逻辑
        Log4net.log.Error("WaitSellerSendGoods fire");
    }支付宝的交易状态都被定义成了类似名称的事件。
部分源代码解析:
1、解析Forms集合到NotifyEventArgs类,因为后面此类的数据要用来做MD5Sign,所以所有值类型,不能存在初始值,如:int的0等。因此用Nullable范型。
   private NotifyEventArgs ParseNotify(NameValueCollection nv, object obj)
        {
            PropertyInfo[] propertyInfos = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (PropertyInfo pi in propertyInfos)
            {
                string v = nv.Get(pi.Name.ToLower());
                if (v != null)
                {
                    if (pi.PropertyType == typeof(string))
                    {

                        pi.SetValue(obj, v, null);

                    }
                    else if (pi.PropertyType == typeof(int?))
                    {
                        pi.SetValue(obj, int.Parse(v), null);
                    }
                    else if (pi.PropertyType == typeof(decimal?))
                    {

                        pi.SetValue(obj, decimal.Parse(v), null);
                    }
                    else if (pi.PropertyType == typeof(DateTime?))
                    {

                        pi.SetValue(obj, DateTime.Parse(v), null);
                    }
                    else if (pi.PropertyType == typeof(bool))
                    {

                        pi.SetValue(obj, bool.Parse(v), null);
                    }
                    else
                    {
                        //转型失败会抛出异常
                        pi.SetValue(obj, v, null);
                    }
                }

            }
            return (NotifyEventArgs)obj;

        }
2、从类型中获取排序后的参数
 /**//// <summary>
        /// 获取排序后的参数
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        private SortedList<string,string> GetParam(object obj)
        {
           
            PropertyInfo[] propertyInfos = obj.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);         
            SortedList<string, string> sortedList = new SortedList<string, string>(StringComparer.CurrentCultureIgnoreCase);
            foreach (PropertyInfo pi in propertyInfos)
            {

                if (pi.GetValue(obj, null) != null)
                {
                    if (pi.Name == "Sign" || pi.Name == "Sign_Type")
                    {
                        continue;
                    }
                    sortedList.Add(pi.Name.ToLower(), pi.GetValue(obj, null).ToString());
                 
                }
            }
            return sortedList;
                   
        }3、从SortedList中产生参数
 private string GetUrlParam(SortedList<string, string> sortedList,bool isEncode)
        {
            StringBuilder param = new StringBuilder();
            StringBuilder encodeParam = new StringBuilder();
            if (isEncode == false)
            {

                foreach (KeyValuePair<string, string> kvp in sortedList)
                {
                    string t = string.Format("{0}={1}", kvp.Key, kvp.Value);
                    param.Append(t + "&");
                }
                return param.ToString().TrimEnd('&');
            }
            else
            {
                foreach (KeyValuePair<string, string> kvp in sortedList)
                {
                     string et = string.Format("{0}={1}", HttpUtility.UrlEncode(kvp.Key), HttpUtility.UrlEncode(kvp.Value));
                     encodeParam.Append(et + "&");
                }
                return encodeParam.ToString().TrimEnd('&');
            }
 
        }

时间: 2024-12-03 05:26:10

支付宝接口(刚完成,应该是目前最好的了)的相关文章

PHP支付宝接口RSA验证

这两天一直困扰的PHP RSA签名验证问题终于解决了,由于之前RSA接触的不多,再加上官方至今还未有PHP的SDK可供参考,因此走了一些弯路,写在这里和大家分享.     虽然支付宝官方还未提供相关SDK,PHP确实可以实现RSA方式的签名,这点其实很重要,由于不熟悉,在遇到困难的时候,经常会不由自主地想到是否PHP不支持RSA签名,干脆用MD5得了,这样就没有了前进的动力.其实说穿了MD5和RSA签名,不同的只是签名方式的区别,其他的都一样,因此我这里主要说一下如何用RSA进行签名和验签. 

php支付宝接口用法分析

 这篇文章主要介绍了php支付宝接口用法,以实例形式较为详细的分析了php支付宝接口的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php支付宝接口用法.分享给大家供大家参考.具体分析如下: 现在流行的网站支持平台,支付宝当仁不让的老大了,现在我们就来告诉你如何使用支付宝api来做第三方支付,把支付宝放到自己网站来,代码如下: alipay_config.php配置程序如下:  代码如下: <?php */ //alipay_config.php 配置程序 $int

支付宝接口问题。return_url

问题描述 支付宝接口问题.return_url 项目在本地.没有发布到外网. 但是现在能够付款成功,我把return_url 写成本地的return_url.jsp. 但是接受不到数据.是我url写的不对还是?求大神指点. 之前我有一次debug是能够进入的,但后来进不去的.求解 解决方案 好像你要接受数据的话,要把项目放在外网才行,具体问下支付宝客服. 解决方案二: 你本地,支付宝服务器访问不到,怎么返回URL给你 解决方案三: 支付宝外部商家接口中的return_url和notify_url

服务端-Andriod 集成支付宝接口

问题描述 Andriod 集成支付宝接口 一般的做法是做手机上直接调用支付宝接口,我现在想把调用支付宝接口放在服务端实现,app只需把参数传给服务端,服务端调用支付宝接口完毕返回参数给app端,请问这样设计合理吗? 假设合理,那么服务端调用的 调用支付宝接口跳转到支付宝支付页面,请问这个支付页面大小是PC浏览器大小还是手机屏幕大小呢? 解决方案 当然不合理,能通过网络直接访问,为什么要到你的服务器上.客户会担心你盗取他们的帐户和密码的. 解决方案二: 打个比方,你去商城买件衣服,你想刷卡.商家掏

银联支付接口+支付宝接口统一支付功能

这个demo发出来已经比较久了,后面发现陆续还有同学找到我,我这里说下现在的情况.这个接口中的银联支付接口实际也是走的支付宝接口,不需要单独申请银联了.但是!支付宝的这个接口已经下架了,以前已经接入的此接口还可以照常使用,新接入的不能再使用银联接口.===================这个model将支付宝和银行支付统一到一起,摆脱了对SDK的依赖,我尽量封在了PayAction: <?php  class PayAction extends Action{     //支付跳转     fu

mvc 支付宝接口-mvc调用直接报接口问题

问题描述 mvc调用直接报接口问题 mvc 调用支付宝接口成功后.然后返回页面路径 哪里怎么写. 求大神帮忙解决下

CodeIgniter开发实现支付宝接口调用的方法示例_php实例

本文实例讲述了CodeIgniter开发实现支付宝接口调用的方法.分享给大家供大家参考,具体如下: 准备: 1.alipay官方下载最新接口类库 2.解压后,将目录"\即时到账交易接口-create_direct_pay_by_user\demo\create_direct_pay_by_user-PHP-UTF-8\lib"复制到 application\third_party目录下,并改名lib为alipay 3.同样复制cacert.pem文件到"application

框架-支付宝接口问题,不懂了。求大神

问题描述 支付宝接口问题,不懂了.求大神 一个页游网站.框架用了ssh,我想用action来管理发送和回收操作.但是有一个疑问就是 创建了一个alipayAction那不是得去Spring设置Dao 还有service了吗??不然怎么走的通.?求解 解决方案 支付宝不是都有接口代码的吗?直接贴上去就能用

数据库-支付宝接口问题。付款和本地订单生成问题

问题描述 支付宝接口问题.付款和本地订单生成问题 我想调用支付宝接口进行付款操作,同时我又要给本地数据库添加订单信息(订单信息有订单编号.和网站币).我不知道我该如何操作. 有点混.思路不清晰了..操作都是在一个页面进行的.按钮的话就一个.提交按钮 解决方案 支付宝问题支付宝sdk问题支付宝接口需要特别注意的几点问题 解决方案二: 理清过程,有订单才有支付,要支付就得有接口,过后才有记录, 解决方案三: 你看看其他购物网站,哪个不是分2步实现的? 首先是用一个页面的表单提交订单 然后另一个页面的