首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

.NET 支付宝接口 1.快捷登录接口,2.支付接口 示范

2012-12-19 
.NET 支付宝接口 1.快捷登录接口,2.支付接口 示例很早以前我在CSDN论坛上问过这个问题,一个项目中同时使用

.NET 支付宝接口 1.快捷登录接口,2.支付接口 示例
很早以前我在CSDN论坛上问过这个问题,一个项目中同时使用这两个接口的问题。
终于有时间上来逛逛,分享下支付宝接口示例,给不会的朋友做个介绍,会的朋友请不要喷,谢谢合作!

首先当项目中需要支付宝接口的时候,人家会给你一个Demo,里边代码很重要,基本都可以拿来复制黏贴,只需
改下参数而已。
2个接口的类是一样的,所以需要放在2个文件夹中,你也可以放在类库中。我是这样放的

App中是支付接口的类,外部是登录接口的类
首先需要把阴影的类中的几个参数修改下


        static Config()
        {
            //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

            //合作身份者ID,以2088开头由16位纯数字组成的字符串
            partner = "2088601323326437";

            //交易安全检验码,由数字和字母组成的32位字符串
            key = "";

            //签约支付宝账号或卖家支付宝帐户
            seller_email = "";

            //页面跳转同步返回页面文件路径 要用 http://格式的完整路径,不允许加?id=123这类自定义参数
            return_url = "http://ozmb.inicp.com/zfbreturn.aspx";

            //服务器通知的页面文件路径 要用 http://格式的完整路径,不允许加?id=123这类自定义参数
            notify_url = "http://ozmb.inicp.com/zfbreturn.aspx";

说明部分很清楚,我就不解释了
其他部分都不需要动!
支付宝快捷登录
这个接口很简单,2个页面,一个Send,一个return页面

using Com.Alipay;
///////Send页面,除了我的判断,其他都可以复制黏贴,类的引用要注意,根据你的文件夹所在来引用
public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Member_Info"] == null && Session["App"]==null)
        {
            string anti_phishing_key = "";
            //获取客户端的IP地址,建议:编写获取客户端IP地址的程序
            string exter_invoke_ip = "";
            //注意:
            //请慎重选择是否开启防钓鱼功能
            //exter_invoke_ip、anti_phishing_key一旦被设置过,那么它们就会成为必填参数
            //建议使用POST方式请求数据
            //示例:
            //exter_invoke_ip = "";
            //Service aliQuery_timestamp = new Service();
            //anti_phishing_key = aliQuery_timestamp.Query_timestamp();               //获取防钓鱼时间戳函数

            ////////////////////////////////////////////////////////////////////////////////////////////////

            //把请求参数打包成数组


            SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
            sParaTemp.Add("anti_phishing_key", anti_phishing_key);
            sParaTemp.Add("exter_invoke_ip", exter_invoke_ip);

            //构造快捷登录接口表单提交HTML数据,无需修改
            Service ali = new Service();
            string sHtmlText = ali.Alipay_auth_authorize(sParaTemp);
            Response.Write(sHtmlText);
        }
        else if (Session["Member_Info"] != null)
        {
            Response.Write("<script>alert('你已经登录,请先退出在进行支付宝登录!');location.href='index.aspx';</script>");
        }
        else if (Session["App"] != null)
        {
            Response.Write("<script>alert('你已经登录过了!');location.href='index.aspx';</script>");
        }
    }
}

//下边是返回页面return。一个泛型方法不要忘记。除了我的判断其他可以直接复制黏贴
using Com.Alipay;

public partial class zfblogin : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        { 
             SortedDictionary<string, string> sPara = GetRequestGet();

             if (sPara.Count > 0)//判断是否有带返回参数
             {
                 Notify aliNotify = new Notify();
                 bool verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);

                 if (verifyResult)//验证成功
                 {
                     /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                     //请在这里加上商户的业务逻辑程序代码

                     //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                     //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表


                     string user_id = Request.QueryString["user_id"];//支付宝用户id
                     string token = Request.QueryString["token"];//授权令牌
                     Label4.Text = user_id.ToString();
                     Session["token"] = token;
                     Session["App"] = user_id;
                 }
                 else {
                     Response.Write("<script>alert('登录失败');location.href='index.aspx'</script>");
                 }
             }
             else
             {
                 Response.Write("<script>alert('登录失败');location.href='index.aspx'</script>");
             }

        }
    }
    public SortedDictionary<string, string> GetRequestGet()
    {
        int i = 0;
        SortedDictionary<string, string> sPara = new SortedDictionary<string, string>();
        NameValueCollection coll;
        //Load Form variables into NameValueCollection variable.
        coll = Request.QueryString;

        // Get names of all forms into a string array.
        String[] requestItem = coll.AllKeys;

        for (i = 0; i < requestItem.Length; i++)
        {
            sPara.Add(requestItem[i], Request.QueryString[requestItem[i]]);
        }

        return sPara;
    }
}



[最优解释]
学习下。+++
[其他解释]
upupupupupupupupupupupupupupupupupupupupupupupupupup
[其他解释]


...Very very Lonely ...So,go this way...
------其他解决方案--------------------


+++++
[其他解释]
学习了 支持
[其他解释]
学习一下
[其他解释]
谢谢分享。
[其他解释]
还不错吗
[其他解释]
谢谢,这些东西以后会用上的,感谢!
[其他解释]
项目 中有用到支付宝担保交易
[其他解释]
留个记号,目前项目没有这类需要,但是等需要的时候就有用了
[其他解释]
也做过.
楼主有这种分享的精神很值得赞赏.
[其他解释]
学习
  学习 

  帮顶
[其他解释]
谢谢楼主分享。
[其他解释]
关注下
[其他解释]
这个不错...  
[其他解释]
谢谢楼主的分享,收藏了。
[其他解释]
谢谢LZ分享
辛苦了
[其他解释]
收藏之
[其他解释]
谢谢分享
[其他解释]
谢谢分享了
[其他解释]
支付宝太贵
[其他解释]
谢谢分享了。。。。
[其他解释]
收藏,接分
[其他解释]
多谢分享,
[其他解释]
学习一下!


[其他解释]
学习 谢谢分享
[其他解释]
不错哈 以前我自己做的时候拿着接口摸不着头脑 当你会了之后觉得这个东西很傻很强大啊
只用传参数就好了
[其他解释]
Mark
[其他解释]

引用:
引用:
支付宝太贵

但是通用,中国人好像都是这样:看的不是贵不贵,好不好,而是时不时尚,潮不潮流吧?

接踵而至,跟随性太强!

帮顶,好东东
[其他解释]
学习一下~
[其他解释]
好帖 好贴。。。顶下。。
[其他解释]
很好很强大,收藏先
[其他解释]
好东西。。。看看
[其他解释]
做个记号 以后备用
[其他解释]
哇  谢谢分享   估计以后会用上
------其他解决方案--------------------


占位,顶!!!!!  能给DOME吗?
[其他解释]
如果有,发到ljs0203@sohu.com,感谢!!
[其他解释]
我也来一份吧。感谢LZ
zgm_2552601@163.com
[其他解释]
感谢分享啊!!!!!!!!
[其他解释]
学习了!
[其他解释]
学习了
[其他解释]
暂时 未涉及~~ 不过得先留个爪,以后待查看
[其他解释]
谢谢分享,占个位子,需要的时候看.
[其他解释]
我也要,zhang_2007@126.com,谢谢楼主
[其他解释]
学习,收藏!
[其他解释]
不错~~
[其他解释]
谢谢LZ分享    以后可能会用的到啊。。。
[其他解释]
感谢分享!
[其他解释]
坚决收藏了
[其他解释]
这个是自己做网页用的?
[其他解释]
要是源码能下载就好了
[其他解释]
该回复于2011-10-27 14:58:14被版主删除
[其他解释]


for(int i=0;i<1;i--)
{
response.write("mark");
}

[其他解释]
谢谢楼主分享喔~~
[其他解释]
哟嘻。。收了
[其他解释]
最近这样的小活挺多的,下载下来看看
[其他解释]
好的,谢谢LZ。
[其他解释]
收藏了,
[其他解释]
收藏了. 
[其他解释]
 谢谢!
[其他解释]
xs_zgsc@sina.cnLZ,给个Demo呗。UPUPUPUPUPUPUPUP
[其他解释]
code downurl  ?
[其他解释]
        记下...  以后估计用得着.
[其他解释]
code downurl ?
[其他解释]
学习了,谢谢楼主分享
[其他解释]
不错,收藏了
[其他解释]
楼主是个好人!

支持楼主!!!!
[其他解释]
该回复于2011-10-28 08:26:48被版主删除

[其他解释]
刘明待用
[其他解释]
学习了。收藏。
[其他解释]
顶一下...
[其他解释]
这个顶一下。呵呵
[其他解释]
楼主来一份!~lilwzca@yahoo.com.cn
[其他解释]
楼主强大
[其他解释]
学习了,谢谢楼主分享
[其他解释]
   static Config()
        {
            //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

            //合作身份者ID,以2088开头由16位纯数字组成的字符串
            partner = "2088601323326437";

            //交易安全检验码,由数字和字母组成的32位字符串
            key = "";

            //签约支付宝账号或卖家支付宝帐户
            seller_email = "";

            //页面跳转同步返回页面文件路径 要用 http://格式的完整路径,不允许加?id=123这类自定义参数
            return_url = "http://ozmb.inicp.com/zfbreturn.aspx";

            //服务器通知的页面文件路径 要用 http://格式的完整路径,不允许加?id=123这类自定义参数
            notify_url = "http://ozmb.inicp.com/zfbreturn.aspx";



[其他解释]
该回复于2011-10-28 11:30:17被版主删除
[其他解释]
收藏了!
[其他解释]
MARK,如今这样的好人不多了、、、
[其他解释]
好.不错!
[其他解释]
谢谢lz 分享 mark
[其他解释]
ease1919@163.com  麻烦发一份 THANKS
[其他解释]
收藏了,以后会用上
[其他解释]
100L
[其他解释]
null
[其他解释]
很早以前我在CSDN论坛上问过这个问题,一个项目中同时使用这两个接口的问题。
终于有时间上来逛逛,分享下支付宝接口示例,给不会的朋友做个介绍,会的朋友请不要喷,谢谢合作!

[其他解释]
学习下。+++ +
[其他解释]

支付接口

还是2个页面,一个是Send,一个还是return。传参页面主要是传递需要的:价格,收货人,电话等等信息,
返回页面是当用户支付完毕后,判断支付是否成功,返回到支付网页上来

// 这个是传参层,具体哪些需要填写都很清楚
            else if (RadioButtonList1.SelectedValue == "支付宝支付")


            {
                Session["time2"]= DateTime.Now.ToString("yyyyMMddHHmmss");
                ZFB();
                string out_trade_no =Session["time2"].ToString();  //请与贵网站订单系统中的唯一订单号匹配
                string subject = "蔓越莓支付宝支付:" + Session["time2"].ToString();                    //订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。
                string body = "配送方式:"+RadioButtonList2.SelectedValue+",来自:蔓越莓,订单号:"+Session["time2"].ToString();                          //订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里
                string price = Label8.Text.Trim();            //订单总金额,显示在支付宝收银台里的“商品单价”里

                string logistics_fee = double.Parse(Label7.Text)+"";                  //物流费用,即运费。
                string logistics_type = "EXPRESS";                //物流类型,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
                string logistics_payment = "SELLER_PAY";            //物流支付方式,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)

                string quantity = "1";              //商品数量,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品。

                //选填参数//

                //买家收货信息(推荐作为必填)
                //该功能作用在于买家已经在商户网站的下单流程中填过一次收货信息,而不需要买家在支付宝的付款流程中再次填写收货信息。
                //若要使用该功能,请至少保证receive_name、receive_address有值
                //收货信息格式请严格按照姓名、地址、邮编、电话、手机的格式填写
                string receive_name = UserName.Text;                    //收货人姓名,如:张三
                string receive_address = ddlProvince.SelectedValue + Request.Form["ddlCity"].ToString() + Address.Text;                //收货人地址,如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
                string receive_zip = "";


                if (Zip.Text != "")
                {
                    receive_zip = Zip.Text;                      //收货人邮编,如:123456
                }
                else
                {
                    receive_zip = "未填写";
                }
                string receive_phone = "";
                if (Phone.Text != "")
                {
                    receive_phone = Phone.Text;                    //收货人电话号码,如:0571-81234567
                }
                else
                {
                    receive_phone = "未填写";
                }
                string receive_mobile = Mobile.Text;                   //收货人手机号码,如:13312341234

                //网站商品的展示地址,不允许加?id=123这类自定义参数
                string show_url = "";

                //快捷登录用令牌授权码,该参数的值由快捷登录接口(alipay.auth.authorize)的页面跳转同步通知参数中获取
                string token = "";
                //注意:
                //token的有效时间为30分钟,过期后需重新执行快捷登录接口(alipay.auth.authorize)获得新的token

                ////////////////////////////////////////////////////////////////////////////////////////////////

                //把请求参数打包成数组
                SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();


                sParaTemp.Add("body", body);
                sParaTemp.Add("logistics_fee", logistics_fee);
                sParaTemp.Add("logistics_payment", logistics_payment);
                sParaTemp.Add("logistics_type", logistics_type);
                sParaTemp.Add("out_trade_no", out_trade_no);
                sParaTemp.Add("payment_type", "1");
                sParaTemp.Add("price", price);
                sParaTemp.Add("quantity", quantity);
                sParaTemp.Add("receive_address", receive_address);
                sParaTemp.Add("receive_mobile", receive_mobile);
                sParaTemp.Add("receive_name", receive_name);
                sParaTemp.Add("receive_phone", receive_phone);
                sParaTemp.Add("receive_zip", receive_zip);
                sParaTemp.Add("show_url", show_url);
                sParaTemp.Add("subject", subject);
                sParaTemp.Add("token", token);

                //构造标准双接口表单提交HTML数据,无需修改
                Service ali = new Service();
                string sHtmlText = ali.Trade_create_by_buyer(sParaTemp);
                Response.Write(sHtmlText);
            }



//下边是个返回层,判断是否支付成功,当成功我需要把订单加到数据
using Com.Alipay;
using System.Collections.Specialized;

public partial class zfb_success : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            SortedDictionary<string, string> sPara = GetRequestGet();

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify = new Notify();
                bool verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);



                if (verifyResult)//验证成功
                {
                    string order_no = Request.QueryString["out_trade_no"];
                    string total_fee = Request.QueryString["price"];
                    if (Session["EOrder"] != null && Session["Cart2"] != null)
                    {
                        PageDataBind();
                    }
                    else if (Session["COrder"] != null && Session["Cart"] != null)
                    {
                        PageDataBind2();
                    }
                    else
                    {
                        this.table2.Visible = true;
                        this.table1.Visible = false;
                    }
                }
                else {
                    this.table1.Visible = true;
                    this.table2.Visible = false;
                }
            }
            else {
                this.table1.Visible = true;
                this.table2.Visible = false;
            }
        }
    }
////这个类不能忘记添加进来
    public SortedDictionary<string, string> GetRequestGet()


    {
        int i = 0;
        SortedDictionary<string, string> sPara = new SortedDictionary<string, string>();
        NameValueCollection coll;
        //Load Form variables into NameValueCollection variable.
        coll = Request.QueryString;

        // Get names of all forms into a string array.
        String[] requestItem = coll.AllKeys;

        for (i = 0; i < requestItem.Length; i++)
        {
            sPara.Add(requestItem[i], Request.QueryString[requestItem[i]]);
        }

        return sPara;
    }



其实支付宝的Demo很清晰,示例很详细,很不错。网银接口也一样,都只是需要修改一些参数,其他都是直接
复制黏贴罢了。
[其他解释]
谢谢分享了。








论坛签名======================================================================

guijingcun:你好!
截至 2011-10-21 17:55:57 前:
你已发帖 7 个,未结贴 0 个;
结贴率为: 100.00%

当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html

如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖

如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
[其他解释]
该回复于2011-10-21 20:18:04被版主删除
[其他解释]
引用:
支付宝太贵

但是通用,中国人好像都是这样:看的不是贵不贵,好不好,而是时不时尚,潮不潮流吧?
[其他解释]
引用:
收藏,接分

回帖便有积分可得!
[其他解释]
该回复于2011-10-24 11:02:58被版主删除
[其他解释]
引用:
如果有,发到ljs0203@sohu.com,感谢!!

要的话,给邮箱,下边那个一会再发
[其他解释]
该回复于2011-11-07 08:56:23被版主删除
[其他解释]
该回复于2011-10-27 15:10:50被版主删除
[其他解释]









论坛签名======================================================================

guijingcun:你好!
截至 2011-10-27 11:01:20 前:
你已发帖 8 个,未结贴 1 个;
结贴率为: 87.50%

当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html


http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html

如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖

如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
[其他解释]
kunjust@163.com.楼主分享下。谢谢谢。
[其他解释]
以后有机会参考!

热点排行