惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Palo Alto Networks Blog
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Schneier on Security
Engineering at Meta
Engineering at Meta
I
InfoQ
L
LangChain Blog
Cyberwarzone
Cyberwarzone
T
Tenable Blog
WordPress大学
WordPress大学
P
Privacy & Cybersecurity Law Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
C
CERT Recently Published Vulnerability Notes
Scott Helme
Scott Helme
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
Know Your Adversary
Know Your Adversary
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Last Watchdog
The Last Watchdog
Last Week in AI
Last Week in AI
Cloudbric
Cloudbric
S
SegmentFault 最新的问题
爱范儿
爱范儿
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 叶小钗
AI
AI
T
Tor Project blog
I
Intezer
T
Threatpost
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Visual Studio Blog
N
News and Events Feed by Topic
Latest news
Latest news
S
Security Affairs
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog RSS Feed
C
Cybersecurity and Infrastructure Security Agency CISA
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
S
Securelist

博客园 - kkk

无题 重出江湖! 技巧百问(10):UrlRewrite以及二级UrlRewrite 今天周末休息一天,发贴! 转贴:ASP.NET 2.0 中改进的缓存功能 一个多月来第一贴! 怀念一下《幽灵公主》 惊悚科幻 《灵幻夹克》 西安归来!(终于写完了) 关于MD5码的一些自我总结 再总结一些技巧 超准的爱情测验! 转贴:Oracle(甲骨文)的CEO Larry.Ellison在耶鲁大学2000届毕业典礼上的演讲 转贴:出租车司机给微软高管上的MBA课程! 80个Gmail帐号,5个Live Messenger试用邀请,要的留言并注明是什么的邀请! 新年新贴! 关于asp.net c#中对cookie的操作 - kkk - 博客园 回滚事务日志文件中的事务 转贴:ASP.NET中的UrlRewrite
支付宝Payto接口的c#.net实现
kkk · 2006-04-20 · via 博客园 - kkk

        这里是最新的支付宝接口实现
        
       它现在这种支付方式比较多象网银在线等使用的方法都是url验证,就是通过url参数和一个这些url参数的md5编码来确认这个连接的正确性,支付宝在你购买成功后跳转自定义连接的时候会传2次过来,第一次是数据底层请求,第二次是web请求,而只有第一次有验证码,这个只能通过记录下来才看的到,因为两次请求间隔很小,如果光显示的话最后的结果是被第二次覆盖了的。所以在接收的时候就要设定接收条件,一种是没有notify_type参数的,一种是有的。

         我们先来看一下创建一个连接地址

t1=ConfigurationSettings.AppSettings["interface"];//支付接口,就是给的一个连接地址
            t2=ConfigurationSettings.AppSettings["account"];//支付宝帐户你的帐户
            t3=ConfigurationSettings.AppSettings["password"];//安全校验码,设置的商家验证码
            t4="images/logo_zfbsmall.gif";//按钮图片地址
            t5="test";//悬停说明
            cmd="0001";//默认
            subject="item";//商品名称
            body="decrip";//描述
            order_no=;//定单号,用户自己生成,方便自己管理                prices=100;//价格0.01~50000.00
            rurl="http://www.xxx.com/";//商品展示网址
            types="1";//1:商品购买2:服务购买3:网络拍卖4:捐赠
            number="1";//购买数量
            transport="3";//1:平邮2:快递3:虚拟物品
            ordinary_fee="";//平邮运费
            express_fee="";//快递运费
            readonlys="true";//交易信息是否只读
            buyer_msg="";//买家给卖家的留言
            buyer="";//买家Email
            buyer_name="";//买家姓名
            buyer_address="";//买家地址
            buyer_zipcode="";//买家邮编
            buyer_tel="";//买家电话号码
            buyer_mobile="";//买家手机号码
            partner=ConfigurationSettings.AppSettings["partenid"];//合作伙伴ID,这个是固定的

上面就是要提供得基本信息,然后就是生成支付宝得连接,也就是给支付宝提供一条带验证的购买信息。

public string creatAlipayItemURL(string t1,string t2,string t3,string t4,string t5,string cmd,string subject,string body,string order_no,string prices,string rurl,string types,string number,string transport,string ordinary_fee,string express_fee,string readonlys,string buyer_msg,string buyer,string buyer_name,string buyer_address,string buyer_zipcode,string buyer_tel,string buyer_mobile,string partner)
        {
            
string itemURL,str2CreateAc,acCode;
            
string INTERFACE_URL,sellerEmail,keyCode,imgsrc,imgtitle,AlipayItemURL;
            
//初始化各必要变量
            INTERFACE_URL=t1+t2;//支付接口
            sellerEmail=t2;//商户支付宝账户(改成你自己的)
            keyCode=t3;//安全校验码(改成你自己的)
            imgsrc=t4;//支付宝按钮图片
            imgtitle=t5;//按钮悬停说明

            str2CreateAc
="cmd" + cmd + "subject" + subject;
            str2CreateAc
=str2CreateAc + "body" + body;
            str2CreateAc
=str2CreateAc + "order_no" + order_no;
            str2CreateAc
=str2CreateAc + "price" + prices;
            
//str2CreateAc=str2CreateAc + "url" + rurl;
            str2CreateAc=str2CreateAc + "type" + types;
            str2CreateAc
=str2CreateAc + "number" + number;
            str2CreateAc
=str2CreateAc + "transport" + transport;
            
/*str2CreateAc=str2CreateAc + "ordinary_fee" + ordinary_fee;
            str2CreateAc=str2CreateAc + "express_fee" + express_fee;
            str2CreateAc=str2CreateAc + "readonly" + readonlys;
            str2CreateAc=str2CreateAc + "buyer_msg" + buyer_msg;
*/
            str2CreateAc
=str2CreateAc + "seller" + sellerEmail;
            
/*str2CreateAc=str2CreateAc + "buyer" + buyer;
            str2CreateAc=str2CreateAc + "buyer_name" + buyer_name;
            str2CreateAc=str2CreateAc + "buyer_address" + buyer_address;
            str2CreateAc=str2CreateAc + "buyer_zipcode" + buyer_zipcode;
            str2CreateAc=str2CreateAc + "buyer_tel" + buyer_tel;
            str2CreateAc=str2CreateAc + "buyer_mobile" + buyer_mobile;
*/
            str2CreateAc
=str2CreateAc + "partner" + partner;
            str2CreateAc
=str2CreateAc + keyCode;//acCode=FormsAuthentication.HashPasswordForStoringInConfigFile(str2CreateAc,"MD5");
            acCode=this.GetMD5(str2CreateAc,"gb2312");
            itemURL
=INTERFACE_URL + "?cmd=" + cmd;
            itemURL
=itemURL + "&subject=" + HttpUtility.UrlEncode(subject);
            itemURL
=itemURL + "&body=" + HttpUtility.UrlEncode(body);
            itemURL
=itemURL + "&order_no=" + order_no;
            itemURL
=itemURL + "&price=" + prices;
            
//itemURL=itemURL + "&url=" + rurl;
            itemURL=itemURL + "&type=" + types;
            itemURL
=itemURL + "&number=" + number;
            itemURL
=itemURL + "&transport=" + transport;
            
/*itemURL=itemURL + "&ordinary_fee=" + ordinary_fee;
            itemURL=itemURL + "&express_fee=" + express_fee;
            itemURL=itemURL + "&readonly=" + readonlys;
            itemURL=itemURL + "&buyer_msg=" + HttpUtility.UrlEncode(buyer_msg);
            itemURL=itemURL + "&buyer=" + HttpUtility.UrlEncode(buyer);
            itemURL=itemURL + "&buyer_name=" + HttpUtility.UrlEncode(buyer_name);
            itemURL=itemURL + "&buyer_address=" + HttpUtility.UrlEncode(buyer_address);
            itemURL=itemURL + "&buyer_zipcode=" + buyer_zipcode;
            itemURL=itemURL + "&buyer_tel=" + buyer_tel;
            itemURL=itemURL + "&buyer_mobile=" + buyer_mobile;
*/
            itemURL
=itemURL + "&partner=" + partner;
            itemURL
=itemURL + "&ac=" + acCode;
            AlipayItemURL
=itemURL;
                        
return AlipayItemURL;
        }

这个函数就是返回生成的地址,里面注释掉的看你自己需要可以添加进去,然后就是md5码的问题,现在用默认的md5生成程序对中文的支持只限于GB2312,而支付宝使用的是GBK,虽然两个编码的内容GBK兼容GB2312但是毕竟两个编码方式不同,所以会产生错误,如果用英文或者数字不会有问题。上面下载里面带的一个md5.asp的算法支持中文。
        现在已经可以跳转到支付宝的页面了,而我们这边就要自己记录用户的信息已经生成的定单编号,这样在支付宝返回信息的时候来查询。在设定了返回地址后,我们就要看接收页面了。

string msg_id,order_no,gross,buyer_email,buyer_name,buyer_address,buyer_zipcode,buyer_tel,buyer_mobile,action,s_date,ac,notify_type;
    
            
string returnTxt;//返回给支付宝通知接口的结果
            string alipayNotifyURL;//支付宝查询接口URL
            string myalipayEmail;//商户的支付宝Email
            string ResponseTxt="";
    

            returnTxt            

= "N";
            alipayNotifyURL        
= ConfigurationSettings.AppSettings["interfaceback"];//支付宝查询接口地址
            myalipayEmail        = ConfigurationSettings.AppSettings["account"];//填写您的支付宝帐号//检查支付宝通知接口传递过来的参数是否合法
            msg_id            = newop.DelStr(Request["msg_id"]);
            order_no        
= newop.DelStr(Request["order_no"]);
            gross            
= newop.DelStr(Request["gross"]);
            buyer_email        
= newop.DelStr(Request["buyer_email"]);
            buyer_name        
= newop.DelStr(Request["buyer_name"]);
            buyer_address    
= newop.DelStr(Request["buyer_address"]);
            buyer_zipcode    
= newop.DelStr(Request["buyer_zipcode"]);
            buyer_tel        
= newop.DelStr(Request["buyer_tel"]);
            buyer_mobile    
= newop.DelStr(Request["buyer_mobile"]);
            action            
= newop.DelStr(Request["action"]);
            s_date            
= newop.DelStr(Request["date"]);
            ac                
= newop.DelStr(Request["ac"]);
            notify_type     
= newop.DelStr(Request["notify_type"]);

            alipayNotifyURL    

= alipayNotifyURL + "msg_id=" + msg_id + "&email=" + myalipayEmail + "&order_no=" + order_no;
    
            System.Net.WebClient isClient
= new System.Net.WebClient();
            Stream isStream 
= isClient.OpenRead(alipayNotifyURL);
            StreamReader isReader 
= new StreamReader(isStream,System.Text.Encoding.GetEncoding("GB2312"));
            ResponseTxt 
= isReader.ReadToEnd();if(action == "test")//测试商户网站URL是否正确安装
            {
                returnTxt    
= "Y";
            }
            
else if((action=="sendOff")&&(msg_id!=""))//发货通知
            {
                returnTxt        
= "N";
                
if((ResponseTxt == "true")||(ResponseTxt == "false"))
                {
                    
//更新数据在商户系统里的订单数据;如果已经发货,则将returnTxt置为Y,否则为N
        
                }
                
else
                {
                    
//非法数据,不做更新
                    returnTxt="Error";
                }
            }
            
else if((action=="sendOff")&&(notify_type=="web"))
            {
                
//检查是否已经付帐,并记录            }
            else if((action=="checkOut")&&(msg_id!=""))//交易结束通知
            {
                returnTxt    
= "Y";
                
if((ResponseTxt=="true")||(ResponseTxt == "false"))
                {
                    
//更新数据在商户系统里的订单数据;如果数据更新成功,则将returnTxt置为Y,否则为N
                    
//更新数据
                    
//你的代码,更新你这边数据
                    returnTxt= "Y";
                }
                
else
                {
                    
//非法数据,不做更新
                    returnTxt    = "Error";
                }    
            }
            
else
            {
                returnTxt
="Error";
            }
            Response.Write(returnTxt);

中间那段webclient是返回支付宝查询这个消息是不是支付宝发出的,这里也使用的是获取支付宝那里一个查询接口的结果,True或者False。
这样就完成了整个支付的流程,而你需要做的就是记录用户买的数据,然后接受支付宝给你的信息并确认是否正确,而且是否已经购买或者已经发货,从而完成你的销售过程。接收页面做的标准就是在直接访问的情况下显示的结果只有N或者Y或者其他你设定的returnTxt的值,如果有其他内容将会不能实现功能。
        支付宝现在的即时到帐功能还没有正式发布,请不要私自做,要不然会出现麻烦。