我一直在考慮在後臺沒有任何網站而不是付費頁面作爲C++桌面應用程序的一部分。 是否有可能遵循以下方案: 1.生成發票/銷售並通過REST API獲取某種類型的唯一ID以供事務處理。 2.使用唯一的ID重定向到PayPal網站到臨時付款頁面。 3.在後臺,通過REST API每隔幾分鐘檢查一次付款是否已完成。與沒有網站的PayPal集成
1
A
回答
1
我們終於找到了一種方法,這就是爲什麼我發佈這個答案以及我們開發的一些代碼(POC)。這是內置支付處理引擎的POC,它允許您接受任何信用卡持有者(無論是PayPal客戶)的付款,並支付解鎖軟件產品或特定功能的費用。
要處理付款,您需要申請PayPal developer並獲得您自己的PayPal憑證。您將收到2組憑證。一個用於測試(「沙盒」),另一個用於真實生活。
首先,你可以使用沙盒測試API
Void InitPayPal(BOOL Sandbox, LPTSTR User, LPTSTR password, LPTSTR signature, LPTSTR successUrl, LPTSTR failedURL)
沙盒 - 表示是否要使用PayPal的沙盒帳戶測試您的集成,或去住。
用戶 - 您的PayPal用戶名
密碼 - 您的PayPal密碼
簽名 - 你的PayPal簽名
successUrl - 一個URL導致一個網頁,您希望在成功付款後顯示。
failedURL - 一個網址導致您希望在失敗/可以支付後顯示的網頁。
此功能是直截了當:
void InitPayPal(BOOL Sandbox, LPTSTR User, LPTSTR password, LPTSTR signature, LPTSTR successUrl, LPTSTR failedURL, LPWSTR ProductName)
{
m_sandbox = Sandbox;
m_user = User;
m_password = password;
m_signature = signature;
m_SuccessURL = successUrl;
m_FailureURL = failedURL;
m_ProductName = ProductName;
CUR_CHAR = L"$";
SYSTEMTIME st;
GetSystemTime(&st);
g_tPayStart = CTime(st);
InitilizedPaypal = TRUE;
}
起始支付 當你想從你的程序進行付款,您調用下面的函數,我寫這一般建一個字符串(ExpChkoutStr)並使用下面的PayPal API調用:
// Send string to PayPal server
WinHttpClient WinClient1(ExpChkoutStr.GetBuffer());
WinClient1.SetRequireValidSslCertificates(false);
WinClient1.SendHttpRequest(L"GET");
httpResponseContent1 = WinClient1.GetResponseContent();
CString strTransactionRet = UrlDecode(httpResponseContent1.c_str());
CString result;
result = (m_sandbox) ? PAYPAL_SANDBOX_HTTPS : PAYPAL_REAL_HTTPS;
result += Q_USER;
result += m_user;
result += AND_PASSWORD;
result += m_password;
result += AND_SIGNATURE;
result += m_signature;
result += AND_PAYMENTAMOUNT;
result += strAmount;
result += L"&METHOD=SetExpressCheckout";
result += AND_RETURN_URL;
result += m_SuccessURL;
result += AND_CANCEL_URL;
result += m_FailureURL;
result += AND_VERSION;
result += L"&NOSHIPPING=1";
result += L"&ADDROVERRIDE=0&BRANDNAME=Secured Globe, Inc.";
result += L"&PAYMENTREQUEST_0_DESC=";
result += L"Item name: " + strUnits + L"(" + UnitName + L") ";
result += L"Price: " + strAmount;
result += L"&NOTETOBUYER=Here you can add a note to the buyer";
從貝服務器的結果是一個「令牌:
的快速結帳字符串(ExpChkoutStr)由使用成員變量的值和交易細節成一個字符串另一個函數生成「用來找出一個一次性的網頁(LinkToOpen),必須按順序打開最終用戶確認購買:
// Extract token from response
CString sToken = ExtractElement(strTransactionRet, L"TOKEN");
if (sToken == L"")
{
wprintf(L"Internal error: (Paypal): no token was generated (%s)", strTransactionRet);
MessageBox(NULL, L"Internal payment processing error", L"", MB_OK);
return FALSE;
}
CString LinkToOpen = (m_sandbox) ? SANDBOX_PAYPAL_CHECKOUT : REAL_PAYPAL_CHECKOUT;
LinkToOpen += L"&token=";
LinkToOpen += sToken;
然後,我們使用默認的Web編程打開這個一次性的網頁瀏覽器:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
CString command_line;
command_line.Format(L"cmd.exe /c start \"link\" \"%s\" ", LinkToOpen);
// LinkToOpen
if (!CreateProcess(NULL, // No module name (use command line)
command_line.GetBuffer(),
NULL, // Process handle not inheritable
NULL, // Thread handle not inhberitable
FALSE, // Set handle inheritance to FALSE
NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
wprintf(L"CreateProcess failed (%d).\n", GetLastError());
// At this stage you would want to mark this transaction as "failed"
return FALSE;
}
然後剩下的就是保持所有未決事務的小型數據庫,並跟進他們每個人,直到它要麼成功,失敗,取消或超時是否已經過去。
爲了從PayPal的服務器響應的元素,我們寫了這個小功能:
CString ExtractElement(CString EntireString, CString ElementName)
{
CString result = L"";
CString WhatToFind = ElementName + L"=";
int foundToken = EntireString.Find(WhatToFind);
if (foundToken > -1)
{
int EndToken = EntireString.Find(L"&", foundToken);
if (EndToken != -1)
{
result = EntireString.Mid(foundToken + ElementName.GetLength()+1, EndToken - foundToken - ElementName.GetLength()-1);
}
}
return result;
}
相關問題
- 1. 網站PayPal集成
- 2. 將多個WooCommerce網站與PayPal集成
- 3. 集成PayPal定製網站
- 4. PayPal集成到網站
- 5. 將PayPal IPN集成到網站
- 6. 用PHP自定義paypal網站集成
- 7. API與網站的集成
- 8. Paypal與PHP集成
- 9. 將DotNetNuke與現有網站集成
- 10. 將Alfresco與現有網站集成
- 11. Urchin與Asp.net網站集成
- 12. paypal支付網關集成
- 13. 網站集成
- 14. 將Paypal與Phalcon 3集成
- 15. 在ASP.NET MVC網站上集成PayPal的簡單解決方案
- 16. 將我的網站與BlogEngine.Net集成
- 17. socialengine與外部php網站的集成
- 18. Shibboleth與我的.net網站集成
- 19. 將Wordpress與我的網站集成
- 20. Paypal沙箱集成在asp.net網站使用網站付款標準
- 21. phpbb網站集成
- 22. Facebook - 網站集成
- 23. PayPal集成困境:PDT在返回網站時掛起
- 24. 使用nvp api集成asp.net購物網站與paypal使用nvp api
- 25. 將網站與離線系統集成
- 26. 將Android登錄與ASP.NET網站集成
- 27. 如何將symfony網站與whmcs集成
- 28. Facebook與外部網站集成
- 29. 將半動態網站與CMS集成
- 30. 網站登錄與phpBB3集成