IPN:即时付款通知(Instant Payment Notify 简称IPN)
PayPal设置说明:
1、注册测试帐号;
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/library_documentation 找到“Sandbox User Guide ”按照里面的说明注册“商家”、“买家”帐号;注册后商家帐号必须确认已经激活(需要登录后查看PayPal的邮件,并激活);
2、对于“商家”账户的设置;
设置完毕后,以下是代码部分
首先:提交請求頁面(各个参数请根据需要修改)
<form id="myForm" action="http://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<!--<form id="myForm" action="http://www.paypal.com/cgi-bin/webscr" method="post">--><!--实际环境使用这个-->
<input type="hidden" name="cmd" value="_xclick" /><br />
<input type="hidden" name="business" value="这里填你的PayPal卖家帐号" /><br />
商品名称:
<input type="text" name="item_name"/><br />
商品编号:
<input type="text" name="item_number" value="123" /><br />
<!--使用贝宝
<input type="hidden" name="currency_code" value="CNY" />-->
<!--使用国际paypal-->
<!---->
<input type="hidden" name="currency" value="USD" />
<br />
<input type="hidden" name="custom" value="qml" /><br />
<input type="Hidden" name="notify_url" value="付款后返回地址" />
<input type="hidden" name="return" value="付款后返回地址" /><br />
<input type="hidden" name="charset" value="gb2312" />
<br />
金额:
<input type="text" name="amount"/>
<br />
<input type="submit" value="确定"/>
</form>
以上点击确定后就跳转到PayPal付款,
以下是付款后自动返回页面
protected void Page_Load(object sender, EventArgs e)
{
//成功后返回的页面
string strFormValues;
string strResponse;
string authToken;
string txToken;
string query;
//定义您的身份标记,这里改成您的身份标记
authToken = "061Mcp86FHoBkKVtymBBgEgn7Oihzdm-upcgOkH6qazHESlEDMFg7vtKzWu";
//获取PayPal 交易流水号
txToken=Request.QueryString["tx"];
// Set the 'Method' property of the 'Webrequest' to 'POST'.
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.sandbox.paypal.com/cgi-bin/webscr");
//HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.paypal.com/cgi-bin/webscr");
myHttpWebRequest.Method = "POST";
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
//设置请求参数
query = "cmd=_notify-synch&tx=" + txToken+ "&at=" +authToken;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(query);
strFormValues = Encoding.ASCII.GetString(byte1);
myHttpWebRequest.ContentLength = strFormValues.Length;
//发送请求
StreamWriter stOut = new StreamWriter(myHttpWebRequest.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(strFormValues);
stOut.Close();
//接受返回信息
StreamReader stIn = new StreamReader(myHttpWebRequest.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close();
//取前面七个字符
string isSuccess = strResponse.Substring(0, 7);
Response.Write(isSuccess);
//显示返回的字符串,
Response.Write(strResponse);
if (isSuccess == "SUCCESS")
{
Response.Write("RESPONSE SUCESS\n ");//此处需要判断网站订单是否已经处理
Response.Write("item_number:" + Request.QueryString["item_number"].ToString()+"\n");
}
else
{
Response.Write("\n response fail");
}
}
如果得不到返回字符串,就需要检查“商家”账户是否开通,是否已经设置数据返回
PayPal返回信息说明请查看
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntro