1、原理:paypal的交易原理很简单,就是将您要支付的页面post提交到他的服务器上。你的页面上要有他要的必要信息即可。
2、提交url:
测试用的为:
真实用的为:
3、实例:
action="" method="post">
//表示立即支付
//您的账号
//订单号
//订单金额
//交易币种
4、提交后的反馈信息:ipn使用
当您收到新的付款交易或者已发生的付款交易的状态发生变化时,paypal都将异步发送付款详细数据到您所指定的url,以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知(简称 ipn)。
ipn 在以前的文章中以设置好,忘记的同学可以回过头去看看。
paypal 会将一些交易信息返回给您指定的页面:
接收信息的页面 notify_url.cs 中的代码如下:
//获取参数
public static string getformstring(string strname)
{
if (httpcontext.current.request.form[strname] == null)
return "";
return httpcontext.current.request.form[strname];
}
//向paypal请求验证
private string validatepaypalinfo(int payment_id)
{
try
{
string strlive = "";
string strformvalues;
string strnewvalues;
string strresponse;
system.net.servicepointmanager.securityprotocol = securityprotocoltype.tls12;
httpwebrequest req = (httpwebrequest)webrequest.create(strlive);
req.method = "post";
req.contenttype = "application/x-www-form-urlencoded";
byte[] param = httpcontext.current.request.binaryread(httpcontext.current.request.contentlength);
strformvalues = encoding.ascii.getstring(param);
strnewvalues = strformvalues "&cmd=_notify-validate";
req.contentlength = strnewvalues.length;
streamwriter stout = new streamwriter(req.getrequeststream(), encoding.ascii);
stout.write(strnewvalues);
stout.close();
streamreader sr = new streamreader(req.getresponse().getresponsestream());
strresponse = sr.readtoend();
sr.close();
return strresponse;
}
catch (exception e)
{
utils.writelog("paypal", "paypal have some error:" e.message " \r\n" e.stacktrace);
return "";
}
}
//接收
protected void page_load(object sender, eventargs e)
{
string trade_no = getformstring("txn_id"); //交易号
string order_no = getformstring("item_name").toupper(); //获取订单号
string total_fee = getformstring("mc_gross"); //获取总金额
string trade_status = getformstring("payment_status"); //交易状态
string strresponse = validatepaypalinfo(site_payment_id);
if (strresponse.toupper() == "verified")//验证成功
{
if (trade_status.tolower() == "completed")//交易状态 成功
{
//做你要做的事,比如更新订单。
}
}
}
更多信息请参见: