C#.net 支付宝接口
它现在这种支付方式比较多象网银在线等使用的方法都是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="商品展示网址
types="1";//1:商品购买2:服务购买3:网络拍卖4:捐赠
number="1";//购买数量
transport="3";//1:平邮2:快递3:虚拟物品
ordinary_fee="";//平邮运费
express_fee="";//快递运费
read;//交易信息是否只读
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(str2Create Ac,"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 Resp;
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;
https://www.doczj.com/doc/507264925.html,.WebClient isClient= new https://www.doczj.com/doc/507264925.html,.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);
官方资料白皮技术下载:
实物标准双接口资料下载:https://www.doczj.com/doc/507264925.html,/read-htm-tid-8681327.html
即时到帐接口资料下载:https://www.doczj.com/doc/507264925.html,/read-htm-tid-8681337.html
支付宝中介担保交易接口资料下载:https://www.doczj.com/doc/507264925.html,/read-htm-tid-8681340.html 支付宝快速付款接口案例下载:https://www.doczj.com/doc/507264925.html,/read-htm-tid-8681342.html
支付宝会员通用登录接口资料下载::https://www.doczj.com/doc/507264925.html,/read-htm-tid-8681347.html 确认发货接口资料下载:https://www.doczj.com/doc/507264925.html,/read-htm-tid-8681354.html
#.net
分享到:
举报浏览(258)评论转载
======================================
生成URL链接
1using System;
2using System.Data;
3using System.Configuration;
4using System.Collections;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.UI.WebControls;
9using System.Web.UI.WebControls.WebParts;
10using System.Web.UI.HtmlControls;
11using System.Text;
12
13public partial class pay : System.Web.UI.Page
14{
15protected void Page_Load(object sender, EventArgs e)
16 {
17 Encoding gb2312 = Encoding.GetEncoding("gb2312");
18 Response.ContentEncoding = gb2312;
19 Request.ContentEncoding = gb2312;
20 }
21protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 22 {
23if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
24 {
25 Vlike_DB_read a = new Vlike_DB_read();
26string zfb_ddh=a.get_zfb_id(Membership.GetUser().UserName,Conv ert.ToInt32(DropDownList1.SelectedValue));
27 Response.Redirect(img("0001", "包月", "影视包月 10元/月", zfb_dd h, "10.00", Membership.GetUser().UserName.ToUpper(), DropDownList1.Selected Value));
28 }
29else
30 {
31 Response.Write("
118
分类: https://www.doczj.com/doc/507264925.html, 2.0
=========================================
C#支付宝接口标准简化版
最近整合做的商城整合支付宝做了一个接口大家可以参考一下
通过测试没有问题的
演示可以到这里试试
[url]https://www.doczj.com/doc/507264925.html,[/url]
private void Page_Load(object sender, System.EventArgs e)
{
//Server.Transfer传递数据,创建原始窗体的实例
ConfirmOrderBill xs;
xs=(ConfirmOrderBill)Context.Handler;
//这是我们需要提供给支付宝的一些参数
string t1 = "https://https://www.doczj.com/doc/507264925.html,/payto:"; //支付接口
string t2 = "[email]aliketen@https://www.doczj.com/doc/507264925.html,[/email]"; //商户支付宝账户(改成你自己的)
string t3 = "MD5校验码"; //安全校验码(改成你自己的)
string s1 = "0001"; //cmd 命令码
string s2 = "宝贝商城商品订单号:"+xs.MyOrder; //'subject 商品名称
string s3 = "按该订单进行商品配送"; //'body
商品描述
string s4 = xs.MyOrder; //'orde r_no 商户订单号
string s5 = xs.MyMoney; //'price 商品单价
string s6 = "0.00"; //'ordin ary_fee 平邮运费
string s7 = "0.00"; //'express_f ee 快递运费
string s8 = "1"; // type 这里是设置
属于商品交易
string s9 = "1"; // number 商品数量string AliPayUrl = URL(t1,t2,t3,s1,s2,s3,s4,s5,s6,s7,s8,s9);
Response.Redirect(""+AliPayUrl+"");
Response.End();
}
//拼凑支付宝需要的传出参数
public string URL(string t1,string t2,string t3,string s1,string s2,string s3,string s4,string s5,string s6,string s7,string s8,string s9)
{
string str2CreateAc=null,itemURL=null;
string INTERFACE_URL=null,sellerEmail=null,keyCode=null;
INTERFACE_URL = t1+t2;
sellerEmail = t2;
keyCode = t3;
str2CreateAc = "cmd" + s1 + "subject" + s2;
str2CreateAc = str2CreateAc + "body" + s3;
str2CreateAc = str2CreateAc + "order_no" + s4;
str2CreateAc = str2CreateAc + "price" + s5;
str2CreateAc = str2CreateAc + "type" + s8;
str2CreateAc = str2CreateAc + "number" + s9;
str2CreateAc = str2CreateAc + "seller" + sellerEmail;
str2CreateAc = str2CreateAc + keyCode;
string acCode = GetMD5(str2CreateAc);
itemURL = INTERFACE_URL + "?cmd=" + s1;
itemURL = itemURL + "&subject=" + s2;
itemURL = itemURL + "&body=" + s3;
itemURL = itemURL + "&order_no=" + s4;
itemURL = itemURL + "&price=" + s5;
itemURL = itemURL + "&type=" + s8;
itemURL = itemURL + "&number=" +s9;
itemURL = itemURL + "&ac=" + acCode;
return itemURL;
}
//对中文字符串的处理办法
public string GetMD5(string s)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t = https://www.doczj.com/doc/507264925.html,puteHash(Encoding.GetEncoding("gb2312").GetBytes(s) );
StringBuilder sb = new StringBuilder(32);
for(int i=0; i { sb.Append( t[i].ToString("x").PadLeft(2, '0')); } return sb.ToString(); } 分类: .net(https://www.doczj.com/doc/507264925.html,), .net(https://www.doczj.com/doc/507264925.html,&https://www.doczj.com/doc/507264925.html,)
<%
string order = "工行提交地址";
string interfaceName = "ICBC_PERBANK_B2C"; //接口名
string interfaceVersion = "1.0.0.0"; //版本号
string orderid = "订单号";
string amount ="订单金额";
string curType = "001"; //金额类型
string merID = "帐号";
string merAcct = "代码";
string verifyJoinFlag = "联名标志";
string notifyType = "HS";//通知类型
string merURL = "http://地址/Get.aspx"; //接收银行消息地址
string resultType = "0";//对应通知类型
string goodsID = "商品编号";
string goodsName = "商品名称";
string goodsNum = "商品数量";
string carriageAmt = "运费金额";
string merHint = "商城提示";
string orderDate = "订单时间"; //格式yyyyMMddHHmmss
string merCert = "";//证书公钥,下面赋值
string remark1 = "备注1";
string remark2 = "备注2";
string path1 = "public.crt";//public公钥路径
string path2 = "icbm.crt";//拆分pfx后缀的证书后的公钥路径
string path3 = "icbm.key";//拆分pfx后缀的证书后的私钥路径
string key = "111111";//私钥保护密码
string merSignMsg = "";加密后的字符串,下面赋值
//下面是需要加密的明文字符串
string msg = interfaceName + interfaceVersion + merID + merAcct + merURL + notifyType + orderid + amount + curType + resultType + orderDate + verifyJoinFlag;
ICBCEBANKUTILLib.B2CUtil obj = new ICBCEBANKUTILLib.B2CUtilClass(); //项目中引用组件,以声明的方式创建com组件。我不知道有没有其他的方式创建组件了。
if (obj.init(path1,path2,path3,key) == 0) //加载公钥、私钥、密码,如果返回0则初始化成功
{
merSignMsg = obj.signC(msg,msg.Length);//加密明文
merCert = obj.getCert(1);//提取证书
}
else
{
Response.Write(obj.getRC()); //返回签名失败信息
}
%>