2011-09-20 165 views
2

我在我的網站上實施了PayPal。當用戶選擇支付服務時,他被重定向到支付他付款的地方,最後他被重定向回我的網站。
這裏我混合了IPN和PDT。付款後,我收到IPN消息並將所有變量保存在數據庫中。
當用戶回到這裏的網站時,我得到他的TXN_ID和UserID(來自會話)並將其存儲在數據庫中。
我在某處讀到將pdt和ipn混合使用不好。有沒有更好的方法用UserID保存IPN變量?我可以以某種方式發送UserId付費朋友,並在用戶完成付款後用IPN消息獲得該消息嗎?PayPal IPN和PDT混合

對不起,我必須重新打開問題。我添加了「發票」字段以發送用戶ID付費朋友。但是,當我嘗試使用相同的用戶ID重新付款時,我被重定向到付費頁面,並且收到此錯誤消息:

此發票已支付。欲瞭解更多信息,請致電 與商家聯繫。

它接縫,發票不是一個好的選擇發送用戶ID付費朋友。

我試圖把用戶ID放在「自定義」字段中。

<input name="custom" type="hidden" id="custom" value="<%= UserInfo.UserID%>"> 

但所有我在IPN消息得到的是:

定製=%3C%25%3D + UserInfo.UserID%25%3E

回答

3

我做的事情是這樣的使用發票字段。這是一個您可以發送PayPal的領域,他們會在回覆中將其發回。這是我如何識別從PayPal返回的交易。

在我的情況下,我不處理PDT和IPN消息。我只處理那個首先擊中我的人。當第二條消息(PDT或IPN)到達時,我檢查我是否已經處理了該事務,然後我放棄它。

此外,請不要忘記,您需要驗證消息來自PayPal。一旦獲得PDT或IPN消息,您需要使用唯一的Auth_id和他們在原始消息中發送的tx令牌回發給PayPal。您不應該依賴原始郵件中的任何字段。

一旦貝寶收到您的確認請求,它會向您發送第二封包含交易明細的信息。這是你應該依賴的一個。

對於同一事務處理PDT和IPN消息,我看不到任何好處。話雖如此,我確實鼓勵你們實施這兩者,因爲他們中的任何一個都不能保證達到你。

編輯,包括如何將發票傳遞給貝寶

要通過發票到PayPal,只需創建一個領域,如:

<input type="hidden" name="invoice" value=$uniquevaluecreatedbyyourapplication> 

的唯一ID可能是你的用戶ID 。

職,貝寶將會像

paypal/or/sandbox/address?all the other fields&invoice=123456 

支付寶會在PDT和IPN消息發回的發票。

編輯 - 非唯一發票ID號

我做了進一步的研究,你可以配置貝寶接受多個交易爲同一發票ID或接受每張發票ID只有一次交易。請參閱下面的信息直接從PayPal的網站:

阻止意外付款

您可以選擇是否接受用相同的發票編號或 支付阻止付款時已經使用的發票編號。

當您收到來自買家的付款時,您可以包含可選的 發票ID字段以跟蹤付款;買家不會看到這個ID。 A 買方的發票ID必須對每筆交易都是唯一的。如果PayPal 收到付款時使用的付款ID已用於其他付款 ,PayPal將不接受該交易。在https://www.paypal.com

登錄到您的PayPal賬戶:

要設置選項阻止這種類型的付款。

我的賬戶概覽頁面打開。

單擊配置文件子選項卡。

打開配置文件摘要頁面。

在「銷售首選項」列中,單擊付款接收 首選項鍊接。

打開「付款接收首選項」頁面。

將頁面向下滾動到塊意外支付部分,如下圖 所示。

選擇下列選項之一:

  • 是,每張發票ID塊多支付 - 不接受每張發票更 不止一份付款。此選項可防止您必須退款的重複付款 。

  • 不,允許每個發票ID進行多次付款 - 不要限制收到的發票付款號碼 。選擇此選項可能導致 需要退款的重複付款。

滾動到頁面底部並單擊保存按鈕。

另一種選擇是創建發票ID與用戶ID +一個隨機數。這將使它獨一無二。

請參閱下面的示例代碼以獲取唯一的發票號碼。

var r = Math.floor(Math.random()*100000); 
var invoice = userid + "-" + r; 

您也可以使用日期&時間,而不是一個隨機數。

var d = new Date(); 
var invoice = userid + "-" + d; 

並在響應來自貝寶回來,你只需放棄破折號後會發生什麼。

我希望這會有所幫助。

+0

因此,我通過「InvoiceField」將「UserID」發送到payPal是完全安全的嗎?你能給我提供一些代碼示例如何發送它? – 1110

+0

我用示例更新了回覆。 – jdias

+0

對不起,我不想無聊,但我錯過了一件事。我有PayPal生成的「PayOnceButton」代碼。我現在添加了發票字段。但如何爲它設定價值? – 1110