2012-03-02 88 views

回答

7

只要與PayPal的BuyNow按鈕+ PDT過程相似,所需的系統就稱爲SagePay Form。首先,你需要創建一個表單,像這樣:

<form action="https://live.sagepay.com/gateway/service/vspform-register.vsp" method="POST" id="SagePayForm" name="SagePayForm"> 
    <input type="hidden" name="VPSProtocol" value="2.23" /> 
    <input type="hidden" name="TxType" value="PAYMENT" /> 
    <input type="hidden" name="Vendor" value="<?= $YOUR_VENDOR_LOGIN_NAME ?>" /> 
    <input type="hidden" name="Crypt" value="<?= $PAYMENT_CRYPT ?>">  
    <input type="image" src="images/buynow-sagepay.png" /> 
</form> 

(一個可以與測試一個在這裏交換直播網址:https://test.sagepay.com/gateway/service/vspform-register.vsp

至於$ PAYMENT_CRYPT,你必須首先創建一個字符串像這樣:

VendorTxCode=406227821909 
&Amount=32.00 
&Currency=USD 
&Description=1 ACME Widget 
&SuccessURL=http://example.com/success.php 
&FailureURL=http://example.com/fail.php 
&BillingSurname=Smith 
&BillingFirstnames=John 
&BillingAddress1=123 Main Street 
&BillingCity=Anywhere 
&BillingPostCode=29555 
&BillingCountry=USA 
&DeliverySurname=Smith 
&DeliveryFirstnames=John 
&DeliverAddress1=123 Main Street 
&DeliveryCity=Anywhere 
&DeliveryPostCode=29555 
&DeliveryCountry=USA 

這是愚蠢的爲什麼他們需要一些這方面的信息時,貝寶沒有,但哦。如果文件沒有像真正的郵政編碼那樣驗證該城市和國家的合法價值,並且還用於問題爭議仲裁,則該文件明確表示該錯誤將被錯誤地排除。

請注意,在我的示例中,PP沒有稅或運費突破,因此您需要在顯示此BuyNow按鈕之前根據需要顯示,或者在您的確認頁面或確認電子郵件中發送。他們確實有一個「&籃子=」參數,可以指定稅額,但它對於您自己可以在表單頁上顯示的內容是多餘的,而不是必需的。因此,&金額必須是總值,而不是淨值。也沒有數量值(可以使用Basket參數來指定)。您很可能會發現&購物籃參數僅僅是您在結帳過程中已經顯示在自己表單上的內容。所以,這就是我的例子沒有包含它的原因。

至於VendorTxCode,這是您創建的內容,以便您可以將訂單追溯回適當的客戶。

這個$ PAYMENT_CRYPT然後使用XOR + Base64編碼,使用SagePay提供的加密密碼進行加密。他們有一個AES + Binhex加密選項,但它是矯枉過正,你的服務器必須啓用mcrypt庫。一些共享託管計劃仍然尚未啓用!

他們提供了XOR示例,但它是您在計算機科學課程中無數次看到的典型示例,您可以反覆循環訪問密碼的每個ASCII代碼和數據的每個ASCII代碼,並獲取其他的補碼位異或過程)。完成後,通過Base64編碼進行安全POST傳輸。 Base64編碼使用PHP的內置函數。

由此產生的迴應更像PayPal的PDT過程,而不是PayPal的IPN過程。他們通過GET指導success.php和fail.php以及加密的URL響應,您可以解密和解析(base64 decode + XOR),但是難度在於客戶可以在等待頁面前關閉表單重定向。在這種情況下,人們會在SagePay的控制面板中看到此信息,並且必須爲客戶手動完成交易。

關於success.php和fail.php,這取決於你想要做什麼。一旦查詢字符串& crypt參數未加密,您可以通過查看Status參數爲「OK」來解析事務是否完成。

請注意,您不必直接進入success.php。您可以使它像success.php?custom = value來傳遞關於您可以解析的事務的額外信息。他們的代碼會自動計算出來,並在最後加上& crypt =參數。 fail.php也是一樣。

他們確實有辦法讓SagePay向客戶和供應商發送電子郵件,但這確實是過火,因爲您可以在執行訂單時使用mail()語句在您自己的PHP代碼中執行相同的操作。

參考:請注意,以下doc URL可能會在將來更改。要獲取最新版本的文檔,請訪問網站,註冊爲開發人員(1分鐘的過程),並搜索「表單協議」。

http://www.sagepay.com/sites/default/files/downloads/sagepayformprotocolandintegrationguidelines_0.pdf

編輯:新幹線(2017年10月25日) - https://www.sagepay.co.uk/file/25041/download-document/FORM_Integration_and_Protocol_Guidelines_270815.pdf

+0

末鏈接死。我收到錯誤 - 5080:表單事務註冊失敗。使用上面的例子。有沒有一種方法可以調試?有工作的例子嗎?字符串可以直接添加到表單中還是更多? – Jon 2017-02-28 15:20:21