1、原理:Paypal的交易原理很簡單,就是將您要支付的頁面Post提交到他的服務器上。你的頁面上要有他要的必要信息即可。
2、提交URL:
測試用的為:
真實用的為:
3、實例:
<form id="form1" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick" />//表示立即支付
<input type="hidden" name="business" value="youraccount@test.com" />//您的賬號
<input type="hidden" name="item_name" value="order_no" />//訂單號
<input type="hidden" name="amount" value="order_amount" />//訂單金額
<input type="hidden" name="currency_code" value="USD" />//交易幣種
<input type="submit" id="btnSubmit" value="確定提交" />
</form>
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 = "https://www.sandbox.paypal.com/cgi-bin/webscr";
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")//交易狀態 成功
{
//做你要做的事,比如更新訂單。
}
}
}
更多信息請參見:
解決方案體驗中心